Jakie algorytmy są najczęściej stosowane w praktyce?


19

Które algorytmy są najczęściej używane?

Napisz jeden algorytm na odpowiedź, staraj się, aby twoja odpowiedź była krótka (jedna lub dwie linie).


Kaveh, może powinieneś poczekać na odpowiedzi, zanim dostarczysz tak wiele? :)
Suresh Venkat

1
@Suresh: Przepraszamy. :)
Kaveh

3
Najczęściej w jakim sensie? (Liczba różnych programów komputerowych, które implementują algorytm? Liczba zainstalowanych programów korzystających z algorytmu? Liczba wykonań algorytmu? Ilość danych przetwarzanych przy użyciu algorytmu? Sekundy procesora używane przez algorytm?) Gdzie? (Środowisko akademickie, przemysł, komputery domowe?) Czy można kiedykolwiek oszacować coś takiego; czy możemy kiedykolwiek dysponować danymi na poparcie którejkolwiek z odpowiedzi?
Jukka Suomela,

1
Pytanie jest zbyt niejasne, jak wskazała Jukka Suomela. Bez dalszego wyjaśnienia odpowiedzi nie będą lepsze niż spis treści podręcznika na temat algorytmów.
Tsuyoshi Ito,

1
Jest jedna książka: „Dziewięć algorytmów, które zmieniły przyszłość: genialne pomysły napędzające dzisiejsze komputery” autorstwa Johna MacCormicka. Zobacz press.princeton.edu/titles/9528.html
Alessandro Jacopson

Odpowiedzi:


18

Czy szybka transformata Fouriera rozwiązuje problem algorytmiczny większość razy dziennie przez prawdziwe systemy komputerowe? To musi być blisko. Nominowałbym więc algorytm FFT Cooleya-Tukeya .


Podoba mi się to, FFT jest pomijane w podstawowej edukacji informatycznej, ale z pewnością jest to algorytm o ogromnym wpływie na nasze współczesne społeczeństwo, a wiele współczesnych rzeczy wokół nas kręci FFT przez cały czas.
Jukka Suomela,

14

Mnożenie.

Być może jeden z najstarszych nie całkiem trywialnych algorytmów i problem, który jest rozwiązywany częściej niż FFT.


Mnożenie nie jest algorytmem, jest to problem z wieloma podproblemami rozwiązanymi przez różne algorytmy: liczba całkowita i liczba zmiennoprzecinkowa o stałym rozmiarze, wykonywane przez sprzęt lub oprogramowanie; bignum o zmiennej wielkości (modulo lub nie), matryce, ...
Gilles 'SO- przestań być zły'

Miałem na myśli sprzętowe obwody mnożące we współczesnych procesorach (dla liczb całkowitych i liczb zmiennoprzecinkowych; te dwa nie są tak różne na końcu). Rozumiem, że są to „tylko” bardzo sprytnie zaprojektowane wersje tego samego podstawowego podejścia - algorytmu „długiego mnożenia”, który był znany już w średniowieczu.
Jukka Suomela,

Myślę, że odejmowanie (porównanie) jest używane znacznie częściej niż mnożenie, i nie widzę żadnego powodu, dla którego mnożenie liczy się jako algorytm, a dodawanie / odejmowanie nie. Nie wiem jednak, czy kwalifikuje się to jako odpowiedź.
Tsuyoshi Ito

Tak, dodawanie i odejmowanie jest używane nawet częściej niż mnożenie - w rzeczywistości algorytm długiego mnożenia zasadniczo zmniejsza mnożenie do dodania. Nie wiem jednak, czy istnieje jeden algorytm dodawania / odejmowania, który moglibyśmy tutaj wyznaczyć?
Jukka Suomela,

@JukkaSuomela: Dodawanie i odejmowanie dwóch uzupełnień byłoby dobrym kandydatem.
John Gietzen

13

