|
|
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
Для всех алгоритмом пишут их асимптотическую оценку. Например: heap_sort: O(n log n) bin_search: O(log n) ... и т. д. и т. п. Это все дает необходимую информацию по этим алгоритмам, но на практике бывает нужно более точно определить функцию, которая бы задавала зависимость количества операций от размера входных данных. Точнее допустим мы хотим модифицированные версии быстрой сортировки, и определить которая работает быстрее на большинстве входных данных. Как этого можно добиться. Конечно можно тестировать, программу, учитывая что время которая она потратит пропорционально количеству действий. Посоветуйте документацию по этой теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 19:39 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
Дональд Кнут описывал методику определения сложности алгоритма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 01:14 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
Если пишут O(log n), то log n и есть количество операций например для двоичного поиска в 1000 элементов надо выполнить максимум log(1000) = 10 операций, где log() логарифм по основанию два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 07:23 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
А это зависит от кучи параметров - особенностей реализации, опций компилятора, железа. Например на одних и тех же данных на процессоре от intel будет быстрее одна версия алгоритма, а на amd другая. Или на процессорах с разным размером кеша. Не говоря уже о компиляции под разные архитектуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 09:29 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
Видимо, ТС хочет видеть формулу О(n Log n) в виде, например 10*n*Log(n) + 1500. То есть конкретную оценку сложности, до выделения асимптотики. Проблема в том, что один и тот же алгоритм, с одной и той же асимптотической сложностью, на разных входных данных (даже одного размера) может работать по-разному, соответственно и константы будут разные. Поэтому получение такой оценки задача неблагодарная и, в общем случае, бессмысленная. Для оценки скорости работы разных вариантов алгоритма лучше использовать прогоны на одинаковых данных и засекать время их выполнения. Такая оценка и то будет точнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 13:32 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
GrunchВидимо, ТС хочет видеть формулу О(n Log n) в виде, например 10*n*Log(n) + 1500. То есть конкретную оценку сложности, до выделения асимптотики. Проблема в том, что один и тот же алгоритм, с одной и той же асимптотической сложностью, на разных входных данных (даже одного размера) может работать по-разному, соответственно и константы будут разные. Поэтому получение такой оценки задача неблагодарная и, в общем случае, бессмысленная. Для оценки скорости работы разных вариантов алгоритма лучше использовать прогоны на одинаковых данных и засекать время их выполнения. Такая оценка и то будет точнее. Полность согласен с вашим мнением. Но иногда случается так что значения констант очень велики и это сильно влияет на время работы. Например, сортировка за время O(n^2) предпочтитеьнее чем сортировка за O(500000*log n), для малых значений n. Вопрос в том как заметить эти константы, которые иногда играют значительную роль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 14:41 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
aybek_, экспериментально. Чистый алгоритм существует только в воспалённом мозгу у теоретиков. В реальности на его скорость еще и влияет гауссовый шум который обусловлен мультизадачностью, текущей загрузкой диска и сети или в общем - конкурирующими сессиями которые работают с тобой параллельно и создают активность. Поэтому лучше проведи эксперимент на 2-х или трёх конфигурациях с разными наборами n=10,100,1000,10000 и запиши в табличку для анализа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 14:49 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
aybek_, для маленьких значений n обычно неважно, выполнится сортировка за одну тысячную секунды или за одну десятитысячную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 14:51 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
Оценки среднего времени работы детерминированных алгоритмов сортировки и хэширования. (PDF) В приведенной работе показаны методы расчета сложности алгоритмов, в том числе, и быстрой сортировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 16:29 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
On 13.05.2014 20:39, aybek_ wrote: > но на практике бывает нужно более точно определить функцию, O() -- Это не совсем функция. > Точнее допустим мы хотим модифицированные версии быстрой > сортировки, и определить которая работает быстрее на большинстве > входных данных. Это как бы немного не O, а другое. > Как этого можно добиться. Определение сложности алгоритма -- аналитическое, доказательство в виде мат.выкладок. > Посоветуйте документацию по этой теме. Очень хорошо описано в этой книге: http://www.books.ru/books/algoritmy-postroenie-i-analiz-355110/?show=1 Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн Алгоритмы. Построение и анализ Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 16:47 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
On 14.05.2014 15:41, aybek_ wrote: > Видимо, ТС хочет видеть формулу О(n Log n) в виде, например 10*n*Log(n) > + 1500. То есть конкретную оценку сложности, до выделения асимптотики. > Полность согласен с вашим мнением. Если так, то ты совсем неправ. Читай определение O. Получать конкретные константы бессмысленно с точки зрения O. Если же ты будешь настаивать, то тебе видимо нужна другая оценка алгоритма, не O. Например, просто точная формула кол-ва операций в определённом случае. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2014, 17:48 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 14.05.2014 15:41, aybek_ wrote: > Видимо, ТС хочет видеть формулу О(n Log n) в виде, например 10*n*Log(n) > + 1500. То есть конкретную оценку сложности, до выделения асимптотики. > Полность согласен с вашим мнением. Если так, то ты совсем неправ. Читай определение O. Получать конкретные константы бессмысленно с точки зрения O. Если же ты будешь настаивать, то тебе видимо нужна другая оценка алгоритма, не O. Например, просто точная формула кол-ва операций в определённом случае. Так точное количество операций тоже может быть не связанным с временем выполнения - миллион чтений из памяти по разным случайным адресам будет выполняться дольше, чем два миллиона чтений в пределах размера процессорного кеша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 08:45 |
|
||
|
Более точное определение сложности алгоритма
|
|||
|---|---|---|---|
|
#18+
aybek_ Так точное количество операций тоже может быть не связанным с временем выполнения Именно поэтому я и говорю, что лучше замерять быстродействие прогонами разных алгоритмов на одинаковых данных. Тогда можно будет более менее точно сказать - алгоритм А1 на массиве из миллиона случайных чисел тысячу раз отработал за 1,5 сек, а алгоритм А2 - за 1 сек. Алгоритм А2 быстрее. А количество операций вообще может плавать даже в случае одного алгоритма. Например, пузырьковая сортировка на уже отсортированном массиве не сделает ни одного перемещения, а при обратной сортировке (n*(n-1))/2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 09:48 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38640481&tid=1341365]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 500ms |

| 0 / 0 |
