Frage

Angesichts einer sortierten Anordnung von Ganzzahlen und einer Zielanzahl, finden Sie die Anzahl der Ereignisse der Zielanzeiger.

Es ist bekannt, dass eine binäre Suche Zeitkomplexität $ O (\ lg n) $ weist, wobei $ n$ ist die Größe des Arrays. Beispielsweise, gegebenenfalls ein Array $ [1,2,3,3,4,5] $ und ein Ziel 3 $,$ Der Algorithmus sollte $ 2 $ zurückgeben, da es zwei Kopien von $ 3 $ im Array gibt.

Frage: Gibt es ein schnellerer Algorithmen, der Zeitkomplexität weniger als $ O (\ lg n) hat? $ Andernfalls gibt es einen Beweis dafür, dass Sie diese $ \ omega (\ lg n) $ ist die theoretische untere Grenze?

War es hilfreich?

Lösung

Das Problem erfordert, dass $ \ omega (\ \ log n) $ Zugriff auf den Speicher, auch wenn Sie versprochen werden, dass die Zielanzahl in höchstem Sicht erscheint. Sie können es mit einem Gegner-Argument beweisen.

sagen Sie, dass das Ziel Null ist. Wenn der erste Zugriff auf das Array von der Mitte übrig ist, antworten Sie auf $ 1 $ und setze die Elemente geistig nach links, um $ - 2, -3, \ ldots $ . Wenn der erste Zugriff rechts in der Mitte ist, antworten Sie auf $ + 1 $ und setze die Elemente geistig auf das Recht auf $ 2 , 3, \ ldots $ .

Angenommen, der erste Zugriff war rechts in der Mitte, sagte Position $ I $ und berücksichtigen Sie den zweiten Zugriff. Wenn es das Recht des ersten Zugriffs ist, wissen Sie bereits, was Sie antworten sollen. Ansonsten gibt es zwei Fälle. Wenn die aufgerufene Position $ J $ weniger als $ I / 2 $ ist, antworten Sie auf $ - 1 $ (und füllen Sie die Elemente links). Wenn es mehr als $ I / 2 $ , antworten Sie $ + 1/2 $ (und füllen Sie ein Elemente nach rechts bis hin zu Position $ i $ ).

auf diese Weise fortgesetzt, in jedem Schritt ist die Anzahl der Positionen, die das Zielelement enthalten könnten, höchstens bei jedem Schritt halbiert. Wenn schließlich nur ein Element immer noch auf dem Spiel steht, ohne dies abzufragen, kann der Algorithmus nicht wissen, ob das Array das Zielelement enthält oder nicht. Es dauert $ \ \ log_2 n $ Schritte, um diesen Schritt zu erreichen.

Das Vorstehende zeigt tatsächlich, dass die binäre Suche optimal für die Suche eines sortierten Arrays ist.

Andere Tipps

Es gibt $ N $ mögliche Antworten.Jeder Vergleich bietet Ihnen höchstens ein bisschen Informationen.Sie benötigen zumindest $ \ lg n $ Informationen, um die Antwort zu beschreiben, sodass Sie mindestens $ \ benötigenLG N $ Vergleiche.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top