Возникла такая задача: написать сортировку Шелла, построить график времени работы от кол-ва элементов, найти ее теоретическую формулу для времени работы, и доказать, что практический результат совпал с теоретическим.
Я написал эту сортировку, используя последовательность смещений, сгенерированной по формуле Седжвика (
A033622, но сейчас в английской Вики и в статейке Вайса глянул - там какая-то немного другая формула.. Но в своей программе я использовал эту, из Кнута или со странички OEIS).
Мысль раз - найти формулу в Кнуте. Нашел (стр. 107):
. Построил, домножил на некую константу, построил отношение практических результатов к теоретическим (Если формула ассимптотически верна, то отношение будет равно единице, плюс минус небольшая погрешность). Получился довольно-таки монотонно возрастающий график, что не есть хорошо. Кликабельная картинка под спойлером.
(Оффтоп)
Посоветовали построить отношение к логарифмической функции (NlogN). Построил
, аналогично.
(Оффтоп)
Решил поискать формулу поточнее, нашел статейку, на которую ссылается Кнут (
http://comjnl.oxfordjournals.org/conten ... 8.abstract). Там формула сильно точнее
. Построил. Заметно лучше предыдущих, но, все-таки, небольшое увеличение есть.
(Оффтоп)
Внимание, вопрос. Если даже формула M.A. Weiss, судя по моим графикам, капельку неточна, то какую же формулу брать в качестве теоретической?
P.S. Приведены скриншоты графиков, построенных по 25603 точкам, от нуля с шагом 150 элементов (Т.е. до 3840300 элементов включительно).