erscheint die Frage ist:zu finden, wenn es eine Zahl in einem Array ist, das mehr als n/8-mal
einen Algorithmus beschreiben, die in O (n) Zeit finden, wenn es in einer Reihe von n Zahlen, einem Nummer, die mehr als n/8 mal erscheint.
Jetzt habe ich die Antwort, die ist:
Wir werden an Orten, für die Zahlen Wählen Sie tun: n/9,2 * n/9,3 * n/9, ..., 8 * n/9, und dann prüfen, ob einer dieser 8 Kandidaten mindestens n/8 mal erscheint.
Aber ich verstehe nicht, warum dieser Algorithmus arbeiten würde. B. das folgende Array: [3,3,1,3,2,3,4,3,5,3,6,3,7,3,8,3,9,3] .
Also hier n = 18, und wenn für diesen Algorithmus die Kandidaten wären 1,2,4,5,6,7,8,9 und wenn wir überprüfen, ob diese Zahlen mindestens n/8 mal erscheinen Die Antwort wird nein sein, aber für 3 wäre die Antwort ja.
So verstehe ich nicht, warum dieser Algorithmus korrekt ist ...
Nur sinnvoll, wenn die Wiederholungen benachbart sind. – karakfa
Können Sie mir helfen, einen korrekten Algorithmus zu finden? – ChikChak
Das ist eine * Hausaufgabenfrage, * nicht wahr? Wie Sie sehe ich keinen Grund, warum die "Antwort", die Sie haben, tatsächlich funktionieren würde, * es sei denn, * der Vektor wurde bekanntermaßen sortiert. ** Ich hoffe, dass Sie eine gut abgedruckte Kopie von Dr. Djikstras * Sortieren und Suchen * auf dem Bücherregal in der Nähe ... –