Algorytmy najkrótszej ścieżki Dijkstry i Bellmana-Forda . W 2010 r. W Internecie jest aktywnych co najmniej 35 000 systemów autonomicznych (AS). Każdy AS obsługuje protokół routingu według stanu łącza (Dijkstra) lub protokół routingu w oparciu o wektor odległości (Bellman-Ford). Routery w ramach jednego systemu AS zazwyczaj aktualizują tabele co kilka minut, powiedzmy 10.

Tak więc liczba egzekucji Dijkstra i Bellman-Ford dziennie wynosi co najmniej 5 milionów. I to tylko z routerów.

Nie policzyliśmy obliczeń najkrótszej ścieżki z Map Google i polubień, które powinny z łatwością stanowić 10 razy więcej. Pół miliarda egzekucji dziennie nie jest daleko idące.


Pół miliarda egzekucji dziennie może wydawać się dużo, ale pamiętajmy, że mamy na przykład miliardy telefonów komórkowych na tej planecie. Co te rzeczy robią cały czas? Lub co robią podczas każdego połączenia telefonicznego? Nie wiem, ale domyślam się, że przynajmniej robią dużo więcej FFT niż najkrótsze ścieżki.
Jukka Suomela,

8

14
Nawiasem mówiąc, czy tak naprawdę jest tak, że Quicksort jest algorytmem sortowania, który jest najczęściej używany w prawdziwym świecie? Rzuciłem okiem na implementację funkcji „sortowania” ogólnego przeznaczenia w niektórych powszechnie używanych językach programowania. Wygląda na to, że Perl: ostatnio przeszedł z Quicksort na Combesort. Python: używa Timsort (hybryda sortowania scalania / wstawiania). Java: kiedyś był połączeniem, obecnie Timsort. Bazy danych zwykle używają sortowania zewnętrznego. Czy Quicksort jest już gatunkiem zagrożonym?
Jukka Suomela,

Myślę, że to bardzo dobra uwaga. Byłoby wspaniale, gdyby ktoś mógł edytować odpowiedź.
Juan Bermejo Vega

@Juan, chociaż punkt, o którym wspomniał Jukka, jest poprawny, nie widzę powodu, by edytować odpowiedź.
Kaveh


7

Myślę, że najczęściej stosowanym algorytmem jest kontrola parzystości (a może CRC lub jakiś kod korygujący błędy), ponieważ pojawiają się one przy każdym dostępie do pamięci RAM.


Używany również co najmniej raz dla każdego pakietu wysyłanego przez dowolną sieć opartą na protokole IP
Claus Broch,


4

k

Mówiąc bardziej ogólnie, należy spojrzeć na laureatów nagrody Kanellakis na pomysły, które mają teoretyczną i praktyczną wagę.


dziękuję za link, wygląda bardzo interesująco. Częściową motywacją pytania było znalezienie ładnej, chwytliwej nazwy algorytmu dla witryny. :)
Kaveh

4

Dopasowywanie wyrażeń regularnych przez konwersję do automatów skończonych - wierzę, że grep działa zgodnie z tymi liniami.



3

Trudno wymyślić bardziej powszechnie stosowane algorytmy niż te we współczesnych implementacjach TCP : tj. Unikanie zatorów , szybka retransmisja . Zależy to jednak od tego, jak określa się, co spełnia kryteria algorytmu ...


Ale czy naprawdę możesz używać algorytmów TCP częściej niż FFT (który jest już na tej liście)? Jeśli mój komputer wysyła pojedynczy pakiet IP (TCP lub nie), czy zwykle nie uruchamia to całego zestawu obliczeń FFT? Zwykle pakiety są przesyłane w pewnym momencie przy użyciu technologii takich jak WLAN, ADSL i GSM, i myślę, że większość z nich korzysta z modulacji opartych w dużej mierze na FFT.
Jukka Suomela

Myślę, że masz rację.
Lew Reyzin


2

SHA-1 (i ogólnie funkcje skrótu). Prawdopodobnie pokonał większość innych algorytmów pod względem liczby wykonań.


2

Algorytmy związane z drzewem B + są używane do tworzenia baz danych


2

