Пол Эрдос говорил о «Книге», где Бог хранит самое элегантное доказательство каждой математической теоремы. Это даже вдохновило книгу (которая, я думаю, теперь в ее 4-м издании): Доказательства из Книги .
Если бы у Бога была подобная книга для алгоритмов, какой алгоритм (ы), как вы думаете, был бы кандидатом (ами)?
Если возможно, пожалуйста, предоставьте интерактивную ссылку и ключевые идеи, которые заставят ее работать.
Только один алгоритм на ответ, пожалуйста.
Ответы:
Union-find - это красивая проблема, чей лучший алгоритм / структура данных ( Disjoint Set Forest ) основан на стеке спагетти. Несмотря на то, что это очень просто и достаточно интуитивно понятно для интеллигентного ребенка, потребовалось несколько лет, чтобы жестко ограничить время его выполнения. В конечном счете, было обнаружено, что его поведение связано с обратной функцией Аккермана, функцией, открытие которой ознаменовало изменение взгляда на вычисления (и фактически было включено в книгу Гильберта « О бесконечности» ).
Википедия предоставляет хорошее введение в Disjoint Set Forests .
источник
Сопоставление строк Кнута-Морриса-Пратта . Самые красивые восемь строк кода, которые вы когда-либо увидите.
источник
Алгоритм Блюма, Флойд, Пратты, Ривест и Tarjan , чтобы найти K - й элемент несортированного списка в линейное время красивый алгоритм, и работает только потому , что номер только право , чтобы соответствовать в Генеральной теореме. Это выглядит следующим образом:
источник
Бинарный поиск - самый простой, красивый и полезный алгоритм, с которым я когда-либо сталкивался.
источник
Я удивлен, что не вижу здесь алгоритма Флойда-Варшалла для кратчайших путей всех пар:
Один из самых коротких и ясных нетривиальных алгоритмов, производительность очень быстро, если учесть, что может быть ребер. Это был бы мой плакатный ребенок для динамического программирования!O ( n 2 )O(n3) O(n2)
источник
Евклидов алгоритм для вычисления наибольшего общего делителя (GCD)
источник
Может показаться несколько тривиальным (особенно по сравнению с другими ответами), но я думаю, что Quicksort действительно элегантен. Я помню, что когда я впервые увидел это, я подумал, что это действительно сложно, но сейчас это кажется слишком простым.
источник
Кодирование Хаффмана для сжатия данных.
источник
Тест первичности Миллера-Рабина (и подобные тесты) должен быть в Книге. Идея состоит в том, чтобы воспользоваться преимуществами простых чисел (то есть, используя небольшую теорему Ферма), чтобы вероятностно искать свидетеля того, что число не является простым. Если после достаточного количества случайных проверок свидетель не найден, число классифицируется как простое число.
На этой ноте, тест на первичность AKS, который показал, что PRIMES находится в P, обязательно должен быть в Книге!
источник
Полиномиальное тестирование с использованием леммы Шварца-Циппеля :
Если кто-то разбудил вас среди ночи и попросил проверить два одномерных полиномиальных выражения на идентичность, вы, вероятно, сведете их к нормальной форме суммы продуктов и сравните для структурной идентичности. К сожалению, сокращение может занять экспоненциальное время; это аналогично приведению логических выражений к дизъюнктивной нормальной форме.
Предполагая, что вы из тех, кому нравятся рандомизированные алгоритмы, ваша следующая попытка, вероятно, будет состоять в том, чтобы оценивать полиномы в случайно выбранных точках в поиске контрпримеров, объявляя полиномы очень вероятными идентичными, если они пройдут достаточное количество тестов. Лемма Шварца-Циппеля показывает, что с ростом числа точек вероятность ложного срабатывания очень быстро уменьшается.
Не известен детерминированный алгоритм для задачи, который выполняется за полиномиальное время.
источник
Глубина Первый Поиск . Это основа многих других алгоритмов. Это также обманчиво просто: например, если вы замените очередь в реализации BFS стеком, получите ли вы DFS?
источник
Алгоритм Дейкстры : проблема кратчайшего пути из одного источника для графа с неотрицательными стоимостями ребер. Он используется везде и является одним из самых красивых алгоритмов. Интернет не может быть маршрутизирован без него - он является основной частью протоколов маршрутизации IS-IS и OSPF (Open Shortest Path First).
источник
Решето Эратосфена , простой и интуитивно понятный.
Мне также нравится красота алгоритма Хорнера .
источник
Полностью гомоморфная схема шифрования Джентри (либо над идеальными решетками, либо над целыми числами) ужасно прекрасна. Это позволяет третьей стороне выполнять произвольные вычисления на зашифрованных данных без доступа к закрытому ключу.
Схема шифрования обусловлена несколькими острыми наблюдениями.
В своей диссертации Крэйг Джентри решил давнюю (и великолепную) открытую проблему в криптографии. Тот факт, что существует полностью гомоморфная схема, требует, чтобы мы признали, что существует некоторая внутренняя структура, которая может быть проигнорирована.
http://crypto.stanford.edu/craig/craig-thesis.pdf
http://eprint.iacr.org/2009/616.pdf
http://portal.acm.org/citation.cfm?id=1666420.1666445
источник
Кули-Тьюки FFT алгоритм .
источник
Алгоритм Штрассена для умножения матриц.
источник
Gale-Шепли стабильный брак алгоритм . Этот алгоритм является жадным и очень простым, сначала не очевидно, почему он будет работать, но затем доказательство правильности снова легко понять.
источник
Алгоритм линейного времени для построения массивов суффиксов действительно прекрасен, хотя на самом деле он не получил признания, которого заслуживал http://www.cs.helsinki.fi/u/tpkarkka/publications/icalp03.pdf
источник
Гауссово исключение. Он завершает обобщение последовательности от алгоритма евклидова GCD до Кнута-Бендикса.
источник
Я был впечатлен, когда впервые увидел алгоритм отбора проб из пласта и его доказательство. Это типичная головоломка типа «головоломка для мозга» с чрезвычайно простым решением. Я думаю, что это определенно относится к книге, как для алгоритмов, так и для математических теорем.
Что касается книги, история гласит, что когда Эрдос умер и попал на небеса, он попросил встретиться с Богом. Запрос был удовлетворен, и для встречи у Эрдёша был только один вопрос. "Могу ли я посмотреть в книге?" Бог сказал да и привел Эрдёша к этому. Естественно, очень взволнованный, Эрдеш открывает книгу только для того, чтобы увидеть следующее.
Теорема 1: ...
Доказательство: Очевидное.
Теорема 2: ...
Доказательство: Очевидное.
Теорема 3: ...
Доказательство: Очевидное.
источник
Черепаха и заяц Алгоритм . Мне это нравится, потому что я уверен, что даже если бы я потратил впустую всю свою жизнь, пытаясь найти его, я никак не мог бы придумать такую идею.
источник
Пример столь же фундаментальный и «тривиальный», как и доказательство Евклида бесконечного числа простых чисел:
2-приближение для MAX-CUT - Независимо для каждой вершины, назначьте его одному из двух разделов с равной вероятностью.
источник
Я всегда был неравнодушен к алгоритму Кристофидеса, который дает (3/2) -приложение для метрики TSP. На самом деле, назовите меня легко угодить, но мне даже понравился алгоритм 2-приближения, который был до него . Уловка Кристофида по созданию остовного дерева минимального веса Эйлера путем добавления соответствия его вершин нечетной степени (вместо дублирования всех ребер) проста и изящна, и для того, чтобы убедиться, что это совпадение имеет не более половины веса, требуется немного оптимального тура.
источник
Merge Sort . Простой, элегантный, эффективный.
источник
источник
Алгоритмы линейного программирования : симплекс, эллипсоид и методы внутренних точек.
http://en.wikipedia.org/wiki/Linear_programming#Algorithms
источник
Алгоритм Робина Мозера для решения определенного класса экземпляров SAT. Такие случаи разрешимы локальной леммой Ловаша. Алгоритм Мозера действительно является нерандомизацией формулировки леммы.
Я думаю, что через несколько лет его алгоритм (и техника для его доказательства правильности) будет хорошо усвоен и усовершенствован до такой степени, что станет жизнеспособным кандидатом в Алгоритм из Книги .
Эта версия является продолжением его оригинальной статьи, написанной Габором Тардосом.
источник
Самый быстрый и короткий алгоритм Маркуса Хаттера для всех четко определенных задач .
Этот вид идет вразрез с духом других предложений в этом списке, поскольку он представляет только теоретический, а не практический интерес, но, опять же, заголовок говорит сам за себя. Возможно, его следует включить в качестве предостерегающего рассказа для тех, кто смотрит только на асимптотическое поведение алгоритма.
источник
Алгоритм Кнута X находит все решения точной проблемы покрытия . Что такого волшебного в этом - это метод, который он предложил для эффективной реализации: « Танцующие звенья» .
источник
Я думаю, что мы должны включить Schieber-Vishkin 's, который отвечает на запросы самых общих предков в постоянное время, предварительно обрабатывая лес за линейное время.
Мне нравится экспозиция Кнута в томе 4, глава 1, и его размышления . Он сказал, что ему потребовалось два целых дня, чтобы полностью понять это, и я помню его слова:
источник