Wir wollen einen Algorithmus, der bei einem Array mit der Länge von ganzen Zahlen die minimale Differenz zwischen zwei ganzen Zahlen im Array findet.
Ein solcher Algorithmus besteht darin, das Array zu sortieren und benachbarte Zahlenpaare zu überprüfen. Dies dauert einige Zeit .
Gibt es einen schnelleren Weg, z. B. einen -Algorithmus?
algorithms
arrays
boaten
quelle
quelle
Antworten:
Dies hängt von Ihrem Berechnungsmodell ab. Wenn Sie nur Arithmetik und Vergleiche zulassen (das algebraische Entscheidungsbaummodell), gibt es ein Untergrenze von ) für dieElementunterscheidbarkeit, das Problem der Entscheidung, ob alle Elemente verschieden sind. Ihr Problem ist natürlich noch schwieriger, daher gilt die gleiche Untergrenze.Ω(nlogn)
(Es gibt einige Kleingedruckte: Die Untergrenze gilt nur, wenn der Grad der zu vergleichenden Polynome begrenzt ist. Wenn Sie nur verschiedene Unterschiede , können Sie loslegen. Die algebraische Entscheidung Mit dem Baummodell können Sie auch allgemeinere Polynome in den Eingaben vergleichen, sofern sie einen begrenzten Grad haben.)xi−xj
Es gibt andere Modelle, die möglicherweise eine bessere Leistung erzielen. In einigen Modellen können Sie beispielsweise Ganzzahlen in sortieren . Aber ich kann mir vorstellen, dass Sie die Art von Tricks, die in solchen Algorithmen verwendet werden, nicht zulassen wollen.o(nlogn)
quelle
Wenn Ganzzahlen im Array eine begrenzte Anzahl von Ziffern haben, können Sie ein Array mit dem Radix-Sortieralgorithmus sortieren , dh O (kN), und dann die benachbarten Zahlenpaare (O (N)) überprüfen. Die resultierende Komplexität ist O ((k + 1) N), linear.
quelle