Решение рекуррентных отношений с двумя рекурсивными вызовами

10

Я учусь в наихудший случае время выполнения сортировки при условии , что она никогда не будет делать очень несбалансированный раздел для различных определений очень .

Чтобы сделать это, я задаю себе вопрос, каким будет время выполнения , если быстрая сортировка всегда происходила с разбиением на некоторую дробь такую ​​что элементы находятся в левой части, а - в правой части (оставляя 1 элемент, стержень, посередине).T ( n , p ) T(n,p)0 < p 120<p12p(n-1)p(n1)(1-p)(n-1)(1p)(n1)11

Нетрудно понять, что T ( n , p )T(n,p) дает верхнюю границу для наихудшего случая, когда пp - максимально несбалансированный раздел, поскольку любой раздел с дробью > р>p будет более сбалансированным и будет иметь меньшее время выполнения, и любая дробь < р<p не допускается.

Очевидно, что T ( n , 12 )T(n,12) - лучший случай, а T ( n , 0 )T(n,0) - худший случай быстрой сортировки. Оба имеют легко повторяющиеся отношения, которые можно найти в любом образовательном ресурсе. Но я понятия не имею, как изучать T ( n , p )T(n,p) в целом. Очевидное отношение будет:

T ( n , p ) = n + T ( p ( n - 1 ), p ) + T ( ( 1 - p ) ( n - 1 ) , p )

T(n,p)=n+T(p(n1),p)+T((1p)(n1),p)

Здесь я застреваю. Я пытался искать, но вся литература, которую я мог понять об алгоритмах «разделяй и властвуй», воспринимала «разделить» буквально и «обманула» анализ, используя тот факт, что разделы всегда равны по размеру, объединяя термины в один раз. постоянная.

Я не знаю, как справиться с двумя рекурсивными вызовами, и я не знаю, безопасно ли удалить округление. Возможно ли это решить аналитически, и если да, то как?

PS: меня не интересует асимптотика (которую легко показать Θ ( п войти п )Θ(nlogn) для любой константы пp ). Меня интересует, насколько медленной становится быстрая сортировка при уменьшении пp , например меня интересует соотношение T ( n , 0,25 )T ( n , 0,5 )T(n,0.25)T(n,0.5) .

PPS: Будучи студентом бакалавриата, я прошу прощения, если я сделал очевидные вещи слишком длинными или недооцененными нетривиальности. И хотя я не знаю, смотрят ли они здесь так же, как другие сайты SE, отмечу, что это личный интерес, а не домашняя работа.

orlp
источник

Ответы:

9

Как вы упоминаете, теорема Акра – Бацци показывает, что решением рекуррентности является для всех . Однако это не раскрывает характера зависимости от . Чтобы определить последнее, мы можем использовать подход дерева рекурсии.T ( n , p ) O ( n log n ) p ( 0 , 1 ) pT(n,p)O(nlogn)p(0,1)p

В корне дерева рекурсии находится интервал . Его двое детей являются интервалы и , общая длина которых снова . У каждого из этих узлов есть два дочерних элемента (при условии, что достаточно велико) и т. Д. Для простоты мы игнорируем ошибки округления, то есть предполагаем, что является целым числом; это всего лишь техническая составляющая, и я бы об этом не беспокоился. Мы останавливаем процесс всякий раз, когда длина узла не превышает . Сложность алгоритма пропорциональна общей длине интервалов в дереве. Когда , листья{ 1 , ... п } { 1 , ... , р п } { р п + 1 , ... , п } п п р п 1 р 1 / 2{1,n}{1,,pn}{pn+1,,n}nnpn1p1/2 (узлы, на которых мы останавливаем процесс) имеют разную глубину, и это затрудняет определение общей сложности.

Мы можем получить простую верхнюю границу, отметив, что дерево имеет не более уровней: каждый узел по крайней мере в меньше своего родителя. Как и в анализе для , общая длина интервалов на любом уровне не превышает , и мы получаем верхнюю границу на Продолжительность. Так как и для малых , мы можем записать это как .войти 1 - р ( 1 / п ) 1 - р р = 1 / 2 п О ( п войти 1 - р ( 1 / п ) ) войти 1 - р ( 1 / п ) = войти п / журнал ( 1 - р ) - 1 журнал ( 1 - р ) - 1log1p(1/n)1pp=1/2nO(nlog1p(1/n))log1p(1/n)=logn/log(1p)1 = - log ( 1 - p ) = p ± O( с 2 )log(1p)1=log(1p)=p±O(p2)ppO(nlogn/p)O(nlogn/p)

