Які важливі алгоритми для людства за останні десятиліття? [зачинено]


40

Які найважливіші світові алгоритми найбільше сприяли людству за останні десятиліття?

Я вважав, що це хороші загальні знання, про які може знати розробник.

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


2
Це закрито, оскільки (поки що) чотири людини вважають це "не справжнім питанням", ймовірно, тому, що ми не маємо жодної реальної ідеї, що, відокремлено, є важливим алгоритмом програмування.
Девід Торнлі

2
Це може бути поза темою, але це справжнє питання.
Джеремі

1
+1 Добре запитання. Пропоную повторно запитати це на cstheory.stackexchange.com
Олександр Левчук

1
Чому ви відповідаєте на власні запитання? Кілька разів?

2
Неправильних відповідей + необмежена кількість відповідей + однозначний коментар з проханням «один за відповідь» + автор розміщує кілька власних відповідей = випадок підручника неконструктивного питання. Я знаю, що це старе, але давайте закрийте це.
Aaronaught

Відповіді:


59

Шифрування публічного / приватного ключа є досить важливим. Інтернет-торгівля була б ніде не всюдисущою без неї.


4
+1 та додати свою відповідь, RSA.
sange

Існує ціла група алгоритмів та найкращих практик, що займаються перетворенням криптографічних кодів (наприклад, RSA) у практичні рішення.
Дональні стипендіати

37

Алгоритм Дейкстри

Алгоритм існує в кожному маршрутизаторі світу для визначення найкращого маршруту між двома вузлами в мережі.


Ти впевнений? Більшість маршрутизаторів або знають, що IP-номер належить йому, і пересилає його до машини в локальній мережі, або знає маршрутизатор, який краще знає - маршрутизатор за замовчуванням - в цьому випадку пакет переходить до цього маршрутизатора. Великі маршрутизатори можуть знати, що для діапазону IP-адреси X1-Y1 пакет повинен переходити до маршрутизатора R1, для діапазону X2-Y2 пакет повинен переходити до маршрутизатора R2 і т. Д. У цьому немає алгоритму Dijkstras.

2
@ Thorbjørn Ravn Andersen: Але щоб маршрутизатор знав цю інформацію, комусь у якийсь момент довелося б використовувати алгоритм Dijkstra. Так, він не використовується для фактичної маршрутизації кожного окремого пакету, але він використовується при визначенні таблиць маршрутизації у великих мережах. +1.
Біллі ONeal

@Billy, де саме ви б очікували, що і ким насправді використовується алгоритм Dijkstra?

@ Thorbjørn Ravn Andersen: Наскільки я розумію, вона відіграє певну роль в OSPF, що є основою вибору правильних маршрутів для малих мереж. Для з'єднань між великими мережами використовується BGP, який базується на більш політиці. Я не впевнений, чи використовує BGP алгоритм Діккстри чи ні.
Біллі ONeal

3
@Billy, але моє заперечення було: "існує у ВСІМ маршрутизаторах у світі". Це - на мою думку - явно неправильно.

30

Швидке перетворення Фур'є (FFT)

FFT є надзвичайно важливим і широко застосовуваним методом вилучення корисної інформації з вибіркових сигналів .

Швидке перетворення Фур'є (FFT) - це ефективний алгоритм для обчислення дискретного перетворення Фур'є (DFT) та його зворотного.


4
Одного разу у мене був начальник, який десятиліттями раніше написав ряд функцій FFT для PDP-11. Він продав колоду перфокарт з тими функціями з рекламою в задній частині Popular Science і зробив досить серйозний банк. Очевидно, що у нього були люди, які використовують його код для всього, починаючи від обробки сигналу до прогнозу на фондовому ринку.
Ден Рей

26

PageRank

PageRank є алгоритм аналізу посилань, названий в честь Ларрі Пейдж, який використовується Google пошуковій системі Інтернет , який присвоює чисельну зважування до кожного елементу гіперпосиланням набір документів, таких як World Wide Web, з метою «вимірювання» його щодо важливість в рамках набору.


ха-ха, наші відповіді були всього за 2 секунди, вибачте :)
Maksee

ніяких проблем взагалі! :)
Амір Резай

36
Я так і не зрозумів, що його назвали на честь Ларрі Пейджа. Я завжди вважав, що назва має щось спільне з веб-сторінками.
JohnFx

1
@JohnFx Whoa, не жартуй!
Марк C

+1: але чи можна це кваліфікувати, якщо власне алгоритм не відомий людству? (Вікіпедія IIRC - це наближення)
Стівен Еверс

22

Алгоритми стиснення даних

В інформатиці та теорії інформації стиснення даних або кодування джерела - це процес кодування інформації, використовуючи менше біт (або інших одиниць, що несуть інформацію), ніж використовувало б некодированное представлення, використовуючи конкретні схеми кодування.


2
Саме так, і я думаю, базовий алгоритм стиснення LZW можна вважати одним з найкрасивіших алгоритмів в інженерії програмного забезпечення.
моджуба

"по можливості вкажіть назву конкретного алгоритму"

14

Сміт-Уотерман (і Needleman-Wunsch)

Це може бути занадто далеко, тому будь ласка, прокоментуйте.

Сміт-Уотерман: Алгоритм вирівнювання послідовності

Я думаю, що одним із таких прикладів є алгоритми Сміта-Уотермана та Нудлемана-Вунша та їх наближення. Усі вони по суті роблять те саме: вони вирівнюють дві або більше рядків (послідовностей) . Існує значення в біології. Коли послідовності ДНК або Білка вирівнюються - виявляються області структурної, функціональної та еволюційної подібності.

БЛАСТ як нащадок Сміта-Уотермана

Евристика, яка наближає Сміта-Уотермана, - BLAST. Це дозволяє шукати послідовності великих баз даних для біологічної подібності. Популярність BLAST дійсно велика - це, швидше за все, найбільш широко використовуваний алгоритм в біології. Новіші області біоінформатики та геноміки мають новіші та кращі наближення алгоритмів Сміта-Уотермана / Нудлемана-Вунша, які точніші за BLAST.

Геномна асамблея як нащадок Сміта-Уотермана

Наближення Сміта-Уотермана та Нудлемана-Вунша, які швидше, ніж BLAST, використовуються для збирання геномів із послідовності дробовиків - де продукт секвенсорної машини являє собою величезну кількість, яку ДНК зчитує (мільярди) з довільних частин Геному, які є дуже короткі (від 50 до 100 нуклеотидів). Цей підхід був використаний для завершення проекту геному людини. Всі сучасні послідовності проводяться таким чином.

Множинна послідовність вирівнювання розширення Сміта-Уотермана

Існує безліч алгоритмів вирівнювання декількох послідовностей - вони наближаються до багатослідової версії Сміта-Уотермана / Needleman-Wunsch. Кілька послідовностей вирівнюються як група одночасно одна до одної. Це набагато важча проблема, ніж аналог попарно, але рішення дають набагато більше розуміння біологічної функції, структури та історії еволюції споріднених послідовностей.


Привіт і ласкаво просимо до програмістів! Ви можете розбити цю відповідь на одну для кожного з алгоритмів, які ви тут представляєте, як це прийнято для таких списків, щоб полегшити голосування та сортування.
Yi Jiang

@Yi Jiang: Мій пантеон! Я неправильно читаю ваш коментар як "полегшення блювоти". : - /
д-р Ганнібал Лектер

Тут я аргументую лише один алгоритм - Сміт-Уотерман (і це варіант Needleman-Wunsch)
Олександр Левчук

13

Сіам назвав наступні як найважливіші алгоритми XX століття:

1946: Алгоритм "Метрополіс" для Монте-Карло . Завдяки використанню випадкових процесів цей алгоритм пропонує ефективний спосіб наткнутися на відповіді на проблеми, які занадто складні, щоб точно вирішити.

1947: Простий метод лінійного програмування . Елегантне рішення загальної проблеми в плануванні та прийнятті рішень.

1950: Метод ітерації підпростори Крилова . Методика швидкого розв’язання лінійних рівнянь, якими є наукові обчислення.

1951: Декомпозиційний підхід до матричних обчислень . Набір методик чисельної лінійної алгебри.

1957: Оптимізаційний компілятор Fortran . Перетворює код високого рівня в ефективний для читання на комп'ютері код.

1959: алгоритм QR для обчислення власних значень . Ще одна важлива операція з матрицею зробилася швидкою і практичною.

1962: Алгоритми кварсового сортування . Для ефективної роботи з великими базами даних.

1965: Швидка трансформація Фур'є . Мабуть, найбільш повсюдний алгоритм, що використовується сьогодні, він розбиває форми хвиль (як звук) на періодичні компоненти.

1977: Виявлення відносин цілих чисел . Швидкий метод виявлення простих рівнянь, задоволених колекціями, здавалося б, неспорідненими числами.

1987: Швидкий багатополюсний метод . Прорив у вирішенні складності обчислень n-тіла, застосованих у задачах, починаючи від небесної механіки до складання білка.

Особисто я б замінив виявлення відносин цілості на PageRank .


1
До цього списку я б додав 2 книги, хоча вони були більш про "найважливіші теореми" 20 століття: П'ять золотих правил amazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/… , і Ще п’ять золотих правил. amazon.com/Five-More-Golden-Rules-20th-Century/dp/0471395285
Tangurena

Техніка Монте-Карло досі використовується, більш-менш у первісному вигляді. Це також стосується FFT та Quicksort. Більшість решти я просто не знайомий. Метод Симплекса для ЛП взагалі не відповідає масштабам порівняно з більш сучасними методами.
Девід Торнлі

9

PageRank, любите це чи ненавидите, але це щодня впливає на рішення та дії мільйонів людей у ​​всьому світі.


9

Якби мені довелося перерахувати топ-3 найважливіших алгоритмів, які сьогодні використовуються в комп'ютерах, я б сказав:

  1. Двійковий пошук
  2. Квікорт
  3. Алгоритм Дейкстри

Алгоритм бінарного пошуку використовується постійно, щоб звузити елемент у відсортованому списку, більшість пошукових записів індексу в деякий момент буде використовувати щось по цих рядках. Цей алгоритм забезпечує пошук упорядкованого списку в o (log n) час.

Алгоритму Quicksort нарешті вдалося розібратися до середнього випадку O (n log n) та гіршого випадку O (n ^ 2). Сортування - одне з найпоширеніших завдань даних на комп’ютері та одне з найдорожчих, поліпшення середнього сортування випадків було величезним кроком уперед у ефективності.

Як було сказано , алгоритм Дейкстри створює найкоротший шлях між точками в графі. Це широко використовується для всіх способів маршрутизації додатків, найбільш широко стосовно самого Інтернету, що забезпечує найшвидший шлях через заплутану павутину взаємопов'язаних маршрутизаторів.


Двійковий пошук повинен був бути дуже-дуже старим ... Я маю на увазі, він був сформульований "в минулому", і це було в "десятилітті", але це було б вже багато сотень років.
Кірк Бродхерст

@Kirk Broadhurst: Все-таки це надзвичайно важливий алгоритм для комп'ютерів. Незалежно від того, коли людина вперше задумала це.
Увімкнення

8

Теорема Байєса

Це, мабуть, найбільше сприяло тому, щоб зберегти кількість часу, що витрачає спам у моїй вхідній скрипті, на керований рівень.

Звичайно, я вважаю, що це було використано в багатьох інших вартісних програмах, але моє улюблене вбивство SPAM.


Я хотів би дати вам великий палець, але це теорема (одна з найкращих), а не алгоритм. Однак багато алгоритмів засновані на цій теоремі.
Амір Резай

Я просто намагався об'єднати їх у загальну категорію алгоритмів, але технічно ви праві.
JohnFx

@AmirR Технічно правильно, найкращий вид правильного!
Марк C

7

TimSort

Це алгоритм сортування, який зараз використовується в Python , Java 7 та Android

В основному:

  • O (N log N) найгірший випадок (не вироджується)
  • O (N) для майже відсортованого списку (насправді N-1точно у вже відсортованому списку)

А краса його? Це стабільно ! А отже, підходить для багатопасового сортування за різними критеріями.

До речі, якщо хтось має під рукою оптимізовану C ++ реалізацію ...


Це не може бути Θ (NlogN), оскільки він має кращу поведінку у вже відсортованому списку. O (NlogN) - тут правильне позначення.
стипендіати

Хоча цей приємний, я б точно не назвав це "одним із найбільших алгоритмів, винайдених за останні десятиліття". Мергесорт, на якому базується Тімсорт, - справжнє досягнення.
Біллі ONeal

6

Всі алгоритми, які використовувались для вирішення проблеми видимості в 3D-комп'ютерній анімації, мені здаються вирішальними.

Алгоритм роботи художника

Алгоритм художника, також відомий як пріоритет, є одним з найпростіших рішень проблеми наочності в 3D-комп'ютерній графіці. Проектуючи 3D-сцену на 2D площину, необхідно в якийсь момент вирішити, які багатокутники видно, а які - приховані.

Z-буферизація

У комп'ютерній графіці z-буферизація - це управління координатами глибини зображення в тривимірній (3-D) графіці, зазвичай це робиться в апаратних засобах, іноді в програмному забезпеченні. Це одне рішення проблеми видимості, це проблема вирішення, які елементи відображеної сцени видно, а які - приховані. Алгоритм художника - це ще одне поширене рішення, яке, хоча і менш ефективно, може також обробляти непрозорі елементи сцени. Z-буферизація також відома як глибинна буферизація.

Визначення прихованої поверхні

У 3D-комп'ютерній графіці визначення прихованої поверхні (також відоме як приховане видалення поверхні (HSR), відключення оклюзії (OC) або визначення видимої поверхні (VSD)) - це процес, який використовується для визначення того, які поверхні та частини поверхонь не видно з певної точки зору . Алгоритм визначення прихованої поверхні - це рішення проблеми видимості, яка була однією з перших головних проблем у сфері 3D-комп'ютерної графіки. Процес визначення прихованої поверхні іноді називають прихованим, і такий алгоритм іноді називають прихованим Аналог для візуалізації ліній - це приховане вилучення ліній. Приховане визначення поверхні необхідно для правильного відображення зображення, щоб, наприклад, не можна було дивитись крізь стіни у віртуальній реальності.


3

Що б вам не потрібно було, щоб вирішити поточну проблему.


1
Ось що я збирався сказати. Тепер я не повинен це говорити.
Роберт Харві

Що б не було гарною відповіддю. Будь-які алгоритми не суттєві для людства.
Амір Резай

6
Це не конкретний алгоритм, і навіть якщо це, мабуть, це не важливо для людства.
Ясон

3

Soundex - фонетичний алгоритм індексації імен за звуком.


Як Soundex сприяв людству?
barjak

Це покращило вміння використовувати природну мову, виправляючи незначні відмінності в написанні та регіональній вимові.
саль

3

Алгоритм Вітербі

Спочатку використовувався для розшифровки згорткових кодів, що виправляють помилки, зараз він використовується для вирішення широкого класу проблем розпізнавання (починаючи від розпізнавання мовлення до біоінформатики). Ви можете знайти його в декількох пристроях зв'язку та зберігання.


+1 Алгоритм Вітербі дуже важливий. @ [Giacomo Verticale], можливо, ви повинні згадати, що це стосунки до прихованих моделей Маркова (HMM).
Олександр Левчук

3

MP3

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

Це, безумовно, було дуже значним у "цифрову епоху".


3

Чисельна інтеграція Рунге-Кутти . Без цього багато моделювання було б неможливим. Ні космічної програми, ні ядерної енергетики, ні балістики, ні спортивних симуляцій, ні бронежилетів, ні моделювання аварійних випробувань, ні моделювання руху рідини, ні симуляції хімічної взаємодії, ні будівлі, стійкі до землетрусу ... список продовжується.


+1 @ j172 Я знаю це, він дуже корисний для чисельного аналізу та моделювання.
Амір Резай

2

Алгоритм сортування.


5
але це не конкретний алгоритм ...
Джастін Л.

Так, що сказав Джастін Л., який алгоритм сортування?
д-р Ганнібал Лектер

"Специфічний алгоритм" повинен бути об'єднаним, першим з n lg n різновидів.
Біллі ONeal

2
@dr Hannibal Lecter: Бульбашка Сортування курсу. Все інше - передчасна оптимізація.
peterchen

