Eingesetzte Kernalgorithmen


307

Um die Bedeutung von Algorithmen zu demonstrieren (z. B. für Studierende und Professoren, die keine theoretischen Kenntnisse besitzen oder aus ganz anderen Bereichen stammen), ist es manchmal hilfreich, eine Liste von Beispielen zur Hand zu haben, in denen Kernalgorithmen in kommerziellen, staatlichen, oder weit verbreitete Software / Hardware.

Ich suche solche Beispiele, die folgende Kriterien erfüllen:

  1. Die Software / Hardware, die den Algorithmus verwendet, sollte derzeit weit verbreitet sein.

  2. Das Beispiel sollte spezifisch sein. Bitte geben Sie einen Hinweis auf ein bestimmtes System und einen bestimmten Algorithmus.
    Beispielsweise ist in "Algorithmus X ist nützlich für die Bildverarbeitung" der Begriff "Bildverarbeitung" nicht spezifisch genug; In "Google-Suche verwendet Grafikalgorithmen" ist der Begriff "Grafikalgorithmen" nicht spezifisch genug.

  3. Der Algorithmus sollte in der Regel im Grundstudium oder im Doktorat unterrichtet werden. Klassen in Algorithmen oder Datenstrukturen. Im Idealfall wird der Algorithmus in typischen Lehrbüchern für Algorithmen behandelt. ZB "Das bekannte System X verwendet den wenig bekannten Algorithmus Y" ist nicht gut.


Aktualisieren:

Nochmals vielen Dank für die tollen Antworten und Links! Einige Leute bemerken, dass es schwierig ist, die Kriterien zu erfüllen, da Kernalgorithmen so verbreitet sind, dass es schwierig ist, auf eine bestimmte Verwendung hinzuweisen. Ich sehe die Schwierigkeit. Aber ich denke, es lohnt sich, konkrete Beispiele zu nennen, denn meiner Erfahrung nach sagen die Leute: "Sehen Sie, Algorithmen sind wichtig, weil sie so gut wie überall sind !" funktioniert nicht.


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Bjørn Kjos-Hanssen

Antworten:


473

Algorithmen, die der Haupttreiber hinter einem System sind, sind meiner Meinung nach in Kursen ohne Algorithmus leichter zu finden, aus dem gleichen Grund, warum Sätze mit sofortiger Anwendung in Kursen für angewandte Mathematik leichter zu finden sind als in Kursen für reine Mathematik. Es ist selten, dass ein praktisches Problem die genaue Struktur des abstrakten Problems in einer Vorlesung hat. Um argumentativ zu sein, sehe ich keinen Grund, warum modisches Algorithmus-Kursmaterial wie die Strassen-Multiplikation, der AKS-Primalitätstest oder der Moser-Tardos-Algorithmus für praktische Probleme bei der Implementierung einer Videodatenbank, eines optimierenden Compilers oder eines Betriebssystems relevant sind ein Netzüberlastungskontrollsystem oder ein beliebiges anderes System. Der Wert dieser Kurse besteht darin, zu lernen, dass es komplizierte Möglichkeiten gibt, die Struktur eines Problems zu nutzen, um effiziente Lösungen zu finden. Bei fortgeschrittenen Algorithmen trifft man auch auf einfache Algorithmen, deren Analyse nicht trivial ist. Aus diesem Grund würde ich einfache randomisierte Algorithmen oder PageRank nicht verwerfen.

Ich denke, Sie können jedes große Stück Software auswählen und darin implementierte grundlegende und erweiterte Algorithmen finden. Als Fallstudie habe ich dies für den Linux-Kernel getan und einige Beispiele aus Chromium gezeigt.

Grundlegende Datenstrukturen und Algorithmen im Linux-Kernel

Links führen zum Quellcode von Github .

  1. Verknüpfte Liste , doppelt verknüpfte Liste , gesperrte verknüpfte Liste .
  2. B + Bäume mit Kommentaren, die Ihnen mitteilen, was Sie in den Lehrbüchern nicht finden können.

    Eine relativ einfache B + Tree-Implementierung. Ich habe es als Lernübung geschrieben, um zu verstehen, wie B + Trees funktionieren. Hat sich auch als nützlich erwiesen.

    ...

    Es wurden Tricks verwendet, die in Lehrbüchern nicht häufig vorkommen. Die niedrigsten Werte stehen rechts und nicht links. Alle verwendeten Steckplätze innerhalb eines Knotens befinden sich auf der linken Seite, alle nicht verwendeten Steckplätze enthalten NUL-Werte. Die meisten Operationen durchlaufen einfach alle Slots einmal und enden beim ersten NUL.

  3. Prioritätssortierte Listen für Mutexe , Treiber usw.

  4. Rot-Schwarz-Bäume werden zur Planung, Verwaltung des virtuellen Speichers, zum Verfolgen von Dateideskriptoren und Verzeichniseinträgen usw. Verwendet .
  5. Intervallbäume
  6. Radix-Bäume werden für die Speicherverwaltung , NFS-bezogene Suchvorgänge und Netzwerkfunktionen verwendet.

    Eine gebräuchliche Verwendung des Radix-Baums ist das Speichern von Zeigern auf Strukturseiten.

  7. Prioritätsheap , wörtlich übersetzt eine Lehrbuchimplementierung, die im Kontrollgruppensystem verwendet wird .

    Einfacher statischer Prioritäts-Heap mit nur Einfügung, der Zeiger enthält, basierend auf CLR, Kapitel 7

  8. Hash-Funktionen , mit einem Verweis auf Knuth und auf ein Papier.

    Knuth empfiehlt Primzahlen im ungefähr goldenen Verhältnis zur maximalen Ganzzahl, die durch ein Maschinenwort für multiplikatives Hashing dargestellt werden kann. Chuck Lever überprüfte die Wirksamkeit dieser Technik:

    http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf

    Diese Primzahlen sind bitweise gewählt, dh Operationen auf ihnen können bei Maschinen mit langsamen Multiplikationen Verschiebungen und Additionen anstelle von Multiplikationen verwenden.

  9. Einige Teile des Codes, wie dieser Treiber , implementieren ihre eigene Hash-Funktion.

    Hash-Funktion unter Verwendung eines rotierenden Hash-Algorithmus

    Knuth, D. Die Kunst der Computerprogrammierung, Band 3: Sortieren und Suchen, Kapitel 6.4. Addison Wesley, 1973

  10. Hash-Tabellen zur Implementierung von Inodes , Integritätsprüfungen des Dateisystems usw.
  11. Bit-Arrays , die für den Umgang mit Flags, Interrupts usw. verwendet werden und in Knuth Vol. 3, No. 4.

  12. Semaphoren und Spin-Locks

  13. Die binäre Suche wird für die Interrupt-Behandlung , die Cache-Suche usw. verwendet.

  14. Binäre Suche mit B-Bäumen

  15. Tiefe erste Suche und Variante in der Verzeichniskonfiguration verwendet .

    Führt einen modifizierten Tiefenrundgang des Namespace-Baums durch, der an dem von start_handle angegebenen Knoten beginnt (und endet). Die Rückruffunktion wird immer dann aufgerufen, wenn ein Knoten gefunden wird, der mit dem Typparameter übereinstimmt. Wenn die Rückruffunktion einen Wert ungleich Null zurückgibt, wird die Suche sofort abgebrochen und dieser Wert an den Anrufer zurückgegeben.

  16. Mit der Breitensuche wird die Richtigkeit der Sperre zur Laufzeit überprüft.

  17. Die Sortierung nach verknüpften Listen wird für die Speicherbereinigung , die Dateisystemverwaltung usw. verwendet.

  18. Bubble-Sortierung ist auch in einer Treiberbibliothek erstaunlich implementiert.

  19. Knuth-Morris-Pratt-String-Matching ,

    Implementiert einen zeitlinearen String-Matching-Algorithmus nach Knuth, Morris und Pratt [1]. Ihr Algorithmus vermeidet die explizite Berechnung der Übergangsfunktion DELTA insgesamt. Seine Übereinstimmungszeit ist O (n), wobei n die Länge (Text) ist, wobei nur eine Hilfsfunktion PI [1..m] verwendet wird, wobei m die Länge (Muster) ist, die aus dem Muster in der Zeit O (m) vorberechnet wurde. Mit dem Array PI kann die Übergangsfunktion DELTA bei Bedarf effizient "on the fly" berechnet werden. Grob gesagt enthält der Wert PI ["q"] für jeden Zustand "q" = 0,1, ..., m und jedes Zeichen "a" in SIGMA die Information, die von "a" unabhängig ist und dazu benötigt wird Berechne DELTA ("q", "a") 2. Da das Array PI nur m Einträge hat, während DELTA O (m | SIGMA |) Einträge hat, sparen wir einen Faktor von | SIGMA | in der Vorverarbeitungszeit durch Berechnung von PI anstelle von DELTA.

    [1] Cormen, Leiserson, Rivest, Stein Einführung in Algorithmen, 2. Auflage, MIT Press

    [2] Siehe endliche Automatisierungstheorie

  20. Boyer-Moore-Musterabstimmung mit Referenzen und Empfehlungen, wann die Alternative zu bevorzugen ist.

    Implementiert den Boyer-Moore-String-Matching-Algorithmus:

    [1] Ein schneller String-Suchalgorithmus, RS Boyer und Moore. Mitteilungen der Association for Computing Machinery, 20 (10), 1977, S. 762-772. http://www.cs.utexas.edu/users/moore/publications/fstrpos.pdf

    [2] Handbuch der exakten String-Matching-Algorithmen, Thierry Lecroq, 2004 http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf

    Hinweis: Da Boyer-Moore (BM) von rechts nach links nach Übereinstimmungen sucht, ist es dennoch möglich, dass eine Übereinstimmung über mehrere Blöcke verteilt wird. In diesem Fall findet dieser Algorithmus keine Übereinstimmung.

    Wenn Sie sicherstellen möchten, dass so etwas nie passiert, verwenden Sie stattdessen die Knuth-Pratt-Morris (KMP) -Implementierung. Wählen Sie abschließend den richtigen Suchalgorithmus für Zeichenfolgen, der von Ihrer Einstellung abhängt.

    Angenommen, Sie verwenden die Textsuchinfrastruktur zum Filtern, für NIDS oder für
    ähnliche sicherheitsrelevante Zwecke und gehen dann zu KMP. Wenn Ihnen die Leistung wirklich am Herzen liegt, sagen Sie, Sie klassifizieren Pakete, um Quality of Service (QoS) -Richtlinien anzuwenden, und Sie haben nichts dagegen, wenn mögliche Übereinstimmungen über mehrere Fragmente verteilt sind. Dann gehen Sie zu BM.

Datenstrukturen und Algorithmen im Chromium-Webbrowser

Links verweisen auf den Quellcode in Google-Code . Ich werde nur einige auflisten. Ich würde vorschlagen, die Suchfunktion zu verwenden, um Ihren bevorzugten Algorithmus oder Ihre bevorzugte Datenstruktur nachzuschlagen.

  1. Spreizbäume .

    Der Baum wird auch durch eine Zuordnungsrichtlinie (Allocator) parametrisiert. Die Richtlinie wird zum Zuweisen von Listen im C Free Store oder in der Zone verwendet. siehe zone.h.

  2. Voronoi-Diagramme werden in einer Demo verwendet.
  3. Tabs basierend auf Bresenhams Algorithmus .
Es gibt auch solche Datenstrukturen und Algorithmen im Code von Drittanbietern, die im Chromium-Code enthalten sind.

  1. Binäre Bäume
  2. Rot-schwarze Bäume

    Fazit von Julian Walker

    Rotschwarze Bäume sind interessante Bestien. Sie sind vermutlich einfacher als AVL-Bäume (ihr direkter Konkurrent), und auf den ersten Blick scheint dies der Fall zu sein, da das Einfügen ein Kinderspiel ist. Wenn man jedoch anfängt, mit dem Löschalgorithmus zu spielen, werden rot-schwarze Bäume sehr knifflig. Das Gegengewicht zu dieser zusätzlichen Komplexität besteht jedoch darin, dass sowohl das Einfügen als auch das Löschen unter Verwendung eines Top-Down-Algorithmus mit einem Durchgang implementiert werden können. Dies ist bei AVL-Bäumen nicht der Fall, bei denen nur der Einfügealgorithmus von oben nach unten geschrieben werden kann. Das Löschen aus einem AVL-Baum erfordert einen Bottom-Up-Algorithmus.

    ...

    Rot-schwarze Bäume sind beliebt, da die meisten Datenstrukturen einen skurrilen Namen haben. Beispielsweise werden in Java und C ++ die Bibliothekszuordnungsstrukturen normalerweise mit einem rot-schwarzen Baum implementiert. Rot-Schwarz-Bäume sind auch in der Geschwindigkeit mit AVL-Bäumen vergleichbar. Während das Gleichgewicht nicht ganz so gut ist, ist die Arbeit zur Aufrechterhaltung des Gleichgewichts in einem rot-schwarzen Baum normalerweise besser. Es gibt ein paar Missverständnisse, aber der Hype um rot-schwarze Bäume ist größtenteils zutreffend.

  3. AVL-Bäume
  4. Rabin-Karp-String-Matching wird für die Komprimierung verwendet.
  5. Berechnen Sie die Suffixe eines Automaten .
  6. Bloom-Filter von Apple Inc. implementiert
  7. Bresenhams Algorithmus .

Programmiersprachenbibliotheken

Ich denke, sie sind eine Überlegung wert. Die Entwickler der Programmiersprachen hielten es für die Zeit und Mühe einiger Ingenieure, diese Datenstrukturen und Algorithmen zu implementieren, damit andere dies nicht tun müssten. Das Vorhandensein von Bibliotheken ist ein Grund dafür, dass wir grundlegende Datenstrukturen in Software wiederfinden, die in C geschrieben ist, jedoch weniger für Java-Anwendungen.

  1. Die C ++ - STL enthält Listen, Stapel, Warteschlangen, Karten, Vektoren und Algorithmen zum Sortieren, Suchen und Manipulieren von Heaps .
  2. Die Java-API ist sehr umfangreich und deckt viel mehr ab.
  3. Die Boost C ++ - Bibliothek enthält Algorithmen wie Boyer-Moore- und Knuth-Morris-Pratt-String-Matching-Algorithmen.

Allokations- und Planungsalgorithmen

Ich finde diese interessant, denn obwohl sie als Heuristik bezeichnet werden, bestimmt die von Ihnen verwendete Richtlinie die Art des Algorithmus und die Datenstruktur, die erforderlich sind. Man muss also über Stapel und Warteschlangen Bescheid wissen.

  1. Zuletzt verwendet kann auf verschiedene Arten implementiert werden. Eine listenbasierte Implementierung im Linux-Kernel.
  2. Andere Möglichkeiten sind First In First Out, Am wenigsten verwendet und Round Robin.
  3. Eine Variante von FIFO wurde vom VAX / VMS-System verwendet.
  4. Der Clock-Algorithmus von Richard Carr wird zum Ersetzen von Seitenrahmen unter Linux verwendet.
  5. Der Intel i860-Prozessor verwendete eine zufällige Ersetzungsrichtlinie.
  6. Adaptive Replacement Cache wird in einigen IBM-Speichercontrollern verwendet und wurde in PostgreSQL verwendet, allerdings nur für kurze Zeit aufgrund von Patentproblemen .
  7. Der Buddy-Speicherzuweisungsalgorithmus , der von Knuth in TAOCP Vol. 4, No. 1 wird im Linux-Kernel und der von FreeBSD und Facebook verwendete Jemalloc Concurrent Allocator verwendet .

