Warum sind die meisten (oder alle?) Polynomzeitalgorithmen praktisch?


7

Ich habe kürzlich in einem Artikel einen interessanten Kommentar darüber gelesen, wie seltsam nützlich Mathematik ist. Es wird erwähnt, dass Polynomzeit in der Realität nicht effizient bedeuten muss (z.O(n999999999999999999999)ist Polynomzeit, aber nicht effizient). Ist es nicht so, dass alle Algorithmen in der Polynomzeit, wie höchstens, auch realistisch sind?O(n4)oder so? Ich denke meine Fragen sind:

  1. Ist das überraschend?

  2. Gibt es Beispiele für Algorithmen, die Polynomzeit haben, aber nicht praktikabel sind?


Dieses Papier ist ein Beispiel für die Frage 2. (Siehe Absatz knapp unter Satz 1.1.)

3
Willkommen bei CS.SE! Sie wissen also, dass wir für die Zukunft im Allgemeinen eine Frage pro Beitrag stellen möchten. Unsere Seite funktioniert so besser. Auf jeden Fall sollten Sie einen Blick auf cs.stackexchange.com/q/13202/755 , cs.stackexchange.com/q/3523/755 , cs.stackexchange.com/q/45296/755 , cs.stackexchange werfen. com / q / 210/755 , cs.stackexchange.com/q/3523/755 , cs.stackexchange.com/q/10472/755 , cs.stackexchange.com/q/38219/755 , rjlipton.wordpress.com/ 2010/10/23 / galaktische Algorithmen
DW

Einige andere Beispiele sind einige Algorithmen für die lineare Programmierung; einige Matrixmultiplikationsalgorithmen; einige Netzwerkflussalgorithmen ; und mehr . (Frage an Community-Mitglieder: Ist dies eine Frage einer dieser anderen Fragen zu CS.SE?)
DW

Kein Duplikat, @DW?
Raphael

1
Bitte beschränken Sie sich auf eine Frage. Da es so viele Duplikate gibt, ist das zweite veraltet. Ich würde es entfernen, wenn es nicht so viele Antworten gäbe. Die erste Frage erfordert eine Meinung, keine Tatsache, daher gehe ich davon aus, dass sie von selbst geschlossen werden würde. Ich werde die Community entscheiden lassen: Welche Fragen haben Vorrang? Ist das ein Duplikat?
Raphael

Antworten:


9

Der Kommentar ist falsch. Es ist sehr einfach, Beispiele für Polynomzeitalgorithmen zu nennen, die überhaupt nicht praktikabel sind:

  1. Der Ellipsoidalgorithmus zum Lösen linearer Programme läuft in Polynomzeit, ist jedoch zu langsam, um praktisch zu sein. In der Praxis wird der Simplex-Algorithmus bevorzugt, dessen Laufzeit im ungünstigsten Fall exponentiell ist.

  2. Der AKS-Primalitätstestalgorithmus wird in Polynomzeit ausgeführt, ist jedoch zu langsam, um praktisch zu sein. Stattdessen werden randomisierte Polynomzeitalgorithmen verwendet. Wir opfern Sicherheit für Leistung.

  3. Schnelle Matrixmultiplikationsalgorithmen laufen asymptotisch schneller als High-School-Matrixmultiplikation (beide sind Polynome), aber zu langsam, um praktisch zu sein. Der High-School-Algorithmus wird in der Praxis verwendet.

  4. Ein ähnliches Problem tritt bei schnellen ganzzahligen Multiplikationsalgorithmen auf. Der Algorithmus mit der besten asymptotischen Komplexität, Fürers Algorithmus, ist zu langsam, um in der Praxis verwendet zu werden. Stattdessen werden relativ einfache Algorithmen auch für ziemlich große ganze Zahlen verwendet.

  5. Big-Data-Algorithmen müssen in linearithmischer Zeit ausgeführt werden O(nlogO(1)n)) um praktisch zu sein.

Diese Beispiele zeigen, dass die Identifizierung der Polynomzeit mit der Praxis nicht genau ist und von den Umständen abhängen kann. Forscher in theoretischen Algorithmen haben das Bedürfnis, ihr Forschungsgebiet zu rechtfertigen, und glauben daher ideologisch an die Gefühle, die in dem von Ihnen erwähnten Kommentar zum Ausdruck kommen. Sie sollten solche Kommentare nicht zu wörtlich nehmen.

Tatsächlich sind viele in der Praxis verwendete Algorithmen heuristisch und wir haben keine Schätzungen zu ihrer Laufzeit außer empirischen Ergebnissen. Ein solcher Algorithmus passt überhaupt nicht in den theoretischen Rahmen, ist jedoch in der Praxis sehr nützlich. Einige (aber nicht alle) Algorithmen für maschinelles Lernen gehören zu dieser Klasse nur in Bezug auf die Laufzeit (ganz zu schweigen von der Leistung ), ebenso wie Suchalgorithmen wie A * und Alpha-Beta und SAT-Lösungsalgorithmen.


1
Dieser Multiplikationsalgorithmus verbessert asymptotisch den von Fürer.

6

Frage (1) ist eine knifflige Frage, für die ich noch nie einen guten Grund gesehen habe. Ein Vorschlag könnte sein, dass wir die Antworten für einfachere Probleme viel eher verstehen und finden, je schwieriger spezielle Fähigkeiten sind, so dass die Chance, dass die richtige Person daran arbeitet und die Antwort findet, gering ist. Das ist alles sehr handwinkend.

Für (2) gibt es definitiv Beispiele, tatsächlich wurde diese Frage bereits gestellt und beantwortet! Beachten Sie auch, dass es eine Kette von Links zu einer cstheory.se-Frage und einer math.se-Frage gibt, die andere Beispiele enthalten.


4

Ich habe die folgende Erklärung zu Ihrer Frage (1) gesehen:

Die Kräfte von nin der Laufzeit entstehen meist aus for- Schleifen oder ähnlichen Konstrukten. Jede for- Schleife wird wiederum benötigt, da wir als Löser eine Idee hatten, wie wir das Problem auflösen oder über etwas Nützliches indizieren können. Da wir normalerweise nur eine kleine Anzahl von Ideen verwenden, sind die Kräfte tendenziell gering. Es ist schwer sich einen Algorithmus mit 20 verschachtelten for- Schleifen vorzustellen , bei dem wir innerhalb der allerletzten for- Schleife tatsächlich etwas tun, das von allen 20 Indizes abhängt.

Dieses Argument gefällt mir, ist aber ziemlich schwach, weil es sich nur um for- Schleifen handelt. Zum Beispiel kann man leicht eine beliebige Anzahl von verschachtelten for- Schleifen mit Rekursion erstellen , aber dann kann man gute Gründe gegen eine solch bizarre Konstruktion finden. Auf jeden Fall denke ich, dass dieses Argument durch eine Analyse vieler verschiedener Fälle gestärkt werden kann, aber ich präsentiere nur die Idee auf hoher Ebene.

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.