Welche Algorithmen werden am häufigsten verwendet?
Bitte schreiben Sie einen Algorithmus pro Antwort und versuchen Sie, Ihre Antwort kurz zu halten (ein oder zwei Zeilen).
Welche Algorithmen werden am häufigsten verwendet?
Bitte schreiben Sie einen Algorithmus pro Antwort und versuchen Sie, Ihre Antwort kurz zu halten (ein oder zwei Zeilen).
Antworten:
Ist die schnelle Fourier-Transformation das algorithmische Problem, das von realen Computersystemen am häufigsten pro Tag gelöst wird? Es muss nah sein. Also würde ich den Cooley-Tukey-FFT-Algorithmus nominieren .
Multiplikation.
Vielleicht ist einer der ältesten nicht-ganz-trivialen Algorithmen, und ein Problem, das häufiger als FFT gelöst.
Dijkstra und Bellman-Ford kürzesten Weg Algorithmen. Im Internet sind ab 2010 mindestens 35.000 autonome Systeme (AS) aktiv. Auf jedem AS wird entweder ein Verbindungsstatus-Routing-Protokoll (Dijkstra) oder ein Entfernungsvektor-Routing-Protokoll (Bellman-Ford) ausgeführt. Die Router innerhalb eines AS aktualisieren normalerweise ihre Tabellen regelmäßig alle paar Minuten, z. B. 10.
Die Anzahl der Hinrichtungen von Dijkstra & Bellman-Ford pro Tag beträgt also mindestens 5 Millionen. Und das ist nur von den Routern.
Wir haben nicht kürzesten Weg Berechnungen von Google Maps und die Gleichen gezählt, die 10-mal so viele leicht bilanzieren soll. Eine halbe Milliarde Hinrichtungen pro Tag ist nicht weit hergeholt.
Ich denke, der am häufigsten verwendete Algorithmus ist Parity Check (oder vielleicht CRC oder eine Art fehlerkorrigierender Code), weil sie in jedem RAM-Zugriff erscheinen.
Simplex-Algorithmus - ist dies nicht immer noch konkurrenzfähig mit den besten Innenpunktmethoden? Wenn ja, muss es viel benutzt werden.
Im Allgemeinen sollten Sie sich die Kanellakis-Preisträger ansehen, um Ideen mit theoretischem und praktischem Gewicht zu erhalten.
Tiefensuche (DFS)
Es ist schwer, sich weiter verbreitete Algorithmen als jene in modernen Implementierungen von TCP vorzustellen : dh Vermeidung von Überlastungen , schnelle Neuübertragung . Das hängt jedoch davon ab, wie man bestimmt, was die Kriterien für einen Algorithmus erfüllt ...
Gaußsche Eliminierung Wird in der Praxis immer noch verwendet, oder? Wenn nicht durch das ersetzen, was am häufigsten zur Lösung linearer Systeme verwendet wird ...
SHA-1 (und Hash-Funktionen im Allgemeinen). Wahrscheinlich schlagen die meisten anderen Algorithmen in Bezug auf die Anzahl der Ausführungen.
Diese Antwort wird "am häufigsten" in Bezug auf die tatsächlichen CPU-Zyklen interpretiert.
Als ich in den 70er Jahren Computer lernte, habe ich gelesen, dass die überwiegende Mehrheit der Computerzyklen (read: mainframe) dem Sortieren gewidmet war. Geschäftsanwendungen erfordern eine umfassende Sortierung für Analyse und Berichterstellung. Ich kann mir nicht vorstellen, dass sich das sehr geändert hat, aber natürlich muss der Aufstieg anderer Apps - E-Mail, Textverarbeitung usw. - die Mischung verändert haben. Diese Sortierungen sind normalerweise stabile Sortierungen (keine Quicksort-Sortierungen), da zum Erstellen von Subsortierungen nach Feldfolgen sortiert werden muss.
Streng genommen ist der am häufigsten verwendete Algorithmus ohne Zweifel, was auch immer vom Windows-Systemwartevorgang ausgeführt wird, wenn nichts anderes läuft ;-).
Sprase-Matrix-Vektor multiplizieren
... ist das rechnerische Arbeitstier hinter der Lösung nahezu aller linearen Systeme. Infolgedessen wird es ausgeführt, wann immer
Die meisten FLOPs eines Supercomputers oder Clusters befinden sich in einem spärlichen mat-vec.
Newtons Methode. Es wird für die Berechnung von Quadratwurzeln und für die Berechnung von Divisionen verwendet. Es kann zur linearen Programmierung verwendet werden. Im Allgemeinen ist es das Arbeitspferd der (konvexen) Optimierung. Es kann verwendet werden, um Differentialgleichungen in der Physik zu lösen, indem die Aktion / Energie minimiert wird.
Hashing und rot-schwarze Bäume.
Sie sind bereits in STL (hash_map, map) implementiert, und jeder Programmierer weiß, dass ein solcher Container unglaublich praktisch ist, wenn Sie Informationen speichern möchten, die von einem beliebigen Datentyp indiziert wurden.
Fehlerkorrekturalgorithmen wie Reed-Solomon.
http://en.wikipedia.org/wiki/Error-correcting_code#List_of_error-correcting_codes http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
Ich denke, dass DP "häufiger" verwendet wird als andere Algorithmen, die bisher in der Umfrage genannt wurden. Ich schließe "öfter" in dem Sinne, wie oft ein nicht-triviales Algorithmuskonzept vom Programmierer im wirklichen Leben implementiert wurde, anstatt wie oft eine bestimmte Implementierung eines Algorithmus aufgerufen wurde.
DP ist vielseitig und hat viele Gesichter. Manchmal habe ich es etwas unbewusst benutzt und später festgestellt, dass ich DP mache.
Natürlich gibt es Dinge, die noch häufiger vorkommen als Dynamic Program, aber es handelt sich meistens um Datenstrukturen (Array, verknüpfte Liste, Hash).
String Matching, wird ständig in der Anwendungssoftware und auf Datenbankebene verwendet.
Im genauen Fall gibt es mehrere ziemlich komplizierte Algorithmen (KMP, Boyer-Moore), von denen einige eine sublineare erwartete Laufzeit erreichen. Sie sind auch aus CS-Sicht interessant zu studieren.
Noch interessanter ist wahrscheinlich die ungefähre Zeichenfolgenübereinstimmung, d. H. Die Ausrichtung. Sie wissen, „autocorrecting“ Funktionen? Auch die Suche in verrauschten String-Daten (z. B. DNA) erfolgt mithilfe von Alignments.