Які алгоритми використовуються найчастіше на практиці?


19

Які алгоритми використовуються найчастіше?

Будь ласка, напишіть один алгоритм на кожну відповідь, намагайтеся, щоб відповідь була короткою (один або два рядки).


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

1
@ Суреш: Вибач. :)
Kaveh

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

1
Питання занадто розпливчасте, як вказував Юкка Суомела. Без додаткового уточнення відповіді будуть не кращими за зміст підручника з алгоритмів.
Цуйосі Іто

1
Існує недавня книга: «Дев'ять алгоритмів, які змінили майбутнє: геніальні ідеї, які керують сучасними комп’ютерами» Джона Маккорміка. Дивіться press.princeton.edu/titles/9528.html
Алессандро Якопсон,

Відповіді:


18

Чи швидке перетворення Фур'є алгоритмічна проблема вирішується більшість разів на день реальними комп'ютерними системами? Це повинно бути близько. Тож я б призначив алгоритм Cooley-Tukey FFT .


Мені подобається це, FFT не помічається в базовій освіті з інформатики, але це , безумовно, алгоритм, який має величезний вплив на наше сучасне суспільство, і багато сучасних речей навколо нас весь час хрустять FFT.
Юкка Суомела

14

Множення.

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


Множення не є алгоритмом, це проблема з багатьма підпроблемами, вирішеними різними алгоритмами: цілим числом фіксованого розміру та плаваючою комою, що виконується апаратним чи програмним забезпеченням; bignums із змінним розміром (по модулю чи ні), матриці, ...
Жил 'SO- перестань бути злим'

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

Я думаю, що віднімання (порівняння) використовується набагато частіше, ніж множення, і я не бачу жодної причини, чому множення вважається алгоритмом, а додавання / віднімання - ні. Однак я не знаю, чи це кваліфікується як відповідь.
Tsuyoshi Ito

Так, додавання і віднімання використовуються навіть частіше, ніж множення - дійсно, довгий алгоритм множення по суті зводить множення до додавання. Однак я не знаю, чи існує єдиний алгоритм додавання / віднімання, який ми могли б висувати тут?
Jukka Suomela

@JukkaSuomela: Додавання та віднімання двох складових буде хорошим кандидатом.
Джон Гітцен

13

Алгоритми найкоротшого шляху у Dijkstra та Bellman-Ford . Є , по крайней мере 35000 автономних систем (AS) активні в Інтернеті за станом на 2010 Кожна АС працює або протокол стану каналу (Дейкстра) або вектора відстані маршрутизації протоколу (Беллмана-Форда). Маршрутизатори в межах одного AS зазвичай оновлюють свої таблиці періодично кожні кілька хвилин, скажімо, 10.

Таким чином, кількість страт Dijkstra & Bellman-Ford на день становить щонайменше 5 мільйонів. І це лише від роутерів.

Ми не підраховували найкоротші обчислення шляху з Карт Google і подібні, які мають легко нараховувати в 10 разів більше. Півмільярда страт на день не надумано.


Півмільярда страт на день може здатися багато, але майте на увазі, що у нас є, наприклад, мільярди мобільних телефонів на цій планеті. Що ці справи роблять постійно? Або що вони роблять під час кожного телефонного дзвінка? Я не знаю, але я гадаю, що вони принаймні роблять набагато більше FFT, ніж найкоротші шляхи.
Юкка Суомела

8

14
До речі, чи справді так буває, що quicksort - алгоритм сортування, який найчастіше використовується в реальному світі? Я швидко ознайомився з реалізацією функції "сортування" загального призначення в деяких часто використовуваних мовах програмування. Perl: здається, нещодавно перейшов з швидкості в злиття. Python: використовує Timsort (гібрид сортировки з приєднанням / вставкою). Ява: раніше була об'єднаною, нині - Тимсорт. Бази даних, як правило, використовують зовнішнє сортування. Хіба що кікспорт вже є зникаючим видом?
Юкка Суомела

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

@Juan, хоча пункт, який згадував Юкка, є правильним, я не бачу причин редагувати відповідь.
Каве


7

Я думаю, що найбільш використовуваний алгоритм - це перевірка парності (або, можливо, CRC або якийсь код виправлення помилок), оскільки вони з'являються у кожному доступі до оперативної пам'яті.


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


4

k

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


дякую за посилання, це виглядає дуже цікаво. Частково мотивуючи це питання, було знайти приємну привабливу алгоритмічну назву для сайту. :)
Kaveh

4

Регулярна відповідність виразів шляхом перетворення на кінцеві автомати - я вважаю, що функція grep уздовж цих ліній.



3

Важко придумати більш широко використовувані алгоритми, ніж ті, які використовуються в сучасних реалізаціях TCP : тобто уникнення перевантажень , швидка повторна передача . Хоча це залежить від того, як визначати, що відповідає критеріям алгоритму ...


Але чи можна реально використовувати алгоритми TCP частіше, ніж FFT (що вже є в цьому списку)? Якщо мій комп'ютер надсилає один IP-пакет (TCP чи ні), це не викликає, як правило, цілу купу обчислень FFT? Зазвичай пакети передаються в якийсь момент за допомогою таких технологій, як WLAN, ADSL та GSM, і я думаю, що більшість із них використовують модуляції, що сильно залежать від FFT.
Jukka Suomela

Я думаю, ти маєш рацію.
Лев Рейзін


2

SHA-1 (і взагалі хеш-функції). Можливо, обіграв більшість інших алгоритмів за кількістю страт.


2

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


2

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


1

Ця відповідь трактується "найчастіше" з точки зору фактичних циклів процесора.

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

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


1

Розмножуємо вектор матриці множин

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

  • Вчені / інженери вирішують диференціальні рівняння
  • Статистики знаходять нові кореляції (PCA)
  • Google виконує сторінкуrank
  • Ваш телефон передбачить ваше місцезнаходження з GPS, акселерометрів, стільникових веж
  • Ваш автомобіль регулює підвіску під час руху
  • тощо.

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


1

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


1

Хай і червоно-чорні дерева.

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



0

Динамічне програмування .

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

DP універсальний і має безліч граней. Іноді я використовував це дещо підсвідомо, а згодом зрозумів, що роблю ДП.

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


7
Це трохи відрізняється від інших пропозицій, оскільки це парадигма проектування алгоритму (схожа на жадібну або первинно-подвійну), а не просто один алгоритм.
Jukka Suomela

0

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

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

Орієнтовна відповідність рядків, тобто вирівнювання, напевно, ще цікавіша. Ви знаєте "функції автокоригування"? Також пошук в галасливих рядкових даних (наприклад, ДНК) проводиться за допомогою вирівнювання.

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