Beispiel eines Algorithmus, bei dem ein Term niedriger Ordnung die Laufzeit für praktische Eingaben dominiert?


10

Die Big-O-Notation verbirgt konstante Faktoren, so dass einige -Algorithmen existieren, die für jede vernünftige Eingabegröße nicht durchführbar sind, weil der Koeffizient für den n- Term so groß ist.O(n)n

Gibt es bekannte Algorithmen, deren Laufzeit jedoch einen o ( f ( n ) ) - Term niedriger Ordnung haben , der so groß ist, dass er bei angemessenen Eingabegrößen die Laufzeit vollständig dominiert? Ich möchte einen Algorithmus wie diesen als Beispiel in einem Algorithmuskurs verwenden, da dies einen guten Grund dafür darstellt, warum die Big-O-Notation nicht alles ist.O(f(n))o(f(n))

Vielen Dank!


Algorithmen, die zuerst eine große Tabelle einrichten und dann für jedes Eingabeelement schnell in der Tabelle nachschlagen? Wenn die Tabelle groß genug ist, muss die Anzahl der Elemente enorm sein, um die Kosten für die Erstellung der Tabelle auszugleichen. Suchmaschinen sind ein Beispiel, wenn die Anzahl der Abfragen ist. n
András Salamon

Ich habe gehört, dass lineare Programmierung so ist. Simplex ist exponentiell, aber in der Praxis schneller als die Polynomalgorithmen.
Jmite

1
Ich kenne keinen Algorithmus, der Ihren Anforderungen entspricht, aber ich würde nach etwas suchen, das höchstens eine lineare Laufzeit hat, da ich darüber hinaus sehr bezweifeln würde, dass die kleineren Begriffe den führenden Begriff für die vernünftigsten Eingaben dominieren könnten. Aber vielleicht passt k-way Mergesort zu Ihren Anforderungen, wenn Sie zum Sortieren von Big Data verwendet werden? Das Problem besteht darin, die sekundären Speicherzugriffe zu minimieren, da diese sehr viel Zeit kosten - obwohl ich nicht ganz sicher bin, ob dies ein geeignetes Beispiel für das ist, was Sie demonstrieren möchten, und ich denke nicht, dass es einfach genug ist, dies zu tun illustrativ sein.
G. Bach

Antworten:


2

Kryptographie ist ein Beispiel, wenn es sich um eine entartete handelt. Zum Beispiel ist das Unterbrechen der AES-Verschlüsselung - alles, was Sie tun müssen, ist, den richtigen Schlüssel unter einer endlichen Zahl zu finden, 2 128 oder 2 192 oder 2 256, abhängig von der Schlüsselgröße (vorausgesetzt, es ist genug Klartext bekannt den Schlüssel eindeutig bestimmen). Selbst 2 128 Operationen würden heute alle Computer (ungefähr eine Milliarde, jede ungefähr eine Milliarde Operationen pro Sekunde) länger als die Lebensdauer des Universums (ungefähr eine Milliarde Milliarden Sekunden) benötigen.O(1)2128219222562128


O(nlgn)


nO(1)

@ G.Bach Der Punkt dieses Beispiels ist, dass es nicht realisierbar ist (was Komplexitätstheorie mit hoher Komplexität assoziiert), obwohl es zeitlich konstant ist (in Bezug auf die Größe des Chiffretextes).
Gilles 'SO - hör auf böse zu sein'

2
O(1)o(1)

1
O(1)

1

Zwei Beispiele kommen aus dem Bereich der parametrisierten Komplexität und der FPT-Algorithmen in den Sinn . Dies ist möglicherweise nicht genau das, wonach Sie suchen, aber hier geht es weiter.

Stellen Sie sich ein Diagrammproblem vor, z. B. 3-FARBEN oder HAM-CYCLE. Beide Probleme können in monadischer Logik zweiter Ordnung ausgedrückt werden und können daher in linearer Zeit von Graphen mit begrenzter Baumbreite entschieden werden. Dies ist ein Ergebnis von Bruno Courcelle , aber der resultierende Algorithmus ist alles andere als praktisch.

O(p9p/2)LO(p2pL)pL


2
O(n)o(n)

0

In gewissem Zusammenhang mit Ihrer Frage stehen Algorithmen, von denen bekannt ist, dass sie theoretisch eine gute Leistung aufweisen, die jedoch aufgrund der Unpraktikabilität bei kleineren Instanzen nicht für echte Probleme verwendet werden. Mit anderen Worten, wie Sie es wünschen, ist die "beworbene Leistung" theoretisch nur für große Eingaben möglich, die in praktischen Anwendungen nicht zu sehen sind. Dies spiegelt sich manchmal in den Big-Oh-Schätzungen wider, manchmal nicht genau. Einige Algorithmen haben eine gute theoretische "Leistung", sind jedoch logisch sehr komplex und wurden noch nie von irgendjemandem implementiert. Daher ist die "Leistung" bei praktischen Instanzgrößen nicht einmal bekannt, z. B. beim Maximum Flow- Problem.


Aber sind diese unpraktisch, weil die Terme niedriger Ordnung dominieren oder weil die Konstanten der Terme hoher Ordnung schlecht sind?
David Richerby

entweder oder eine Kombination wäre es jeweils schwierig zu isolieren. effektiv / praktisch ist es der gleiche Effekt.
vzn

-1

Das ist eine Art Witz, aber es hat eine ernsthafte Seite ...

O(nlogn)O(n2)


1
Nein, das ist anders. Quicksort ist in der Praxis nützlich, da es keinen quadratischen Begriff für typische Eingaben gibt, egal wie groß die Größe ist. Wenn die Wahl des Pivots für ein Datenlayout schlecht ist, zeigt Quicksort auch bei kleinen Eingaben ein quadratisches Verhalten.
Gilles 'SO - hör auf böse zu sein'
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.