Kern-Utils in * nix-Systemen

  1. grep und awk implementieren beide die Thompson-McNaughton-Yamada-Konstruktion von NFAs aus regulären Ausdrücken, die anscheinend sogar die Perl-Implementierung übertreffen .
  2. tsort implementiert die topologische Sortierung.
  3. fgrep implementiert den Aho-Corasick-String-Matching-Algorithmus.
  4. GNU grep , implementiert die Boyer-Moore - Algorithmus nach dem Autor Mike Haertel.
  5. crypt (1) hat unter Unix eine Variante des Verschlüsselungsalgorithmus auf der Enigma-Maschine implementiert.
  6. Der von Doug McIllroy implementierte Unix-Diff , der auf einem gemeinsam mit James Hunt entwickelten Prototyp basiert, bietet eine bessere Leistung als der zur Berechnung der Levenshtein-Entfernungen verwendete dynamische Standardprogrammieralgorithmus. Die Linux-Version berechnet die kürzeste Bearbeitungsentfernung.

Kryptographische Algorithmen

Dies könnte eine sehr lange Liste sein. Kryptografische Algorithmen sind in jeder Software implementiert, die sichere Kommunikationen oder Transaktionen ausführen kann.

  1. Merkle-Bäume , insbesondere die Tiger Tree Hash-Variante, wurden in Peer-to-Peer-Anwendungen wie GTK Gnutella und LimeWire verwendet .
  2. MD5 wird verwendet, um eine Prüfsumme für Softwarepakete bereitzustellen, und wird für Integritätsprüfungen auf * nix-Systemen ( Linux-Implementierung ) verwendet. Es wird auch unter Windows und OS X unterstützt.
  3. OpenSSL implementiert viele kryptografische Algorithmen, einschließlich AES, Blowfish, DES, SHA-1, SHA-2, RSA, DES usw.

Compiler

  1. LALR-Parsing wird von yacc und bison implementiert.
  2. Dominator-Algorithmen werden in den meisten optimierenden Compilern verwendet, die auf SSA-Formularen basieren.
  3. lex und flex kompilieren reguläre Ausdrücke in NFAs.

Komprimierung und Bildverarbeitung

  1. Die Lempel-Ziv- Algorithmen für das GIF-Bildformat werden in Bildbearbeitungsprogrammen implementiert, beginnend mit der Konvertierung des Dienstprogramms * nix in komplexe Programme.
  2. Die Lauflängencodierung wird zum Generieren von PCX-Dateien (vom ursprünglichen Paintbrush-Programm verwendet), komprimierten BMP-Dateien und TIFF-Dateien verwendet.
  3. Die Wavelet-Komprimierung ist die Grundlage für JPEG 2000, sodass alle Digitalkameras, die JPEG 2000-Dateien erstellen, diesen Algorithmus implementieren.
  4. Die Reed-Solomon-Fehlerkorrektur ist im Linux-Kernel , CD-Laufwerken und Barcode-Lesern implementiert und wurde mit der Faltung für die Bildübertragung von Voyager kombiniert.

Konfliktgetriebenes Klausellernen

Seit dem Jahr 2000 ist die Laufzeit von SAT-Lösern auf industriellen Benchmarks (normalerweise aus der Hardwareindustrie, obwohl auch andere Quellen verwendet werden) jedes Jahr fast exponentiell gesunken. Ein sehr wichtiger Teil dieser Entwicklung ist der Conflict Driven Clause Learning- Algorithmus, der den Boolean Constraint Propagation- Algorithmus in der Originalarbeit von Davis Logemann und Loveland mit der aus der Constraint Programming- und Artificial Intelligence-Forschung stammenden Methode des Klausellernens kombiniert. Für die spezifische industrielle Modellierung wird SAT als einfaches Problem angesehen ( siehe diese Diskussion)). Für mich ist dies eine der größten Erfolgsgeschichten der letzten Zeit, da sie über mehrere Jahre verteilte algorithmische Fortschritte, clevere technische Ideen, experimentelle Bewertungen und eine konzertierte gemeinsame Anstrengung zur Lösung des Problems kombiniert. Der CACM-Artikel von Malik und Zhang ist eine gute Lektüre. Dieser Algorithmus wird an vielen Universitäten gelehrt (ich habe dort, wo es der Fall war, vier besucht), normalerweise jedoch in einer Klasse für Logik oder formale Methoden.

Es gibt zahlreiche Anwendungen von SAT-Lösern. IBM, Intel und viele andere Unternehmen haben ihre eigenen SAT-Löser-Implementierungen. Der Paketmanager in OpenSUSE verwendet auch einen SAT-Löser.


5
@HuckBennett, CDCL ist ein durch Heuristiken parametrisierter Algorithmus, aber selbst keine Heuristik. Es hat den schlimmsten Fall eines exponentiellen Verhaltens, aber es ist nicht trivial, dies zu zeigen. Darüber hinaus können wir es nachweislich nicht besser machen und es ist das Beste, was wir in der Praxis tun können. Ich bin daher der Meinung, dass alle Informatiker darüber Bescheid wissen sollten! Was LRU, FIFO usw. betrifft, handelt es sich um Heuristiken, aber wie bei ARC sind möglicherweise clevere Algorithmen oder Datenstrukturen für die Implementierung erforderlich.
Vijay D

9
Wäre ein solcher Kommentar nicht auf Simplex zutreffen: Zunächst nicht gut verstanden und später als exponentiell erwiesen, funktioniert er jedoch in der Praxis und hat später eine polynomiell geglättete Komplexität? CDCL ist für die Algorithmusanalyse interessant, da Sie die Beweiskomplexität durchgehen müssen, um Familien von Formeln abzuleiten, die das Verhalten im ungünstigsten Fall aufweisen, und um zu zeigen, dass sie exponentiell prägnanter sein können als einige Varianten der Auflösung. Es gibt verschiedene Erweiterungen, z. B. Symmetriebrechungs- und Autarkietechniken, für die eine solche Analyse noch offen ist.
Vijay D

28
Dies ist ein Schatz für einen Studenten
neo1691

2
@ EmmanueleViola, ich habe noch ein paar Beispiele hinzugefügt. Der Beitrag ist jetzt lang, deshalb möchte ich ihn nicht verlängern. Vielleicht sollten Sie eine neue Frage speziell zu Implementierungen von Dijkstra-, Simplex- und Bloom-Filtern als Teil eines echten Systems wie Linux, Chrome, eines Webservers usw. stellen. Ich denke, Sie werden mit größerer Wahrscheinlichkeit gute Antworten erhalten, wenn Sie spezifisch sind.
Vijay D

4
Hacker News und R / Programming.
Vijay D

40

PageRank ist einer der bekanntesten derartigen Algorithmen. Es wurde von Google-Mitbegründer Larry Page und Mitautoren entwickelt und bildete die Grundlage der ursprünglichen Suchmaschine von Google. Es wird weithin als hilfreich für die Erzielung besserer Suchergebnisse als die damaligen Wettbewerber anerkannt.

Wir stellen uns einen "zufälligen Surfer" vor, der auf einer Webseite beginnt und wiederholt auf einen zufälligen Link klickt, um zu einer neuen Seite zu gelangen. Die Frage ist: "Welchen Teil der Zeit verbringt der Surfer auf jeder Seite?" Je mehr Zeit der Surfer auf einer Seite verbringt, desto wichtiger wird die Seite.

Wir betrachten das Internet eher als eine Grafik, in der Seiten Knoten und Links gerichtete Kanten sind. Wir können dann die Aktion des Surfers als zufällige Bewegung auf einem Graphen oder äquivalent als Markov-Kette mit Übergangsmatrix modellieren . Nachdem wir uns mit einigen Problemen befasst haben, um sicherzustellen, dass die Markov-Kette ergodisch ist (wohin geht der Surfer, wenn eine Seite keine ausgehenden Links hat?), Berechnen wir die Zeit, die der Surfer auf jeder Seite als Steady-State-Verteilung der Markov-Kette verbringt .M

Der Algorithmus selbst ist in gewisser Weise trivial - wir berechnen einfach für großes und willkürliche Anfangsverteilung . Dies kommt nur einer wiederholten Matrix-Matrix- oder Matrix-Vektor-Multiplikation gleich. Der Inhalt der Algorithmen liegt hauptsächlich im Aufbau (Gewährleistung der Ergodizität, Nachweis der einzigartigen Gleichgewichtsverteilung einer ergodischen Markov-Kette) und in der Konvergenzanalyse (Abhängigkeit von der spektralen Lücke von ). k π 0 MMkπ0kπ0M


7
Ich denke nicht, dass dies typisches Material für Algorithmen ist.
Manu

14
Übrigens habe ich PageRank zum ersten Mal in einer Algorithmusklasse kennengelernt. Ich glaube, der Professor hat es gewählt, weil es ein schönes Beispiel für "in der Praxis verwendete Algorithmen" war. Wenn Sie die Beispiele auf die erste Hälfte des CLRS-Materials beschränken, ist die Liste der Beispiele entweder zu lang oder zu trivial - Quicksort, B-Bäume und der Dijkstra-Algorithmus sind allgegenwärtig.
Huck Bennett

2
Wir bringen den PageRank den Studenten bei.
Aaron Roth

6
Ich unterrichte es auch Studenten (sowohl in der erforderlichen Algorithmus-Klasse als auch in einem spezielleren gewählten Graph-Algorithmus).
David Eppstein

2
Ich habe PageRank als Student in einem Wahlfach gelernt.
Vijay D

33

Ich möchte die weit verbreitete Software CPLEX (oder eine ähnliche) Implementierung der Simplex-Methode / des Simplex-Algorithmus zur Lösung linearer Programmierprobleme erwähnen. Es ist der (?) Am häufigsten verwendete Algorithmus in der Wirtschafts- und Operationsforschung.

"Wenn man Statistiken darüber anfertigen würde, welches mathematische Problem den größten Teil der Computerzeit der Welt beansprucht, dann wäre die Antwort wahrscheinlich lineare Programmierung (ohne Datenbankprobleme wie Sortieren und Suchen). " (L. Lovász, A new.) linearer Programmieralgorithmus - besser oder schlechter als die Simplex-Methode - Math. Intelligencer 2 (3) (1979/80) 141-146.)

Der Simplex-Algorithmus hat auch theoretisch großen Einfluss; siehe zum Beispiel die (Polynom-) Hirsch-Vermutung .

Ich vermute, ein typischer Student oder Doktorand. Algorithmusklasse befasst sich mit dem Simplex-Algorithmus (einschließlich grundlegender Algorithmen aus der linearen Algebra wie der Gauß-Eliminierungsmethode).

(Andere erfolgreiche Algorithmen, einschließlich Quicksort zum Sortieren, sind in Algorithmen aus dem Buch aufgeführt .)


"Wirtschafts- und Operationsforschung" ist nicht spezifisch genug. CPLEX ist nicht die Art von Beispiel, nach der ich gesucht habe, da es nur eine Implementierung des Algorithmus ist. Anders wäre es, wenn der GCC-Compiler beispielsweise die Simplex-Methode verwenden würde.
Manu

12
Ich denke, "lineare Programmierprobleme" sind spezifisch genug, wenn wir über Wirtschaftlichkeit und OP sprechen. Mit CPLEX meine ich auch den Algorithmus hinter der Implementierung.
VB

16
"Heutzutage verwenden die meisten großen Unternehmen eine lineare Programmierung, um Produkte zu bewerten und Lieferketten zu verwalten. Transportunternehmen verwenden diese, um den günstigsten Weg zur Konsolidierung, Koordinierung und Weiterleitung von Lieferungen vieler Produkte von global verteilten Lieferanten an entfernte Märkte zu wählen, die Kapazitätsengpässen unterliegen. Das Erdöl Die Industrie nutzt es für die Exploration, das Mischen, die Produktionsplanung und den Vertrieb. Die Eisen- und Stahlindustrie nutzt es, um Eisenerze zu bewerten, das Hinzufügen von Koksöfen zu untersuchen und Produkte auszuwählen ... " news.stanford.edu/news/2005/may25/ dantzigobit-052505.html
Sasho Nikolov

Vielen Dank. Aber ich finde das Zitat schrecklich vage. Ich denke, wenn ich sage, dass vor einer Klasse von Schülern die Hälfte davon einschlafen würde ;-) Es wäre anders, wenn wir so etwas sagen: UPS verwendet LP, um Pakete wie folgt zu versenden ... Ich sage solche Beispiele nicht sind trivial zu finden, aber angesichts der Tatsache, dass "die meisten großen Firmen LP verwenden", würde ich hoffen, dass wir zumindest auf eine verweisen können .
Manu

10
Seit 2007 verwendet LAX (der Flughafen) Software zur Lösung von Stackelberg-Spielen, um das Sicherheitspersonal zu planen. Das Lösen großer LPs ist Teil des Ganzen, siehe zB teamcore.usc.edu/ARMOR-LAX . Außerdem würde ich jemanden aus Ihrer Operations Research-Abteilung fragen: Normalerweise haben sie viele Kriegsgeschichten über die Verwendung von LP im wirklichen Leben
Sasho Nikolov,

30

Soweit ich weiß, war das National Resident Matching Program lange Zeit nur eine einfache Anwendung des Gale-Shapley-Algorithmus für das Problem der stabilen Ehe. Es wurde seitdem leicht überarbeitet, um einige zusätzliche Details wie Ehepartnerzuweisungen (auch bekannt als das "Zwei-Körper-Problem") usw. zu behandeln.


Ich bin nicht sicher, ob eine stabile Ehe ein typisches Material für Algorithmen ist.
Manu

16
Es ist im Buch Tardos and Kleinberg Algorithms Design sowie in Motwanis Randomized Algorithms enthalten und beide Bücher sind weit verbreitet. Stabile Ehe wird in Algorithmenkursen möglicherweise nicht allgemein gelehrt, aber es wird sicherlich in vielen von ihnen gelehrt.
Sasho Nikolov

10
Eine schnelle Suche zeigt, dass es in Berkeleys CS70 , MITs 6.042 , UMDs CMSC451 usw. aufgetaucht ist
mhum

1
Interessanterweise wird das Problem NP-vollständig, wenn Sie Ehepartnerzuweisungen hinzufügen: arxiv.org/abs/1308.4534 . In der Praxis scheint dies jedoch kein allzu großes Problem zu sein: en.wikipedia.org/wiki/…
Joshua Grochow

2
@EmanueleViola während es möglicherweise nicht traditionell behandelt wird, hat seine Aufnahme in das Kleinberg / Tardos-Buch es populärer gemacht (und wenn nicht, sollte es sein!)
Suresh Venkat

24

Wenn Sie auch Promovieren mit einbeziehen, bieten viele (die meisten?) CS-Programme Kurse in Codierungstheorie an. Wenn Sie einen Kurs in Codierungstheorie haben, werden Sie auf jeden Fall den Reed-Solomon-Code behandeln, der ein wesentlicher Bestandteil der Funktionsweise von CDs ist, und die Huffman-Codierung, die in den Dateiformaten JPEG, MP3 und ZIP verwendet wird. Je nach Ausrichtung des Kurses können Sie auch Lempel-Ziv behandeln, das im GIF-Format verwendet wird. Persönlich habe ich Lempel-Ziv in einem Bachelor-Algorithmus-Kurs bekommen, aber ich denke, das könnte untypisch sein.


1
Und ich bekam eine Vorlesung über Huffman-Codierung als Undergrad, die für ein Projekt erforderlich war.
Brian S

Huffman befindet sich in einem der ersten Kapitel von CLRS, sollte sich also definitiv qualifizieren
Sasho Nikolov

21

GNU grep ist ein Befehlszeilentool zum Durchsuchen einer oder mehrerer Eingabedateien nach Zeilen, die eine Übereinstimmung mit einem bestimmten Muster enthalten. Es ist bekannt, dass grep sehr schnell ist! Hier ist ein Zitat von seinem Autor Mike Haertel (von hier genommen ):

GNU grep uses the well-known Boyer-Moore algorithm, which looks first for the
final letter of the target string, and uses a lookup table to tell it how far
ahead it can skip in the input whenever it finds a non-matching character.

19

Generell wird der Kanellakis-Preis von der ACM für genau solche theoretischen Entdeckungen vergeben, die einen großen Einfluss auf die Praxis hatten.

Die Auszeichnung 2012 ist für ortsabhängiges Hashing vorgesehen , das zu einer gängigen Methode zur Reduzierung der Dimensionalität beim Data Mining für Probleme in der Nähe von Nachbarn geworden ist (und relativ einfach zu vermitteln ist - zumindest der Algorithmus selbst).


Ich denke, das ist lehrbar, aber nicht weit verbreitet.
Manu

3
Bedauerlich, aber wahr. Varianten von LSH (wie die Count-min-Skizze und Verwandte) tauchen jedoch in Kursen für "Large Data" oder "Data Mining" auf. Ich unterrichte zum Beispiel Bloom-Filter in meiner Algorithmus-Klasse.
Suresh Venkat

Als persönliche Erfahrung skalierte LSH nicht für eine Instanz von "Big Data" (100 Mio. Elemente).
Lynxoid

1
@lynxoid das ist eine separate Diskussion / Frage :). Es gibt genügend Beispiele dafür, wo es funktioniert , die meiner Meinung nach für diese bestimmte Frage relevant sind.
Suresh Venkat

18

ε

Einige Beispiele für industrielle Verwendungen dieser Datenstrukturen sind:

  • Das Sawzall- System von Google für die unstrukturierte Datenanalyse verwendet die Zählskizze , um eine Funktion für die beliebtesten Elemente zu implementieren
  • Das Gigascope "Stream Database" -System von AT & T zur Überwachung des Netzwerkverkehrs implementiert die CountMin-Skizze.
  • Das CMON-System (Continuous Monitoring) von Sprint implementiert CountMin.

Auf dieser Website werden auch Informationen zu CountMin-Anwendungen gesammelt.

Soweit ich unterrichte, weiß ich, dass in Princeton grundlegende Skizzentechniken in diskreten Mathematikkursen unterrichtet werden. In meinem ersten Algorithmenkurs wurde mir die CountMin-Skizze beigebracht. In jedem Fall ist die Analyse von CountMin einfacher als die Analyse für fast jeden anderen randomisierten Algorithmus: Es ist eine einfache Anwendung von paarweiser Unabhängigkeit und Markovs Ungleichung. Wenn dies in den meisten Algorithmenkursen kein Standardmaterial ist, denke ich, hat dies historische Gründe.


1
Tolle Beispiele (wenn auch noch nicht ganz Kernalgo).
Manu

16

In den letzten zehn Jahren wurden Algorithmen verwendet, um die Anzahl (und Qualität, glaube ich?) Von Nierentransplantationen durch verschiedene Nierenspender-Matching-Programme zu erhöhen. Ich habe Probleme damit, die neuesten Nachrichten zu finden, aber hier sind mindestens ein paar Hinweise:

  • Noch im Jahr 2007 verwendete die Alliance for Paired Donation einen Algorithmus von Abraham, Blum und Sandholm . Sie benutzen es vielleicht noch, aber ich konnte es nicht herausfinden, indem ich online suchte. Obwohl dieser Algorithmus in "Standard" -Kursen mit ziemlicher Sicherheit nicht behandelt wird, kombiniert er einige grundlegende Ideen, die in solchen Kursen sicherlich vermittelt werden, um einen Algorithmus zu liefern, der für ein Problem gut genug ist, das im Allgemeinen NP-vollständig ist (eine Variante von Cycle Cover) ).

  • Das Nationale Nierenregister verwendet auch einige Standardalgorithmen, einschließlich (an einer Stelle) CPLEX. Dies führte zu einer tatsächlich durchgeführten Transplantationskette, an der 60 Personen teilnahmen .

Dies ist eines meiner Lieblingsbeispiele nicht nur für den Erfolg von Algorithmen, sondern auch für die Wichtigkeit, Algorithmen für NP-vollständige Probleme zu untersuchen. Sie können buchstäblich Leben retten und haben es bereits getan!


Eine einfachere Version dieser Algorithmen wird auch zum Tauschen von
Radu GRIGore

15

Viterbis Algorithmus, der in der Spracherkennung und vielen anderen Anwendungen immer noch weit verbreitet ist: http://en.wikipedia.org/wiki/Viterbi_algorithm Der Algorithmus selbst ist eine grundlegende dynamische Programmierung.

Aus Wikipedia: "Der Viterbi-Algorithmus wurde 1967 von Andrew Viterbi als Decodierungsalgorithmus für Faltungscodes über verrauschte digitale Kommunikationsverbindungen vorgeschlagen. [1] Der Algorithmus hat universelle Anwendung bei der Decodierung der Faltungscodes gefunden, die sowohl in digitalen CDMA- als auch GSM-Mobilfunkzellen verwendet werden." DFÜ-Modems, Satelliten-, Deep-Space-Kommunikations- und 802.11-Wireless-LANs werden heute auch häufig für Spracherkennung, Sprachsynthese, Keyword-Spotting, Computerlinguistik und Bioinformatik verwendet Erkennung) wird das akustische Signal als beobachtete Ereignissequenz behandelt, und eine Textfolge wird als "verborgene Ursache" des akustischen Signals angesehen. Der Viterbi-Algorithmus findet die wahrscheinlichste Textfolge, die dem akustischen Signal gegeben ist. "


13
  1. A * wird in vielen persönlichen Navigationsgeräten (auch als GPS-Geräte bezeichnet) verwendet.
  2. A * ist sehr gut definiert und wurde ziemlich einfach implementiert.
  3. Ein * ist nicht ganz trivial, aber es braucht keinen Doktortitel. um es zu verstehen.

A * wird auch häufig im Game-Design unterrichtet. Ich denke nicht, dass moderne 3D-Spiele im Allgemeinen A * für die NPC-Navigation verwenden, aber 2D- / Isometrie-Spiele sowie ältere Spiele verwenden den Algorithmus.
Brian S

@BrianS Kennen Sie Beispiele für Pfadfindungsalgorithmen, die in 3D-Spielen verwendet werden, insbesondere für feindliche NPCs in Spielen (wie z. B. ein Shooter-NPC)? Ich erinnere mich, dass ich so etwas wie ... eine Karte in hexagonale Sektoren unterteilt und diese anstelle von Quadraten als Knoten verwendet habe Und das ermöglichte eine ruhigere Bewegung.
Goodwine

@Goodwine, Entschuldigung, ich habe keine realen Beispiele für Pfadfindungsalgorithmen in 3D-Spielen. Meine persönliche Erfahrung war mit "würfelartigen" Umgebungen (Karte aus Würfeln, auf denen Charaktere stehen - im Grunde 2D, trotz 3D-Rendering) und Dummy-AIs, die zum Testen von Spielercharakteren verwendet werden.
Brian S

12

Schauen Sie sich Jens Vygens Projekt BonnTools for Chip Design an. http://www.or.uni-bonn.de/~vygen/projects.html Ich habe einige Vorträge darüber gehört und auch einige ihrer Papiere angeschaut. Sie verwenden randomisierte Rundungen nach Raghavan-Thompson-Art sowie eine Methode zur multiplikativen Gewichtsaktualisierung zum Lösen von LPs mit großem Multicommodity-Flow. Wie bei jedem großen Projekt muss auch hier ein Engineering durchgeführt werden, die Methodik basiert jedoch weitgehend auf bekannten Algorithmen.


Ich werde einen Blick darauf werfen, aber es klingt nicht nach typischen Algorithmen.
Manu

8
Hmm, randomisierte Rundungen werden normalerweise in PhD-Level-Algorithmen-Kursen gelehrt, nicht wahr?
Chandra Chekuri

2
Warum nur eine zufällige Rundung? Sanjeev Arora, Elad Hazan und Satyen Kale sind der Meinung, dass selbst die Aktualisierung der multiplikativen Gewichte grundlegend genug ist, um auf UG-Ebene unterrichtet zu werden wird allen Algorithmus-Schülern zusammen mit Divide-and-Conquer, dynamischer Programmierung, Zufallsstichproben und dergleichen beigebracht. " (vgl. cs.princeton.edu/~arora/pubs/MWsurvey.pdf ).
Jagadish


10

Ich bin ziemlich überrascht, dass bei all den oben genannten ausgefallenen Algorithmen niemand die ehrwürdige Lempel-Ziv-Familie von Kompressionsalgorithmen erwähnt hat (erfunden 1977/78).

  1. Diese werden überall verwendet - von Text zu Bild, um sie zu streamen. Es ist durchaus möglich, dass LZ * eine der am häufigsten verwendeten Algorithmenfamilien ist.
  2. Die Wörterbuchkomprimierung war ein beachtlicher Durchbruch in der Komprimierungstheorie und eine deutliche Abkehr vom Shannon-Fano-Ansatz.
  3. Die Algorithmen in der Familie sind ziemlich einfach und leicht zu verstehen.

Aktualisieren

Anscheinend wurde es schon kurz erwähnt.


10

Die Singular Value Decomposition (SVD) steht in engem Zusammenhang mit der statistischen Faktorenanalyse oder der Analyse der Hauptkomponenten. Sie ist innerhalb einer linearen Algebra oder Statistikklasse für Anfänger nachvollziehbar und hat viele wichtige theoretische Eigenschaften. es spielt auch eine Rolle bei Bildkomprimierungsalgorithmen. Es spielte eine Schlüsselrolle bei den Gewinnerbeiträgen des Netflix- Preiswettbewerbs im Wert von 1 Mio. US-Dollar (eines der weltweit größten Datenerfassungswettbewerbe in der Geschichte) und wird jetzt auf seiner Website implementiert, um Nutzerbewertungen vorherzusagen. Es ist auch bekannt, dass es in hohem Maße mit hebräischen selbstorganisierenden neuronalen Netzen verwandt ist, die ihren Ursprung in der biologischen Theorie haben.

Es gibt auch eine gewisse Verbindung zum Gradientenabstieg, der im maschinellen Lernen und in künstlichen neuronalen Netzen weit verbreitet ist und eine sehr universell angewandte Optimierungstechnik darstellt. In diesem Fall ist Newtons Methode eine grundlegende 2d-Form. Es gibt einen Gradientenabstiegsalgorithmus zum Erhalten der SVD.


10

Die Suche nach einem Eulerschen Pfad bildet die Grundlage der Genomassemblierung - eine Aufgabe, die häufig bei der Arbeit mit vollständigen Genomen (in den Bereichen Bioinformatik, Medizin, Forensik und Ökologie) ausgeführt wird.

UPDATE Vergaß dieses offensichtliche: UPS, FedEx, USPS müssen jede Nacht große Instanzen des Travelling Salesman-Problems lösen. Spart viel Zeit und Geld, um die Fahrer auf eine optimale Route zu schicken.

UPDATE2 In vielen Betriebssystemen wird das Problem der minimalen Rückkopplungsscheitelpunkteinstellung für die Deadlock-Auflösung verwendet.


Sind Sie sicher, dass TSP das Problem ist, das die Paketdienstleister zu lösen versuchen? Ich dachte, eine größere praktische Herausforderung sei Rucksack und andere Arten von Verpackungsproblemen.
András Salamon

Die Aufgaben für die Fahrer ändern sich jeden Tag (dh UPS muss nicht jeden Tag dasselbe Haus aufsuchen), sodass die Routen täglich aktualisiert werden müssen. Es ist kein reiner TSP - es gibt zusätzliche Einschränkungen, wie zum Beispiel Einbahnstraßen, keine Wenden, die Pakete auf der einen Straßenseite liefern, aber nicht auf der anderen.
Lynxoid

Ich bin mir aber sicher, dass das Packen auch wichtig ist.
Lynxoid

9

Ich mag dieses System, um mit Nierentransplantationen die maximale Anzahl von Leben in Großbritannien zu retten, basierend auf maximalen Matching-Algorithmen: Paired and Altruistic Kidney Donation . Sie bringen Menschen zusammen, die Nieren brauchen und einen nicht passenden Freund / Verwandten haben, der bereit ist, mit anderen Menschen in der gleichen Situation auf maximale Weise zu spenden. Am Spendentag spenden dann alle Spender gleichzeitig, gefolgt von einem zügigen Nierentransport im ganzen Land zu den Empfängern.


8

Dieses relativ neue Buch ist es wert, als vollständige / detaillierte Antwort auf die Frage in praktischer, erweiterter / gesammelter Form betrachtet zu werden, die als ergänzendes Material für eine Algorithmusklasse verwendet werden könnte. [einige davon wurden bereits erwähnt; die starke Überlappung selbst ist bemerkenswert.]


Die 2. Ausgabe stammt ursprünglich aus der Januar / Februar 2000-Ausgabe von Computing in Science & Engineering, einer gemeinsamen Veröffentlichung des American Institute of Physics und der IEEE Computer Society. zusammengestellt von den Gastredakteuren Jack Dongarra von der University of Tennessee und Oak Ridge National Laboratory und Francis Sullivan vom Center for Computing Sciences am Institut für Verteidigungsanalysen
vzn

7

Die Suche nach Knuth-Morris-Pratt- Zeichenfolgen ist weit verbreitet, spezifisch und wird in CS für Studenten und Absolventen unterrichtet.


2
Wäre gut, wenn du auf eine bestimmte Verwendung hinweisen könntest. So etwas wie MS Word verwendet KMP.
Manu

6

Denken Sie an sehr grundlegende Algorithmen

  1. Zufallsgeneratoren sind überall und speziell in allen Spielen zu finden.
  2. Datenbanken bestehen aus vielen Algorithmen, darunter B +, Hashes, Prioritätswarteschlangen, reguläre Ausdrücke, Kriptographie, Sortierung usw. Ein Freund von mir sagt, SGBDs seien an der Spitze der Nahrungskette für Computer.
  3. Sortieren wird überall verwendet, zum Beispiel in Excel. Es wird im wirklichen Leben eigentlich immer verwendet, aber normalerweise verwenden Menschen Ad-hoc-Algorithmen
  4. Rundum werden Paritätsbits verwendet
  5. Die Huffman-Codierung erfolgt in Komprimierungs- und Übertragungssoftware
  6. Stapel (LIFO) werden überall eingesetzt. Innerhalb von Programmiersprachen, in CPUs usw.

Schön zu zeigen, dass sie im wirklichen Leben auftauchen:

A. Viele Gruppen verwenden eine Art Überdeckungsbaum-Algorithmus, um zu kommunizieren, indem sie Telefonlisten hierarchisch auf Personen aufteilen. B. Autos an einer Kreuzung verwenden normalerweise einen Round-Robin-Algorithmus (auf freiwillige Weise). C. Die meisten Orte, wie Banken und Krankenhaus, organisieren ihre Kunden in einem FIFO-Algorithmus


4
Sortieren ist kein Algorithmus. Dies ist eine Aufgabe, dh eine Aufgabe, für die Sie einen Algorithmus entwerfen (oder in der Praxis auswählen) müssen.
David Richerby

Dies scheinen keine konkreten Beispiele zu sein, wie in der Frage gefordert.
Kaveh

SGBD == RDBMS FYI für diejenigen, die es nicht wussten.
Autodidact

6

Ein faszinierendes algorithmisches Problem ergibt sich bei der medizinischen Anwendung des CT-Scans. Bei der Computertomographie (CT) wird der Körper Röntgenstrahlen aus verschiedenen Winkeln ausgesetzt. Am einen Ende des Scanners befinden sich die Röntgensender und am anderen Ende die Sensoren. Aus einer solchen Reihe von Scans wird ein Bild rekonstruiert, das der Arzt untersuchen kann!

Der gefilterte Rückprojektionsalgorithmus ist die Grundlage für die Rekonstruktion eines Bildes aus einer Reihe von Scans. Dieser Algorithmus ist tatsächlich eine Form eines Approximationsproblems, bei dem das "Signal" unterhalb der Nyquist-Rate abgetastet wird. Dieser Algorithmus wird in allen Krankenhäusern "hinter den Kulissen" verwendet, und die grundlegende gefilterte Rückprojektion verwendet Grundmathematik wie Fourier-Transformationen, um das Fourier-Schnitt-Theorem zu erreichen .


6

Ein Beispiel für FFT

Ich habe einmal geholfen, einen FFT-Algorithmus auf eine andere Systemsprache zu portieren.

Der Algorithmus wurde verwendet, um Leitungsbrüche bei der koaxialen Übertragung von Kabelfernsehen / Internet / Telefon zu bestimmen. Grundsätzlich würde ein Techniker verlangen, dass ein Signal an die Box des Kunden gesendet wird, und gleichzeitig würden sie eine Echtzeitanzeige der Statistiken für den bestimmten Kunden aufrufen, wie z. B. QoS, dB, ..., die der Techniker verwenden könnte die Daten und ein Diagramm, um innerhalb weniger Meter zwischen Haus und Mast zu bestimmen, wo ein Teilbruch bestand (oder mehrere Brüche, wie mir gesagt wurde).

Wie oben erwähnt, ist FFT weit verbreitet, aber dies war einer der offensichtlichen und offensichtlichen Gründe (warum und wie), die ich in der Praxis gesehen habe.

Tut mir leid, dass ich es auf einem hohen Niveau halten musste.


5

Bresenhams Linienalgorithmus ist der nützlichste Algorithmus, auf den ich gestoßen bin. Leicht zu verstehen Ich habe es für viele Anwendungen verwendet, vom Strichzeichnen über einen komplexen Spliner für eine 3D-Casting-Engine bis hin zu einem komplexen Polygon-Renderer sowie für komplexe Animations- und Skalierungsanwendungen.



2

Wikipedia hat eine anständige Sammlung von Algorithmen / Anwendungen, die mehr oder weniger in einer Liste aufgeführt sind . Microsoft stellt die am häufigsten zitierten Artikel zur Verfügung, jedoch ohne explizite Erklärung des Gebiets der Informatik oder der Anwendung. Es gibt auch eine chronologische Liste von verschiedenen CS-Konferenzen, _http: //jeffhuang.com/best_paper_awards.html_ zusammengestellt von Prof. Huang.

Spectral Clustering ist ein eleganter Clustering-Algorithmus, bekannt als der von Jianbo Shi und Jitendra Malik für die Bildsegmentierung eingeführte Algorithmus für normalisierte Schnitte . Es wurde auch in Datenclusteranwendungen entwickelt, da es eine gute Schnittstelle zwischen den beiden Communities darstellt.


-2

zwei weitere persönliche Lieblingsbeispiele, die fest in der Informatik verwurzelt sind, aber von abstraktionistischen Theoretikern leicht übersehen werden können, die enorme / transformative Fortschritte gemacht haben und in den letzten Jahrzehnten erhebliche bis massive praktische / angewandte Auswirkungen auf das tägliche Leben hatten. bereits ist eine ganze generation aufgewachsen, die die welt ohne sie nicht kennt. im Grunde die Kategorie der Modellierung und Simulation .

  • Physiksimulationsalgorithmen . Hauptsächlich unter Verwendung von Newtonschen Gesetzen, aber unter Verwendung anderer Gesetze (wie z. B. Fluiddynamik). wird in einer Vielzahl von Anwendungen verwendet, von technischen Anwendungen über Videospiele bis hin zu Filmen. Dies ist auch dafür verantwortlich, die Sicherheit, Effizienz oder Zuverlässigkeit von z. B. Autos und Flugzeugen erheblich zu verbessern, indem virtuelle / Test-Designs simulierten Beanspruchungen ausgesetzt werden. Ein wichtiger verwandter Forschungsbereich aus der Bioinformatik mit massiven Auswirkungen auf die Biologie, z. B. Arzneimitteldesign, Krankheitsvorbeugung usw.: Proteinfaltung / Strukturvorhersage . Beachten Sie auch, dass der diesjährige Nobelpreis für Chemie für Chemie-Simulation an Karplus, Levitt, Warshel verliehen wurde. Physiksimulationsalgorithmen sind in hohem Maße in die Sicherheit / Prüfung von Atomwaffen involviert zB bei Los Alamos Labors.

  • Raytracing / CGI-Algorithmen . Dies begann vor einigen Jahrzehnten als Forschungsthema [ein Freund hat seinen Masterabschluss in CS-Schreiben von Raytracing-Algorithmen gemacht], wurde jedoch z. B. in Spielen und im Filmgeschäft sehr angewendet und erreichte ein außergewöhnliches Maß an Wahrhaftigkeit, das für große Mengen verantwortlich ist Spezialeffekte in Filmen. Diese Branchen haben buchstäblich Milliarden von Dollar investiert und stützen sich auf diese Algorithmen, und ganze große Unternehmen basieren darauf, sie zu nutzen, z . B. Pixar . Die Technik, die ursprünglich hauptsächlich in Scifi-Filmen verwendet wurde, ist mittlerweile so weit verbreitet, dass sie routinemäßig auch in "typischen" Filmen eingesetzt wird. zum Beispiel kürzlich The Great Gatsby stützte sich stark auf CGI-Effekte, um überzeugende oder stilisierte Umgebungen zu zeichnen, Filme / Charaktere zu retuschieren usw.


-3

Rosetta Code listet angewandte Algorithmen nach Programmiertask (692) und nach Programmiersprache (518) mit Semantic MediaWiki auf.


Wie ist dies ein Beispiel für "Kernalgorithmen ..., die in kommerzieller, behördlicher oder weit verbreiteter Software / Hardware eingesetzt werden"?
David Richerby

