Академический Документы
Профессиональный Документы
Культура Документы
данных
Лекция 5
29.09.2023
Метод «Разделяй и властвуй»
• Разделение задачи на несколько подзадач, которые
представляют собой меньшие экземпляры той же задачи
• Властвование над задачами путем их рекурсивного решения.
Если размеры задачи малы, они могут решаться непосредственно
• Комбинирование решений подзадач в решение исходной задачи
Основной метод (master method)
• Расматриваем функции вида T(n)=aT(n/b)+f(n)
Доказательство теоремы
Рассмотрим дерево рекурсии данного соотношения. Всего в нем будет log 𝑏 𝑛 уровней.
На каждом таком уровне, количество детей в дереве будет умножаться на 𝑎, так на уровне 𝑖 будет 𝑎𝑖 детей. Также известно, что каждый ребенок
𝑖 𝑖 𝑛 𝑐
на уровне 𝑖 размера 𝑛/𝑏 . Ребенок размера (𝑛/𝑏 ) требует 𝑂( 𝑖 ) дополнительных затрат, поэтому общее количество совершенных действий
𝑏
𝑛 𝑐 𝑎 𝑖
на уровне 𝑖 ∶ 𝑂(𝑎𝑖 𝑖 ) = 𝑂(𝑛𝑐 (𝑎𝑖 /𝑏𝑖𝑐 )) = 𝑂(𝑛𝑐 𝑐 )
𝑏 𝑏
𝑎 𝑖
Заметим, что количество операций увеличивается, уменьшается и остается константой, если увеличивается, уменьшается или остается
𝑏𝑐
константой соответственно.
Поэтому решение разбивается на три случая, когда 𝑎/𝑏𝑐 больше 1, равна 1 или меньше 1. 𝑎𝑏𝑐 = 1 ⇔ 𝑎 = 𝑏𝑐 ⇔ log 𝑏 𝑎 = 𝑐 log 𝑏 𝑏 ⇔ log 𝑏 𝑎 = 𝑐.
log 𝑛 𝑎 𝑖 log 𝑛 𝑎 𝑖
Распишем всю работу в течение рекурсивного спуска: 𝑇(𝑛) = σ𝑖=0𝑏 𝑂( 𝑛𝑐 ⋅ ) + 𝑂(1) = 𝑂(𝑛𝑐 ⋅ σ𝑖=0𝑏 )
𝑏𝑐 𝑏𝑐
Откуда получаем:
• log 𝑛
𝑐 = log 𝑏 𝑎 ⇒ 𝑇 𝑛 = σ𝑖=0𝑏 𝑛𝑐
𝑎 𝑖
𝑏𝑐
= 𝑛𝑐 ⋅ σ𝑖=0𝑏
log 𝑛𝑎 𝑖
𝑏𝑐
log 𝑛
= 𝑛𝑐 ⋅ σ𝑖=0𝑏 1 = 𝑛𝑐 + 𝑛𝑐 log 𝑏 𝑛 = 𝑂(𝑛𝑐 log 𝑛)
• log𝑏 𝑎
log 𝑛
𝑐 < log 𝑏 𝑎 ⇒ 𝑇 𝑛 = σ𝑖=0𝑏 𝑛𝑐
𝑎 𝑖
𝑏𝑐
=
log 𝑛 𝑎 𝑖
𝑛𝑐 ⋅ σ𝑖=0𝑏 𝑏𝑐 = 𝑂 𝑛𝑐 ⋅
𝑎 log𝑏 𝑛
𝑏𝑐
, но = 𝑛𝑐
𝑎 log𝑏 𝑛
𝑏𝑐
= 𝑛𝑐
𝑎log𝑏 𝑛
𝑏log𝑏 𝑛
= 𝑛𝑐
𝑛log𝑏 𝑎
𝑛log𝑏 𝑐
=
𝑛
Quick sort
• Выбор осевого элемента
• Слева- все меньшие, справа – все большие
• Порядок не важен!
QuickSort(list, first, last)
if first < last:
pivot = PivotList(list, first, last)
QuickSort(list, first, pivot - 1)
QuickSOrt(list, pivot, last)
Сортировка подсчетом
• Линейное время – уход от сравнений
QuickSort
• Выбор Pivot – слабое место
• Сложность в худшем случае – O(n2)
• Сложность в среднем – O(nlog n)
Медиана за линейное время
Медиана за линейное время
Медиана за линейное время
Медиана за линейное время
• Количество элементов, не превышающих Х: