Betrachten Sie das folgende Problem.
Dieses Problem ist einfach: Wir können die binäre Suche verwenden, um den Argmax mit -Abfragen zu finden . dh Erstellen Sie einen vollständigen Binärbaum mit Blättern, die den Indizes entsprechen. Beginnen Sie an der Wurzel und gehen Sie wie folgt zu einem Blatt hinunter. Fragen Sie an jedem Knoten den Maximalwert in den rechten und linken Teilbäumen ab und wechseln Sie dann zu dem untergeordneten Element mit der größeren Antwort. Wenn Sie ein Blatt erreicht haben, geben Sie dessen Index aus.
Die folgende verrauschte Version dieses Problems ist in meiner Forschung aufgetaucht.
Es gibt unbekannte Werte . Auf diese kann mit Abfragen zugegriffen werden, in denen eine Menge angegeben und ein Beispiel aus zurückgegeben wird. Das Ziel ist es, so zu identifizieren dass mit so wenig Abfragen wie möglich. (Die Erwartung liegt über der Wahl von , was sowohl von den Münzen des Algorithmus als auch von den verrauschten Abfrageantworten abhängt.)
Angenommen, wir versuchen, dies mit derselben binären Suchstrategie wie zuvor zu lösen (jedoch mit verrauschten Antworten). Es ist ziemlich einfach zu zeigen, dass dies und dass dies im schlimmsten Fall eng ist. Wir können den Fehler auf die gewünschte reduzieren, indem wir jede Abfrage Mal wiederholen und den Durchschnitt verwenden (der die Varianz verringert ). Dies ergibt einen Algorithmus, der Abfragen verwendet.
Gibt es einen besseren Algorithmus? Ich vermute, dass Abfragen ausreichen. Und ich glaube, ich kann eine Untergrenze von beweisen . Außerdem wird das Problem einfach - dh -Anfragen über die binäre Suche - unter dem Versprechen, dass zwischen dem größten Wert und dem zweitgrößten Wert eine -Lücke besteht. Wenn es hilft, können Sie davon ausgehen, dass alle Werte zwischen und .
quelle
Antworten:
Erweiterter Kommentar einer oder zweier Ideen zu einer Untergrenze. Sagen wir (obwohl die beste Wahl unterschiedlich sein kann) und lassen Sie . Ziehen Sie in Betracht, die Eingabe zu zeichnen, indem Sie eine Permutation dieser Werte gleichmäßig zufällig auswählen.B=Θ(logn) {v1,…,vn}={1nB,…,n−1nB,B}
Die Idee sollte sein, dass wir, wenn wir die Indizes aller Werte mit Ausnahme der Werte und festlegen, in der Lage sein sollten, den Unterschied in der Wahrscheinlichkeit des Algorithmus zu zeigen, einen gegenüber dem anderen auszuwählen sehr klein: Der Variationsabstand zwischen den Ergebnissen der Abfragen der Algorithmen ist angesichts der 50-50-Verteilung bei der Zuordnung dieser Werte zu den beiden verfügbaren Indizes und den Ergebnissen einer beliebigen Folge von Abfragen sehr gering.B n−1nB
Dieses Argument gilt für jedes Paar benachbarter Werte, sodass wir eine Reihe von Einschränkungen für die Wahrscheinlichkeit erhalten, mit der der Algorithmus die höchsten, zweithöchsten ... Werte auswählt. Dies ergibt eine obere auf dem erwarteten Wert des Algorithmus gebunden, so dass wir das obere gebunden zu setzen und sehen , was die Anzahl der Abfragen sein.B−1
Ich konnte mit dem obigen Ansatz noch nicht verbessern , aber ich denke, Sie erhalten möglicherweise wenn Sie die Tatsache nutzen können, dass Abfragen nicht bei mehreren Schritten gleichzeitig helfen können. Wenn sich eine Abfrage ändert, wenn wir den höchsten Wert in einen anderen Index verschieben, ändert sich dies eines Tages nicht, wenn wir einen anderen Wert in einen anderen Index verschieben.logn (logn)2
Der differenzielle Datenschutz kann für einen dieser Schritte hilfreich sein. Wenn wir beispielsweise nur an den Fall denken, in dem wir die Position der beiden höchsten Werte vertauschen, ist die "Empfindlichkeit" dieser Abfrage nur und wird dann erweitert Komposition könnte hilfreich sein.Bn
Tut mir leid, das ist halbgebacken, aber ich hoffe, es kann nützlich sein!
quelle