2

1
Гидота! Я, звичайно, сподіваюсь, що у виробничому коді люди не використовують швидкопсутний корт. Більш важливо, що злиття прийшло раніше і майже так само швидко. (Сподіваємось, більшість кодів використовує якийсь варіант на Introsort)
Біллі ONeal

2
@Billy ONeal, сортування в .NET - це все Quicksort. Отже, будь-яка програма, яка викликає List <T> .Sort (), використовує quicksort у виробництві.
Стівен Еверс

@SnOrfus: Чи є у вас підтвердження цього твердження? Наскільки я розумію, Список <t> .Sort заснований на введенні.
Біллі ONeal

3
@Billy ONeal: прямо з msdn
msdn.microsoft.com/en-us/library/b0zbh7b6.aspx

3
@ Thorbjørn: Це все ще не хороший алгоритм загального призначення. Introsort - це швидкий вибір , але він переходить на сортування купи, якщо він виходить за межі заданої глибини рекурсії. Це дозволяє мати хороші характеристики швидкості, але завжди уникає патологічних випадків, навіть якщо алгоритм вибирає погані стрибки.
Біллі ONeal

1

Сортування вставки

Легкий у здійсненні, дуже швидкий у невеликих списках і використовується у злиттях Сортування / Quicksort реалізацій для їх прискорення. Він стабільний і працює в O (n) за відсортованими списками (при сортуванні у порядку зростання).



1

Фільтр Кальмана

Він широко використовується в навігації, відстеженні цілей (практично для будь-якого датчика: радара, сонара, FLIR, ладара). В одному підручнику показано програму в контролері дисковода. Робототехнічні системи управління часто використовують фільтри Kalman.


0

Розмовна та письмова мова.

В даний час вони є одним з найбільш ефективних алгоритмів передачі знань з однієї речі в іншу. Без мови громадянське суспільство не могло б існувати, а інформацію не можна було б передати.


5
-1: Алгоритми можна виразити за допомогою природної мови, але природні мови не є алгоритмами.
Стівен Еверс

2
Ви б сказали, що алгоритми стиснення - це не алгоритми? Вся мова - це стискання інформації, яка передається від джерела до рецептора. У ньому є специфічні правила, яких слід дотримуватися (граматика), як і будь-який інший алгоритм, і він приймає вклад (ваш досвід) і дає різний результат (знання). Я не бачу, як ви не могли вважати мову алгоритмом.
Malfist

Він не дає всіх стандартних визначень алгоритму на багатьох фронтах.
Джеймс Відновити Моніку Полк

0

Структура даних купи та пов’язані з нею алгоритми побудови та обслуговування купи.

І проявіть деяку повагу до хитрості. Навіть якщо це не завжди такий вибір, це один з основних алгоритмів історичного розвитку інформатики і є чудовим засобом для розуміння рекурсії та аналізу алгоритмів. Це красиво, і так, я люблю це.


0

Алгоритми індексації, такі як B-дерево, B +-дерево, хеш-індекс, бінарний індекс дерева тощо. Для індексації величезної кількості даних.


0

MapReduce як спосіб поділу, підкорення та паралелізації обробки великих наборів даних.


-1

Алгоритм грубої сили!

Багато людей недооцінюють цей алгоритм грубої сили. Насправді він в основному використовується для вирішення проблем, що не мають шаблону. Я це дуже люблю!


5
Це не алгоритм. Це свого роду алгоритми.
Адам Лір

Це метод для порушення шифрування.
Амір Резай

Я думаю, що це також класифікується як алгоритм. "Почніть з x до y щось робити." <--- алгоритм правильно?
xport

Алгоритм - це ряд кроків для виконання конкретного завдання. Це не конкретно.
Анто

-5

Сортування бульбашок!

Сорт бульбашок не такий вже й поганий, як Богосорт . Тому я голосую за сорт Пузиря.


1
Зверніть увагу, якщо алгоритм є важливим і важливим, люди, здається, просто не згодні з приводу того, чому сортування бульбашок може бути важливим і важливим.
Тамара Війсман


@TomWij, @Joey: див. Моє оновлення.
xport
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.