Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Верификация сложности алгоритма / 25 сообщений из 118, страница 1 из 5
17.06.2019, 12:31
    #39827176
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
Предположим, у нас есть программно реализованный алгоритм, решающий некую задачу. Предполагается, что этот алгоритм имеет определенную сложность, выраженную нотацией "О большое", например, O(n*logn). Мы можем вызывать алгоритм на разных входных данных и замерять время его выполнения.
Как программно проверить, верно ли предположение о сложности?
...
Рейтинг: 0 / 0
17.06.2019, 12:40
    #39827179
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
плавно увеличивать N и замерять время работы алгоритма в различных попугаях ?

100-120-144-172-207...-1000000000000
...
Рейтинг: 0 / 0
17.06.2019, 13:36
    #39827207
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
Aklinплавно увеличивать N и замерять время работы алгоритма в различных попугаях ?

100-120-144-172-207...-1000000000000

И как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности?
...
Рейтинг: 0 / 0
17.06.2019, 13:38
    #39827208
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
InterloperИ как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности?Постройте два графика: получившийся и предполагаемый. Сделайте сравнение в пределах погрешности.
...
Рейтинг: 0 / 0
17.06.2019, 13:38
    #39827209
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
График, построенные по результатам эксперимента, должен совпасть с графиком, построенным на теоретических данных, с заданной точностью.
...
Рейтинг: 0 / 0
17.06.2019, 13:43
    #39827211
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
AklinInterloperИ как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности?Постройте два графика: получившийся и предполагаемый. Сделайте сравнение в пределах погрешности.

Насколько большое N нужно брать для графика?
...
Рейтинг: 0 / 0
17.06.2019, 13:50
    #39827214
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
InterloperНасколько большое N нужно брать для графика?Зависит от того, под какие данные рассчитан алгоритм.

Если речь идет про простую сферическую в вакууме сортировку уровня студенческих лабораторных, то я бы сказал, что достаточно взять до миллиона элементов.

Просто бывают алгоритмы, к примеру тех же сортировок, рассчитанных на сортировку малых массивов, скажем, до 20 элементов. И гонять такой алгоритм даже на 100 элементах уже кощунство.
...
Рейтинг: 0 / 0
17.06.2019, 13:54
    #39827215
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
AklinInterloperНасколько большое N нужно брать для графика?Зависит от того, под какие данные рассчитан алгоритм.

Если речь идет про простую сферическую в вакууме сортировку уровня студенческих лабораторных, то я бы сказал, что достаточно взять до миллиона элементов.

Просто бывают алгоритмы, к примеру тех же сортировок, рассчитанных на сортировку малых массивов, скажем, до 20 элементов. И гонять такой алгоритм даже на 100 элементах уже кощунство.

В том то и дело, что мы не знаем как устроен алгоритм внутри.
Для N<1000000 он может вести себя как линейный, затем начинает вести себя как квадратичный.
Так что такой принцип решения не годится.
...
Рейтинг: 0 / 0
17.06.2019, 13:57
    #39827219
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
InterloperИ как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности?

Делить время на сложность - должно асимптотически приближать к некоторой константе, т.е. Время/(n*log(n)), для Вашего примера.
...
Рейтинг: 0 / 0
17.06.2019, 13:58
    #39827220
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
InterloperВ том то и дело, что мы не знаем как устроен алгоритм внутри.
Если у алгоритма нет генератора случайных чисел в виде одного из параметров "работы", то пройдитесь от 1 до 2^K, каждый раз увеличивая размер чисел вдвое. Делая несколько замеров на каждом N, с разными входными данными. Верхний предел - простое любопытство, время, при котором компьютер будет гонять алгоритм достаточно продолжительное для вашего ожидания время. В некоторых случаях это могут и быть и сутки, но для простых замеров достаточно, чтобы алгоритм работал одну-две минуты.

Если есть генератор случайных чисел и он определяет сложность, и погрешность при этом велика, то никак вы не определите, что там внутри. Для одних и тех же данных время может различаться, либо различаться не на одних и тех же, а скажем на соседних данных (с точки зрения алгоритма). Например, 2+2 будет складываться одну минуту, а 2+3 уже пятнадцать минут.
...
Рейтинг: 0 / 0
17.06.2019, 14:20
    #39827232
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
Aklin,

Генератор случайных чисел не обязателен. Это может быть банальное ветвление логики в зависимости от входных данных. Природа алгоритма неизвестна. Мы должны придумать универсальное решение или показать, что его не существует.
...
Рейтинг: 0 / 0
17.06.2019, 14:20
    #39827233
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
x1ca4064InterloperИ как понять, что получившаяся последовательность замеров действительно соответствует предполагаемой сложности?

Делить время на сложность - должно асимптотически приближать к некоторой константе, т.е. Время/(n*log(n)), для Вашего примера.

Каков алгоритм проверки на асимптотическое приближение?
...
Рейтинг: 0 / 0
17.06.2019, 14:56
    #39827255
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
InterloperAklin,

Генератор случайных чисел не обязателен. Это может быть банальное ветвление логики в зависимости от входных данных. Природа алгоритма неизвестна. Мы должны придумать универсальное решение или показать, что его не существует.Кому мы должны? Понятно, что если неизвестно, что там внутри, то мы не можем даже быть уверенны, что алгоритм, дважды запущенный на одних и тех же данных, выполнится за одинаковое время. Или что из ста запусков на одних данных 99 раз выполнится за секунду, а сотый раз за час.
...
Рейтинг: 0 / 0
17.06.2019, 14:56
    #39827256
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
Interloper
Каков алгоритм проверки на асимптотическое приближение?