Es wäre nützlich, die Implementierungen jedes der hervorragenden Algorithmen, die in anderen Antworten hier aufgeführt sind, mit Wikipedia / DBpedia-URIs zu vergleichen. Es gibt keine Wikipedia / DBpedia-URIs für alle diese Algorithmen. aber es gibt Rosetta-Codeseiten.
Wes Turner

bigocheatsheet.com listet auch die Komplexität von Big-O auf und verlinkt für einige Algorithmen auf Wikipedia-Artikel.
Wes Turner

Die Frage fragt nach Beispielen für Kernalgorithmen, die in wichtigen Softwarekomponenten verwendet werden. "Hier ist eine Website mit Algorithmen, die in einer Million Sprachen implementiert sind", beantwortet diese Frage überhaupt nicht. Tatsächlich ist es genau das Gegenteil von dem, wonach die Frage sucht.
David Richerby

Eine nützliche, inhaltlich relevante Referenz.
Wes Turner

-5

Vielleicht wurden an dieser Stelle alle wichtigen / bevorzugten Algorithmen erwähnt, die für dieses Publikum von Interesse sind. Der Vollständigkeit halber verdienen jedoch noch einige weitere Erwähnungen. & Eine Analyse dessen, was als signifikanter Algorithmus angesehen wird, ist hier relevant.

in CS & IT-Bereichen scheint es ein Phänomen zu geben, das vor langer Zeit in der KI bemerkt wurde und das "Bewegen der Torpfosten" heißt . Dies ist ein psychologisches Phänomen, bei dem das Feld relativ schnell voranschreitet, die Menschen sich jedoch mental schnell an das "neue Normal" anpassen und reale oder sogar bahnbrechende Fortschritte im Nachhinein als banal oder unauffällig betrachten, nachdem sie erreicht, dh heruntergespielt oder minimiert wurden. Dies wird in dieser Frage in hohem Maße in der Art und Weise erfasst, wie Algorithmen von F & E in "Bereitstellung" übergehen. Zitiert den Autor der Frage in späteren Kommentaren:

Tatsächlich implementiert ein vernachlässigbarer Teil des gesamten Codes, der geschrieben wird, alles, was aus algorithmischer Sicht interessant ist.

Dies ist jedoch problematisch und im Grunde genommen eine TCS-zentrierte Neudefinition des Wortes "Algorithmus". vermutlich sind die interessanten Algorithmen weiterentwickelt. Bedeutet das, dass ein Problem, wenn es auf einen fortgeschrittenen Algorithmus reduziert wird, nicht mehr "interessant" ist? und "fortgeschritten" ist eindeutig ein sich bewegendes Ziel. Es gibt also eine Möglichkeit, "Algorithmen" eng oder breit zu definieren . es scheint, dass sich die TCS-Definition im Kontext ändert, aber auch in TCS gibt es einen Trend zur breiten Definition, z. B. in der sogenannten "algorithmischen Linse" .

manchmal werden die allgegenwärtigsten Algorithmen auch am meisten übersehen! Das Internet und das WWW sind eine große Umgebung / Nahe-Ökologie für Algorithmen. noch relativ jung, erst etwa zwei Jahrzehnte alt (erfunden ~ 1991), ist es in kurzer Zeit massiv und exponentiell gewachsen. Das Wachstum der WWW-Site hat wahrscheinlich sogar das berühmte exponentielle Moores-Gesetz übertroffen.

Das Internet / WWW wird von vielen ausgefeilten Algorithmen unterstützt. Das Internet verfügt über komplexe Routing-Algorithmen, die in Router integriert sind (die wiederum Unternehmen im Wert von mehreren Milliarden US-Dollar wie Cisco mit Strom versorgen). Einige fortgeschrittene Theorien sind dort anwendbar, z . B. in Routing-Algorithmen . Diese Algorithmen waren vor Jahrzehnten Gegenstand aufkommender, fortschrittlicher und innovativer Forschungen. Sie sind jedoch inzwischen so fein abgestimmt und gut verstanden, dass sie etwas unsichtbar sind.

Wir sollten nicht so schnell vergessen, dass führende Forscher vor Jahrzehnten nicht einmal sicher waren, ob die Internetwelt funktioniert oder möglich war (wie in der frühen Paketvermittlungsforschung zu sehen, ein radikal neues Entwurfsmuster zu der Zeit, das von der vorherigen Schaltung abweicht) Noch vor ein paar Jahren gab es Befürchtungen, dass es irgendwann nicht mehr skalieren und aufgrund der überwältigenden Volumenspitzen versagen könnte.

Es verwendet auch eine ausgeklügelte Fehlererkennung / -korrektur . Das Internet ist wahrscheinlich das größte, fehlertoleranteste System, das jemals von Menschen gebaut wurde und wächst weiter.

Als nächstes gibt es einen guten Grund dafür, die Algorithmen, die das WWW antreiben, weiterzuentwickeln. HTTP- und Webserver sind stark optimiert und verwenden erweiterte Sicherheits- / Verschlüsselungsprotokolle (HTTPS). Die Rendering-Logik einer Webseite wurde in HTML5 und CSS3 zusammen mit der Programmiersprache Javascript extrem erweitert .

Das relativ neue CSS hat verschiedene Prinzipien, die der OOP-Programmierung ähneln, wie Wiederverwendbarkeit und Vererbung. Apropos Schriftsatz: TeX ist ein wichtiges, intern komplexes wissenschaftliches Schriftsatzsystem (nicht anders als eine Programmiersprache), das von Knuth erfunden wurde und jetzt auf Webseiten gerendert werden kann (und möglicherweise in Hunderttausenden von wissenschaftlichen Artikeln oder mehr verwendet wird).

Ein weiterer relativ neuer Bereich von Algorithmen, die auf dem Internet aufbauen und noch auf kollektiver Intelligenz basieren . Die Stackexchange-Software selbst ist ein Beispiel für ein ausgeklügeltes kollektives Nachrichtensystem. Das soziale Netzwerk zeigt auch die Schlüsselmerkmale der kollektiven Intelligenz und es werden kontinuierlich Funktionen hinzugefügt, um diese Intelligenz zu erhöhen (zum Beispiel sind Facebook "Likes" nur ein paar Jahre alt). Das Gebiet der Bewertungssysteme basiert auf kollaborativen Filteralgorithmen und entwickelt sich immer noch basierend auf neuen Forschungen und Anwendungen.

Kurz gesagt, alle revolutionären Erfolge, die die tägliche menschliche Erfahrung verwandeln, gehen weit über bloße "Feldziele" hinaus. Wie der Titel der Frage besagt, sind alle Kernalgorithmen implementiert . Jetzt so allgegenwärtig und unsichtbar, dass es so etwas wie der IT-Ausdruck "Teil des Sanitärs" ist.


viele Zitate könnten hinzugefügt werden. hier ist einer zum starten: DARPA und die Internetrevolution von Waldrop
vzn 19.11.13

ein weiterer Verweis auf Internet-Optimierung, Biografie von Danny Lewin , Mitbegründer von Akamai, "das Genie, das das Internet verwandelt"
vzn

-8

Ein erstaunlich erfolgreicher (Hardware-) Algorithmus ist der Power-On-Reset.

Ohne ein System, bei dem sich ein Computer beim Einschalten in einem bekannten Zustand befindet, passiert nichts anderes .

Power-On-Reset ist der Grund, warum alles funktioniert, was eine CPU enthält, unabhängig davon, ob dies als eingebettet oder auf andere Weise betrachtet wird.

Wenn Sie das nächste Mal an der Wasserstelle für Programmierer und Informatiker sind, heben Sie Ihr Glas Kirschsoda auf den Einschalt-Reset.


5
Power-On-Reset ist kein Algorithmus. Dies ist eine Aufgabe, dh eine Aufgabe, für die Sie einen Algorithmus entwerfen müssen.
David Richerby
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.