Algorytmy szeregowania. Są używane przez każde urządzenie użytkownika i serwer na całym świecie. Używa się wielu odmian, znalazłem wiele odniesień do „kolejki wielopoziomowej informacji zwrotnej”


1

Ta odpowiedź interpretuje „najczęściej” w kategoriach faktycznych cykli procesora.

Kiedy uczyłem się informatyki w latach 70., przypominam sobie, że zdecydowana większość cykli komputerowych (czytaj: mainframe) była poświęcona sortowaniu. Aplikacje biznesowe wymagają obszernego sortowania do analiz i raportów. Nie sądzę, że to się bardzo zmieniło, ale oczywiście pojawienie się innych aplikacji - e-mail, edytor tekstów itp. - musiało zmienić ten miks. Te rodzaje są zwykle stabilnymi rodzajami (nie Quicksort) ze względu na konieczność sortowania według kolejnych pól w celu utworzenia podsortów.

Ściśle mówiąc, najczęściej stosowanym algorytmem jest bez wątpienia to, co wykonuje proces oczekiwania systemu Windows, gdy nic innego się nie dzieje ;-).


1

Sprase Matrix Vector Multiply

... jest obliczeniowym koniem roboczym stojącym za rozwiązaniem prawie wszystkich systemów liniowych. W rezultacie jest uruchamiany za każdym razem

  • Naukowcy / inżynierowie rozwiązują równania różniczkowe
  • Statystycy znajdują nowe korelacje (PCA)
  • Google uruchamia PageRank
  • Twój telefon przewiduje Twoją lokalizację na podstawie GPS, akcelerometrów, lokalizacji wieży komórkowej
  • Twój samochód dostosowuje zawieszenie do ruchu
  • itp....

Większość FLOP-ów na dowolnym superkomputerze lub klastrze jest wydawana wewnątrz rzadkiego mat-vec.


1

Metoda Newtona. Służy do obliczania pierwiastków kwadratowych, do obliczania podziału. Może być używany do programowania liniowego. Mówiąc bardziej ogólnie, jest to koń roboczy optymalizacji (wypukłej). Może być stosowany do rozwiązywania równań różniczkowych w fizyce poprzez minimalizację akcji / energii.


1

Skośne i czerwono-czarne drzewa.

Są już zaimplementowane w STL (hash_map, map), a każdy programista wie, że taki kontener jest niezwykle wygodny, gdy chcesz przechowywać pewne informacje indeksowane według dowolnego typu danych.



0

Programowanie dynamiczne .

Myślę, że DP jest używany „częściej” niż inne algorytmy cytowane do tej pory w ankiecie. Wnioskuję „częściej” w tym sensie, jak często implementowano nietrywialną koncepcję algorytmu programiści w rzeczywistości, a nie jak często wywoływana jest konkretna implementacja algorytmu.

DP jest wszechstronny i ma wiele twarzy. Czasami używałem go nieco podświadomie, a potem uświadomiłem sobie, że robię DP.

Oczywiście są rzeczy, które są jeszcze bardziej powszechne niż Program Dynamiczny, ale są to głównie struktura danych (tablica, lista połączona, skrót).


7
Różni się to nieco od innych sugestii, ponieważ jest paradygmatem projektowania algorytmów (podobnym do chciwego lub pierwotnie podwójnego), a nie tylko pojedynczym algorytmem.
Jukka Suomela,

0

Ciągłe dopasowanie, używane przez cały czas w oprogramowaniu aplikacyjnym i na poziomie bazy danych.

W tym konkretnym przypadku istnieje kilka dość zaangażowanych algorytmów (KMP, Boyer-Moore), z których niektóre osiągają sublinearny oczekiwany czas działania. Są również interesujące do studiowania z punktu widzenia CS.

Przybliżone dopasowanie ciągów, czyli wyrównanie, jest prawdopodobnie jeszcze bardziej interesujące. Znasz funkcje „autokorekty”? Ponadto wyszukiwanie hałaśliwych danych łańcuchowych (np. DNA) odbywa się za pomocą dopasowań.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.