Я бы попробовал метод наименьших квадратов для линейного приближения: если угол наклона стремится к 0, значит приближаемся к асимптоте.
...
Рейтинг: 0 / 0
17.06.2019, 14:58
    #39827261
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
BarloneInterloperAklin,

Генератор случайных чисел не обязателен. Это может быть банальное ветвление логики в зависимости от входных данных. Природа алгоритма неизвестна. Мы должны придумать универсальное решение или показать, что его не существует.Кому мы должны? Понятно, что если неизвестно, что там внутри, то мы не можем даже быть уверенны, что алгоритм, дважды запущенный на одних и тех же данных, выполнится за одинаковое время. Или что из ста запусков на одних данных 99 раз выполнится за секунду, а сотый раз за час.

Внесу уточнение: алгоритм является детерминированным и завершается за конечное время на любых входных данных.
...
Рейтинг: 0 / 0
17.06.2019, 15:00
    #39827262
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
x1ca4064InterloperКаков алгоритм проверки на асимптотическое приближение?

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

Наклона чего по отношению к чему? Как будем оценивать стремление к нулю?
...
Рейтинг: 0 / 0
17.06.2019, 15:06
    #39827267
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
Interloper
Наклона чего по отношению к чему? Как будем оценивать стремление к нулю?

У Вас есть набор точек Y=(Время)/(Сложность) от X=(Сложность), после МНК получим:
Y=a*X+b, если a мало (внешний задаваемый параметр, означет точность нашего диагноза), значит (Время)=O(Сложность)
...
Рейтинг: 0 / 0
17.06.2019, 15:07
    #39827269
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
InterloperBarloneпропущено...
Кому мы должны? Понятно, что если неизвестно, что там внутри, то мы не можем даже быть уверенны, что алгоритм, дважды запущенный на одних и тех же данных, выполнится за одинаковое время. Или что из ста запусков на одних данных 99 раз выполнится за секунду, а сотый раз за час.

Внесу уточнение: алгоритм является детерминированным и завершается за конечное время на любых входных данных.А вам с какой целью? Успешная проверка на некотором наборе вариантов не будет являться доказательством вашего предположения. Если конечно это не полный перебор всех возможных вариантов входных данных.
...
Рейтинг: 0 / 0
17.06.2019, 15:09
    #39827271
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
BarloneInterloperпропущено...


Внесу уточнение: алгоритм является детерминированным и завершается за конечное время на любых входных данных.А вам с какой целью? Успешная проверка на некотором наборе вариантов не будет являться доказательством вашего предположения. Если конечно это не полный перебор всех возможных вариантов входных данных.

Мне чисто из интереса.
...
Рейтинг: 0 / 0
17.06.2019, 15:12
    #39827276
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
x1ca4064InterloperНаклона чего по отношению к чему? Как будем оценивать стремление к нулю?

У Вас есть набор точек Y=(Время)/(Сложность) от X=(Сложность), после МНК получим:
Y=a*X+b, если a мало (внешний задаваемый параметр, означет точность нашего диагноза), значит (Время)=O(Сложность)

МНК даст нам оценку отклонения нашей функции от некоторой эталонной. Какую считать эталонной для O(N*N)? Нам то неизвестны коэффициенты, "спрятанные" внутри О большое.
...
Рейтинг: 0 / 0
17.06.2019, 15:15
    #39827278
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
Если чисто из интереса, то непонятна претензия:
InterloperДля N<1000000 он может вести себя как линейный, затем начинает вести себя как квадратичный.
Так что такой принцип решения не годится.
В любом случае, у программной реализации есть ограничения на входные данные: какое количество данных помещается в память, помещаются ли сами значения в используемый тип...
...
Рейтинг: 0 / 0
17.06.2019, 15:22
    #39827286
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
Если алгоритм работает с каким-то массивом, то константа про О большом будет меняться в момент, когда массив перестанет помещаться в кеш.
...
Рейтинг: 0 / 0
17.06.2019, 15:24
    #39827287
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
BarloneЕсли чисто из интереса, то непонятна претензия:
InterloperДля N<1000000 он может вести себя как линейный, затем начинает вести себя как квадратичный.
Так что такой принцип решения не годится.
В любом случае, у программной реализации есть ограничения на входные данные: какое количество данных помещается в память, помещаются ли сами значения в используемый тип...
Чисто из интереса не означает ограничение общности. Предложенное решение "строить график от 1 до какого-то конкретного N" неверно в общем случае, о чем я и написал.
Считаем, что у нас бесконечно много памяти, чтобы вместить любые входные данные.
...
Рейтинг: 0 / 0
17.06.2019, 15:34
    #39827291
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
InterloperЧисто из интереса не означает ограничение общности. Предложенное решение "строить график от 1 до какого-то конкретного N" неверно в общем случае, о чем я и написал.
Считаем, что у нас бесконечно много памяти, чтобы вместить любые входные данные.Для практического применения вполне нормально. А для теоретических рассуждений о бесконечной памяти и бесконечном времени - нужно и перебор вести до бесконечности.
...
Рейтинг: 0 / 0
17.06.2019, 15:47
    #39827300
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Верификация сложности алгоритма
BarloneInterloperЧисто из интереса не означает ограничение общности. Предложенное решение "строить график от 1 до какого-то конкретного N" неверно в общем случае, о чем я и написал.
Считаем, что у нас бесконечно много памяти, чтобы вместить любые входные данные.Для практического применения вполне нормально. А для теоретических рассуждений о бесконечной памяти и бесконечном времени - нужно и перебор вести до бесконечности.

То есть такой проверяющий алгоритм не существует?
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Верификация сложности алгоритма / 25 сообщений из 118, страница 1 из 5
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]