Какие алгоритмы чаще всего используются на практике?


19

Какие алгоритмы используются чаще всего?

Пожалуйста, напишите один алгоритм для каждого ответа, постарайтесь, чтобы ваш ответ был коротким (одна или две строки).


Каве, может, тебе стоит подождать ответов, прежде чем поставлять так много? :)
Суреш Венкат

1
@ Суреш: Извините. :)
Каве

3
Чаще всего в каком смысле? (Количество различных компьютерных программ, которые реализуют алгоритм? Количество установленных программ, которые используют алгоритм? Количество выполнений алгоритма? Количество данных, обработанных с использованием алгоритма? Процессорные секунды, используемые алгоритмом?) Где? (Академия, промышленность, домашние ПК?) Можно ли когда-нибудь оценить что-то подобное; мы можем когда-нибудь иметь какие-либо данные, чтобы поддержать любой из ответов?
Юкка Суомела

1
Вопрос слишком расплывчат, как указал Юкка Суомела. Без дальнейшего уточнения ответы будут не лучше содержания учебника по алгоритмам.
Цуёси Ито

1
Недавно появилась книга Джона Маккормика «Девять алгоритмов, которые изменили будущее: гениальные идеи, управляющие современными компьютерами». См. Press.princeton.edu/titles/9528.html
Алессандро Якопсон,

Ответы:


18

Является ли быстрое преобразование Фурье алгоритмической задачей, решаемой большинством раз в день с помощью реальных компьютерных систем? Это должно быть близко. Поэтому я бы назначил алгоритм БПФ Кули-Тьюки .


Мне нравится это, FFT упускается из виду в базовом компьютерном образовании, но это , безусловно, алгоритм, имеющий огромное влияние на наше современное общество, и многие современные вещи вокруг нас постоянно ломают FFT.
Юкка Суомела

14

Умножение.

Возможно, один из старейших не совсем тривиальных алгоритмов, и проблема, которая решается чаще, чем FFT.


Умножение - это не алгоритм, это проблема многих подзадач, решаемых разными алгоритмами: целочисленного фиксированного размера и числа с плавающей запятой, выполняемых аппаратным или программным обеспечением; bignums переменного размера (по модулю или нет), матрицы, ...
Жиль "ТАК - перестать быть злым"

Я имел в виду схемы умножения аппаратных средств в современных процессорах (для целых чисел и чисел с плавающей запятой; в конце концов, они не так уж отличаются). Насколько я понимаю, они, как правило, являются «просто» очень хитроумными версиями одного и того же базового подхода - алгоритма «длинного умножения», который уже был известен в средние века.
Юкка Суомела

Я думаю, что вычитание (сравнение) используется гораздо чаще, чем умножение, и я не вижу никакой причины, по которой умножение считается алгоритмом, а сложение / вычитание - нет. Однако я не знаю, квалифицируется ли это как ответ.
Цуёси Ито

Да, сложение и вычитание используются даже чаще, чем умножение - действительно, алгоритм длительного умножения существенно уменьшает умножение до сложения. Тем не менее, я не знаю, есть ли один алгоритм сложения / вычитания, который мы могли бы назначить здесь?
Юкка Суомела

@JukkaSuomela: хорошее дополнение и вычитание двух дополнений было бы хорошим кандидатом.
Джон Гитцен

13

Алгоритмы кратчайшего пути Дейкстры и Беллмана-Форда . По состоянию на 2010 год в Интернете было активно не менее 35 000 автономных систем (AS). Каждая AS работает либо по протоколу маршрутизации на уровне канала (Dijkstra), либо по протоколу маршрутизации с вектором расстояния (Bellman-Ford). Маршрутизаторы в одной AS обычно обновляют свои таблицы каждые несколько минут, скажем, 10.

Таким образом, число казней Dijkstra & Bellman-Ford в день составляет не менее 5 миллионов. И это только от роутеров.

Мы не посчитали вычисления кратчайшего пути из Google Maps и лайков, которые должны легко составлять в 10 раз больше. Полмиллиарда казней в день - не надумано.


Полмиллиарда казней в день может показаться много, но давайте иметь в виду, что у нас есть, например, миллиарды мобильных телефонов на этой планете. Что эти вещи делают все время? Или что они делают во время каждого телефонного звонка? Я не знаю, но я предполагаю, что они, по крайней мере, делают намного больше БПФ, чем кратчайшие пути.
Юкка Суомела

8

14
Кстати, действительно ли это так, что быстрая сортировка - это алгоритм сортировки, который чаще всего используется в реальном мире? Я быстро взглянул на реализацию универсальной функции сортировки в некоторых обычно используемых языках программирования. Perl: похоже, недавно переключился с быстрой сортировки на сортировку слиянием. Python: использует Timsort (гибрид сортировки слиянием / вставкой). Java: раньше был mergesort, в настоящее время Timsort. Базы данных, как правило, используют внешнюю сортировку. Быстрая сортировка уже вымирающий вид?
Юкка Суомела