Вот более точный расчет. Рассмотрим уровень . Предположим, мы не останавливаем процесс при достижении небольшого интервала. Мы можем создать случайную вершину, сделав шагов, в каждом из которых мы идем налево (скажем) с вероятностью и направо (скажем) с вероятностью . Каждый раз, когда мы делаем левый шаг, лог длины интервала уменьшается на , а каждый раз, когда мы делаем правый шаг, уменьшается на . Вершина находится в самом дереве журнала длина снизилась не более чем на . Общий вес интервалов на уровнеttttpp1p1plogplogplog(1p)log(1p)lognlognttдерева как раз и есть вероятность того, что вершина, сгенерированная в соответствии с этим процессом, соответствует уменьшению не более . То есть, если является распределение , которое равно с вероятностью и с вероятностью и являются независимыми, то общий вес уровня равен . Для суперконстантного случайная величина примерно нормально распределена со средним и дисперсией, линейной поlog n D - log p p - log ( 1 - p ) 1 - p X 1 , , X tD t Pr [ X 1 + + X tlog n ] t X 1 + + X t [ - p log p - ( 1 - p ) loglognDlogpplog(1p)1pX1,,XtDtPr[X1++Xtlogn]tX1++Xt(1p)]t[plogp(1p)log(1p)]ttt, поэтому для удовлетворяющего , скажем, вероятность будет очень близка к , тогда как для удовлетворяя , скажем, оно будет очень близко к нулю. Определив (известный как двоичная энтропийная функция), мы заключаем, что время выполнения равно (равномерный по , так как ). В качестве мы имеем , поэтому наша более ранняя оценка не была точной.tt[plogp(1p)log(1p)]t(logn)/2[plogp(1p)log(1p)]t(logn)/211tt[plogp(1p)log(1p)]t2logn[plogp(1p)log(1p)]t2lognh(p)=plogp(1p)log(1p)h(p)=plogp(1p)log(1p)Θ(nlogn/h(p))Θ(nlogn/h(p))ppnnp0p0h(p)plogph(p)plogp

Другой способ взглянуть на тот же анализ состоит в том, чтобы иметь бесконечную последовательность независимых случайных величин как и раньше, и определить время остановки как первый момент времени такой что . Время работы пропорционально . Элементарная теорема об обновлении тогда утверждает, что , подразумевая, что общий размер интервалов равен . Точнее, для каждой константы общий размер интервалов равен , гдеX1,X2,X1,X2,TTttX1++XtlognX1++XtlognnE[T]nE[T]limnE[T]/logn=1/E[D]=1/h(p)limnE[T]/logn=1/E[D]=1/h(p)(1+o(1))nlogn/h(p)(1+o(1))nlogn/h(p)pp(1+αp(n))nlogn/h(p)(1+αp(n))nlogn/h(p)αp(n)=o(n)αp(n)=o(n) . Сходимость в элементарной теореме восстановления является экспоненциальной по параметру времени - в нашем случае - поэтому она должна быть полиномиальной от , то есть . Сходимость также, вероятно, равномерна для для любого .lognlognnnαp(n)=O(nCp)αp(n)=O(nCp)p(δ,1δ)p(δ,1δ)δ>0δ>0


Подводя итог, общая длина интервалов в дереве рекурсии, которая пропорциональна времени выполнения, имеет следующую форму для каждого : где и берутся в одну базу, а является функцией, зависящей от и стремящейся к с помощью .ppT(n,p)=(1+o(1))nlognh(p),

T(n,p)=(1+o(1))nlognh(p),
lognlognh(p)=plogp(1p)log(1p)h(p)=plogp(1p)log(1p)o(1)o(1)pp00nn

Более того, вероятно, верно, что для любого и любого верно, что общая длина интервалов имеет вид где и скрытая большая константа O зависят только от . В частности, должно быть так, что для всех констант , и сходимость полиномиально быстра.δ>0δ>0p(δ,1δ)p(δ,1δ)T(n,p)=(1+O(nCδ))nlognh(p),

T(n,p)=(1+O(nCδ))nlognh(p),
Cδ>0Cδ>0δδp1,p2p1,p2limnT(n,p1)T(n,p2)=h(p2)h(p1),
limnT(n,p1)T(n,p2)=h(p2)h(p1),
Юваль Фильмус
источник
Спасибо за быстрый ответ, Юваль. Меня немного смущает тот факт, что вы использовали в своем резюме. - константа, и не значит ли это, что она не имеет отношения к ? Я решил написать небольшую тестовую программу , которая показала, что при сравнение между аналитическим и вычислительным методами дает ошибку 0,03. Это кажется довольно большим, или это следовало ожидать? Θh(p)Θn=100000000000000T(n,0.1)/T(n,0.5)
orlp
Константа в равномерна по . Точнее, для некоторых констант это тот случай, когда для каждого существует такой что для , . Возможно, вы можете получить еще более сильное утверждение вида для каждого фиксированного , где маленький o по отношению к ( но может зависеть от ); не должен зависеть от . Θpc,CpNpnNpcnlogn/h(p)T(n,p)Cnlogn/h(p)T(n,p)=(1+o(1))Cnlogn/h(p)pnpCp
Юваль Фильмус
Сходимость к пределу зависит от , поэтому вам может потребоваться, чтобы было большим, чтобы получить действительно хорошее приближение. С другой стороны, относительная ошибка 0,03 не кажется такой большой. Вы можете попытаться исправить и построить график времени работы в зависимости от , сравнив его с . lognlognnp1/h(p)
Юваль Фильмус
О, извините, я имел в виду не относительную ошибку 0,03, а абсолютную (2,13222 против 2,10339). Построение графика как функции относительно дало относительную разницу 4%, при этом составляло 96% от . T(n,p)p1/h(p)T(1011,0.05)h(0.05)T(1011,0.4)h(0.4)
orlp
1
Суперконстанта - это функция, стремящаяся к бесконечности относительно соответствующей переменной (в данном случае ). Это то же самое, что и . nω(1)
Юваль Фильмус