Есть ли метод для автоматического анализа алгоритмов во время выполнения?

10

Мне интересно, существует ли метод автоматического анализа времени выполнения, который работает, по крайней мере, на соответствующем подмножестве алгоритмов (алгоритмы, которые можно анализировать)?

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

Nathvi
источник
Я не вижу, как ударение между «любым» и «an» проясняет то, что вы действительно ищете. Если какая-то процедура принятия решения связана с конкретным алгоритмом B, то нет реального ввода и ответ всегда один и тот же. Я думаю, что вы хотите спросить, есть ли «любой алгоритм в некотором классе алгоритмов», где этот класс связан / известен. (редактировать: это также было отмечено в комментарии моего мхума).
Николас Манкузо
2
Неоднозначность использования вами «an» и «any» - это именно то, почему были изобретены квантификаторы .
Нейт Элдридж
2
Θ(nlogn)

Ответы:

12

Инструмент COSTA делает именно это, хотя во многих случаях он, как вы можете себе представить, дает сбой из-за проблем с вычислимостью . Есть много статей об этом; Анализ стоимости Java-байт-кода Э. Альбертом, П. Аренасом, С. Дженаимом, Дж. Пуэблой, Д. Занардини является хорошей отправной точкой.

Используемый подход заключается в том, чтобы вывести рекурсию во время выполнения из кода Javabyte и преобразовать ее в закрытую форму. Инструмент также вычисляет границы использования пространства.

Дэйв Кларк
источник
8
@ Натви Я могу понять, что вас раздражают некоторые комментарии, которые, я согласен, не были действительно необходимыми, но вы также должны быть осторожны, чтобы не использовать термин «педантичная чушь» для работы очень авторитетных ученых (и, между прочим, мой ответ). Вы имеете право не любить математику, но вряд ли вы добьетесь большого успеха без нее, и беспричинные уничижительные слова никому не помогут.
Бабу
12

Ни один алгоритм не может решить, останавливается ли данный алгоритм или нет, поэтому, в частности, ни один алгоритм не может точно анализировать сложность данного алгоритма.

Юваль Фильмус
источник
2
Мой вопрос не касается произвольного введенного алгоритма, который, если бы он был, тогда ваш ответ был бы правильным, из-за проблемы остановки. Вы были бы правы, если бы мой вопрос был сформулирован так: «Есть ли алгоритм A, который принимает любой алгоритм B, а затем выводит временную сложность алгоритма B?»
Натви
6
Если алгоритм B является фиксированным, то, конечно, есть алгоритм A. Достаточно иметь алгоритм, который ничего не делает, кроме вывода «O (n)» или любой меры сложности, соответствующей B. Если есть только один возможный вход для алгоритма A, тогда нам нужен только один выход.
Mhum
5
@ Натви, мне это тоже было непонятно - я также понял вопрос как «есть ли алгоритм для определения сложности любого другого алгоритма», и я до сих пор не понимаю ваш настоящий вопрос. Если вы хотите подсчитать количество голосов, очевидно,> 2 человека интерпретировали это так. В случае путаницы, это действительно хорошая идея, чтобы отредактировать ваш вопрос, иначе только люди, которые читают этот разговор (а не все, кто читает вопрос), поймут, что вы спрашиваете, и дадут хорошие ответы. Похоже, вы чувствовали, что ответ DW был враждебным - FWIW, я не думаю, что это было задумано ..
jkff
6
@ignis Ответ может быть неполным, но предложение, которое написал Ювал, абсолютно верно. И проблема остановки - это не какой-то экзотический побочный случай: это сама суть вычислений.
Дэвид Ричерби
3
@nikie Это не помогает, насколько этот вопрос идет; Границы времени выполнения неразрешимы даже на множестве всех всегда заканчивающихся алгоритмов.
Рафаэль
9

Я знаю один подход к (полу) автоматизированному анализу среднего случая, а именно MaLiJAn ¹. Это очень похоже на анализ, который Кнут использует в TAoCP. Основная идея заключается в

  • смоделировать программу (поток) как цепь Маркова,
  • n
  • n
  • используйте компьютерную алгебру, чтобы получить среднюю стоимость (с учетом этих функций).

Обратите внимание, что только аддитивные меры стоимости (например, сравнения, «время») работают и только ожидаемое значение является точным (при условии совершенных функций вероятности), более высокие моменты не могут быть получены.

Все этапы, кроме экстраполяции, являются строгими [2], и было продемонстрировано, что метод воспроизводит хорошо известные результаты с высокой точностью - конечно, с учетом подходящих случайных входных выборок. Хотя нет никаких доказательств или даже приблизительной гарантии результатов (пока шаг экстраполяции является чисто эвристическим), результаты, полученные с помощью этого инструмента, хорошо подходят для экспериментов с трудно анализируемыми алгоритмами и формулированием гипотез [3,4].


  1. Полное раскрытие: я был членом этой исследовательской группы и принимал участие в разработке инструмента.
  2. Анализ максимального правдоподобия алгоритмов и структур данных У. Лаубе и М. Небел (2010) [ препринт ]
  3. Проектирование быстрой сводной сортировки Java 7 с использованием MaLiJAn от S. Wild и др. (2012) [ препринт ]
  4. Анализ максимального правдоподобия метода Форда – Фулкерсона на специальных графиках У. Лаубе и М. Небеля (2015) [ препринт ]
Рафаэль
источник
Эти методы дают оценку точности анализа среднего случая?
Мартин Бергер
@MartinBerger К сожалению, нет. У нас есть некоторые идеи по этому поводу, но мы еще ничего не укрепили, не говоря уже о реализации. Обратите внимание, что любой метод, который проверяет только конечное число входных размеров, легко обмануть, поэтому в целом надежды мало. С допущениями относительно функций времени выполнения и / или наборов данных что-то может быть возможным. Инструмент должен по крайней мере сказать «нужно больше данных».
Рафаэль
Это интересно. Надеюсь, ты справишься с этой дополнительной работой.
Мартин Бергер
8

Конечно, как отметил Ювал Фильмус, не стоит ожидать общего решения таких проблем. Но, как это обычно бывает, решения могут быть найдены для интересных подмножеств общего случая.

Я ни в коем случае не эксперт и даже не обладаю достаточными знаниями в этой области, так как случайно узнал о какой-либо работе такого рода. Это касается автоматического анализа средней сложности, и работа была сделана Филиппом Флажо и его коллегами.

λυ´ω

Одна статья, которую я нашел в Интернете, - это статья 1990 года: автоматический анализ алгоритмов в среднем случае Филиппом Флажоле, Полом Циммерманом и Бруно Салви .

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

Теперь я боюсь, что работа Флажолета и его коллег была очень математической, и я не ожидал бы, что многое будет легко читать.

Babou
источник