Я думаю, что это очень хороший момент. Было бы здорово, если бы кто-то мог отредактировать ответ.
Хуан Бермехо Вега

@Juan, хотя упомянутый Юккой пункт верен, я не вижу смысла редактировать ответ.
Каве


7

Я думаю, что наиболее используемый алгоритм - это проверка четности (или, может быть, CRC или какой-то код с исправлением ошибок), потому что они появляются при каждом доступе к ОЗУ.


Также используется, по крайней мере, один раз для каждого пакета, отправляемого по любой IP-сети
Claus Broch


4

К

В более общем плане, вы должны взглянуть на лауреатов премии Канеллакиса за идеи, которые имеют теоретическую и практическую значимость.


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

4

Сопоставление регулярных выражений путем преобразования в конечные автоматы - я полагаю, что grep работает в этом направлении.



3

Трудно придумать более широко используемые алгоритмы, чем в современных реализациях TCP : то есть предотвращение перегрузок , быстрая повторная передача . Хотя это зависит от того, как определить, что соответствует критериям для алгоритма ...


Но можете ли вы действительно использовать алгоритмы TCP чаще, чем FFT (который уже есть в этом списке)? Если мой компьютер отправляет один IP-пакет (TCP или нет), разве он обычно не запускает целую кучу вычислений FFT? Обычно пакеты передаются в какой-то момент с использованием таких технологий, как WLAN, ADSL и GSM, и я думаю, что большинство из них используют модуляции, которые в значительной степени зависят от FFT.
Юкка Суомела

Я думаю ты прав.
Лев Рейзин


2

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


2

Алгоритмы, связанные с деревом B +, используются для баз данных


2

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


1

Этот ответ интерпретирует «наиболее часто» в терминах фактических циклов ЦП.

Когда я изучал вычисления в 70-х, я вспомнил, что читал, что подавляющее большинство компьютерных циклов (читай: мэйнфреймы) были посвящены сортировке. Бизнес-приложения требуют обширной сортировки для анализа и отчетности. Я не думаю, что это сильно изменилось, но, конечно, рост других приложений - электронная почта, обработка текстов и т. Д. - должен был изменить смесь. Эти сортировки обычно являются стабильными (не быстрой сортировкой) из-за необходимости сортировки последовательностей полей для создания подсортов.

Строго говоря, однако, наиболее часто используемый алгоритм - это, без сомнения, все, что выполняется системным процессом ожидания Windows, когда больше ничего не происходит ;-).


1

Матрица векторов Sprase умножается

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

  • Ученые / инженеры решают дифференциальные уравнения
  • Статистики находят новые корреляции (СПС)
  • Google запускает PageRank
  • Ваш телефон предсказывает ваше местоположение по GPS, акселерометрам, местоположениям вышек сотовой связи
  • Ваш автомобиль регулирует вашу подвеску в движении
  • и т.д....

Большая часть FLOP на любом суперкомпьютере или кластере проводится внутри разреженного mat-vec.


1

Метод Ньютона. Он используется для вычисления квадратных корней, для вычислительного деления. Это может быть использовано для линейного программирования. В более общем смысле это рабочая лошадка (выпуклой) оптимизации. Он может быть использован для решения дифференциальных уравнений в физике путем минимизации действия / энергии.


1

Хеширование и красно-черные деревья.

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



0

Динамическое программирование .

Я думаю, что DP используется «чаще», чем другие алгоритмы, приведенные в обзоре. Я делаю вывод «чаще» в том смысле, как часто в реальной жизни программист реализовывал концепцию нетривиального алгоритма , а не сколько раз вызывалась конкретная реализация алгоритма.

DP универсален и многолик. Иногда я использовал это несколько подсознательно, а потом понял, что я делаю DP.

Конечно, есть вещи, которые даже более распространены, чем Dynamic Program, но в основном это структура данных (массив, связанный список, хэш).


7
Это немного отличается от других предложений, поскольку это парадигма разработки алгоритма (похожая на жадный или primal-dual), а не просто один алгоритм.
Юкка Суомела

0

String Matching, все время используется в прикладном программном обеспечении и на уровне базы данных.

В точном случае, есть несколько довольно сложных алгоритмов (KMP, Boyer-Moore), некоторые из которых достигают сублинейного ожидаемого времени выполнения. Их также интересно изучать с точки зрения CS.

Приближенное сопоставление строк, то есть выравнивания, возможно, еще более интересно. Вы знаете особенности "автозамены"? Кроме того, поиск в зашумленных строковых данных (например, ДНК) выполняется с использованием выравниваний.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.