|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
Предположим, у нас есть программно реализованный алгоритм, решающий некую задачу. Предполагается, что этот алгоритм имеет определенную сложность, выраженную нотацией "О большое", например, O(n*logn). Мы можем вызывать алгоритм на разных входных данных и замерять время его выполнения. Как программно проверить, верно ли предположение о сложности? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 12:31 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
плавно увеличивать N и замерять время работы алгоритма в различных попугаях ? 100-120-144-172-207...-1000000000000 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 12:40 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
Aklinплавно увеличивать N и замерять время работы алгоритма в различных попугаях ? 100-120-144-172-207...-1000000000000 И как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:36 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
InterloperИ как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности?Постройте два графика: получившийся и предполагаемый. Сделайте сравнение в пределах погрешности. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:38 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
График, построенные по результатам эксперимента, должен совпасть с графиком, построенным на теоретических данных, с заданной точностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:38 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
AklinInterloperИ как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности?Постройте два графика: получившийся и предполагаемый. Сделайте сравнение в пределах погрешности. Насколько большое N нужно брать для графика? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:43 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
InterloperНасколько большое N нужно брать для графика?Зависит от того, под какие данные рассчитан алгоритм. Если речь идет про простую сферическую в вакууме сортировку уровня студенческих лабораторных, то я бы сказал, что достаточно взять до миллиона элементов. Просто бывают алгоритмы, к примеру тех же сортировок, рассчитанных на сортировку малых массивов, скажем, до 20 элементов. И гонять такой алгоритм даже на 100 элементах уже кощунство. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:50 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
AklinInterloperНасколько большое N нужно брать для графика?Зависит от того, под какие данные рассчитан алгоритм. Если речь идет про простую сферическую в вакууме сортировку уровня студенческих лабораторных, то я бы сказал, что достаточно взять до миллиона элементов. Просто бывают алгоритмы, к примеру тех же сортировок, рассчитанных на сортировку малых массивов, скажем, до 20 элементов. И гонять такой алгоритм даже на 100 элементах уже кощунство. В том то и дело, что мы не знаем как устроен алгоритм внутри. Для N<1000000 он может вести себя как линейный, затем начинает вести себя как квадратичный. Так что такой принцип решения не годится. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:54 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
InterloperИ как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности? Делить время на сложность - должно асимптотически приближать к некоторой константе, т.е. Время/(n*log(n)), для Вашего примера. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:57 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
InterloperВ том то и дело, что мы не знаем как устроен алгоритм внутри. Если у алгоритма нет генератора случайных чисел в виде одного из параметров "работы", то пройдитесь от 1 до 2^K, каждый раз увеличивая размер чисел вдвое. Делая несколько замеров на каждом N, с разными входными данными. Верхний предел - простое любопытство, время, при котором компьютер будет гонять алгоритм достаточно продолжительное для вашего ожидания время. В некоторых случаях это могут и быть и сутки, но для простых замеров достаточно, чтобы алгоритм работал одну-две минуты. Если есть генератор случайных чисел и он определяет сложность, и погрешность при этом велика, то никак вы не определите, что там внутри. Для одних и тех же данных время может различаться, либо различаться не на одних и тех же, а скажем на соседних данных (с точки зрения алгоритма). Например, 2+2 будет складываться одну минуту, а 2+3 уже пятнадцать минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:58 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
Aklin, Генератор случайных чисел не обязателен. Это может быть банальное ветвление логики в зависимости от входных данных. Природа алгоритма неизвестна. Мы должны придумать универсальное решение или показать, что его не существует. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:20 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
x1ca4064InterloperИ как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности? Делить время на сложность - должно асимптотически приближать к некоторой константе, т.е. Время/(n*log(n)), для Вашего примера. Каков алгоритм проверки на асимптотическое приближение? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:20 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
InterloperAklin, Генератор случайных чисел не обязателен. Это может быть банальное ветвление логики в зависимости от входных данных. Природа алгоритма неизвестна. Мы должны придумать универсальное решение или показать, что его не существует.Кому мы должны? Понятно, что если неизвестно, что там внутри, то мы не можем даже быть уверенны, что алгоритм, дважды запущенный на одних и тех же данных, выполнится за одинаковое время. Или что из ста запусков на одних данных 99 раз выполнится за секунду, а сотый раз за час. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:56 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
Interloper Каков алгоритм проверки на асимптотическое приближение? Я бы попробовал метод наименьших квадратов для линейного приближения: если угол наклона стремится к 0, значит приближаемся к асимптоте. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:56 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
BarloneInterloperAklin, Генератор случайных чисел не обязателен. Это может быть банальное ветвление логики в зависимости от входных данных. Природа алгоритма неизвестна. Мы должны придумать универсальное решение или показать, что его не существует.Кому мы должны? Понятно, что если неизвестно, что там внутри, то мы не можем даже быть уверенны, что алгоритм, дважды запущенный на одних и тех же данных, выполнится за одинаковое время. Или что из ста запусков на одних данных 99 раз выполнится за секунду, а сотый раз за час. Внесу уточнение: алгоритм является детерминированным и завершается за конечное время на любых входных данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:58 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
x1ca4064InterloperКаков алгоритм проверки на асимптотическое приближение? Я бы попробовал метод наименьших квадратов для линейного приближения: если угол наклона стремится к 0, значит приближаемся к асимптоте. Наклона чего по отношению к чему? Как будем оценивать стремление к нулю? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:00 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
Interloper Наклона чего по отношению к чему? Как будем оценивать стремление к нулю? У Вас есть набор точек Y=(Время)/(Сложность) от X=(Сложность), после МНК получим: Y=a*X+b, если a мало (внешний задаваемый параметр, означет точность нашего диагноза), значит (Время)=O(Сложность) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:06 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
InterloperBarloneпропущено... Кому мы должны? Понятно, что если неизвестно, что там внутри, то мы не можем даже быть уверенны, что алгоритм, дважды запущенный на одних и тех же данных, выполнится за одинаковое время. Или что из ста запусков на одних данных 99 раз выполнится за секунду, а сотый раз за час. Внесу уточнение: алгоритм является детерминированным и завершается за конечное время на любых входных данных.А вам с какой целью? Успешная проверка на некотором наборе вариантов не будет являться доказательством вашего предположения. Если конечно это не полный перебор всех возможных вариантов входных данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:07 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
BarloneInterloperпропущено... Внесу уточнение: алгоритм является детерминированным и завершается за конечное время на любых входных данных.А вам с какой целью? Успешная проверка на некотором наборе вариантов не будет являться доказательством вашего предположения. Если конечно это не полный перебор всех возможных вариантов входных данных. Мне чисто из интереса. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:09 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
x1ca4064InterloperНаклона чего по отношению к чему? Как будем оценивать стремление к нулю? У Вас есть набор точек Y=(Время)/(Сложность) от X=(Сложность), после МНК получим: Y=a*X+b, если a мало (внешний задаваемый параметр, означет точность нашего диагноза), значит (Время)=O(Сложность) МНК даст нам оценку отклонения нашей функции от некоторой эталонной. Какую считать эталонной для O(N*N)? Нам то неизвестны коэффициенты, "спрятанные" внутри О большое. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:12 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
Если чисто из интереса, то непонятна претензия: InterloperДля N<1000000 он может вести себя как линейный, затем начинает вести себя как квадратичный. Так что такой принцип решения не годится. В любом случае, у программной реализации есть ограничения на входные данные: какое количество данных помещается в память, помещаются ли сами значения в используемый тип... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:15 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
Если алгоритм работает с каким-то массивом, то константа про О большом будет меняться в момент, когда массив перестанет помещаться в кеш. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:22 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
BarloneЕсли чисто из интереса, то непонятна претензия: InterloperДля N<1000000 он может вести себя как линейный, затем начинает вести себя как квадратичный. Так что такой принцип решения не годится. В любом случае, у программной реализации есть ограничения на входные данные: какое количество данных помещается в память, помещаются ли сами значения в используемый тип... Чисто из интереса не означает ограничение общности. Предложенное решение "строить график от 1 до какого-то конкретного N" неверно в общем случае, о чем я и написал. Считаем, что у нас бесконечно много памяти, чтобы вместить любые входные данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:24 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
InterloperЧисто из интереса не означает ограничение общности. Предложенное решение "строить график от 1 до какого-то конкретного N" неверно в общем случае, о чем я и написал. Считаем, что у нас бесконечно много памяти, чтобы вместить любые входные данные.Для практического применения вполне нормально. А для теоретических рассуждений о бесконечной памяти и бесконечном времени - нужно и перебор вести до бесконечности. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:34 |
|
Верификация сложности алгоритма
|
|||
---|---|---|---|
#18+
BarloneInterloperЧисто из интереса не означает ограничение общности. Предложенное решение "строить график от 1 до какого-то конкретного N" неверно в общем случае, о чем я и написал. Считаем, что у нас бесконечно много памяти, чтобы вместить любые входные данные.Для практического применения вполне нормально. А для теоретических рассуждений о бесконечной памяти и бесконечном времени - нужно и перебор вести до бесконечности. То есть такой проверяющий алгоритм не существует? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:47 |
|
|
start [/forum/topic.php?fid=16&msg=39827271&tid=1339926]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 237ms |
total: | 374ms |
0 / 0 |