Ich habe ein ziemlich einzigartiges Problem zu lösen und hoffe, dass mir jemand hier einen Einblick geben kann, wie ich es am besten angehen kann.
Problem: Angenommen, eine Liste von N Nummern wird von einer Gruppe von Teilnehmern so geteilt, dass kein einzelner Teilnehmer tatsächlich eine der von ihnen geteilten Nummern kennt. Alle Teilnehmer kennen N (die Größe der Nummernliste) und die Summe aller Nummern auf der Liste, aber nicht mehr a priori.
Durch die Zusammenarbeit ist es möglich, zwei geteilte Zahlen a und b so zu vergleichen, dass die Teilnehmer erfahren, ob die Aussage "a <b" wahr ist, aber nicht mehr. Dies ist jedoch äußerst kostspielig (lesen Sie: Es kann viele Sekunden, vielleicht sogar Minuten dauern, bis ein einzelner Vergleich abgeschlossen ist). Weitere Informationen dazu, wie so etwas möglich ist, finden Sie am Ende dieses Beitrags.
Am Ende des Tages möchten die Parteien ausgeben, welche Indizes in der Liste den "Top-K-Prozent" (die K%, die am größten ist) der geteilten Nummern in der Liste entsprechen. Dies kann natürlich durch Sortieren oder unter Verwendung eines Auswahlalgorithmus "top K" erfolgen. Diese neigen jedoch dazu, sehr viele Vergleiche anzustellen, was vermieden werden sollte. (Dies sind entweder O (n log n) oder O (n) mit ziemlich großen versteckten Konstanten.)
Eine andere Alternative ist das "Erraten" einer Zahl X, für die (1-K)% kleiner als X und K% größer sind. Dann können Sie jedes Element mit X vergleichen und sehen, wie viele größer und wie viele kleiner sind. Wenn Ihre Vermutung falsch war, überarbeiten Sie sie mit einer binären Suche, bis Sie eine korrekte Lösung gefunden haben. Dies erfordert weitaus weniger Vergleiche, wenn Ihre Vermutung gut ist.
Also, meine Frage ist,
Was ist der beste Weg, um X "vorherzusagen", wenn man nur N und die Summe annimmt?
Dies hängt natürlich von der zugrunde liegenden Verteilung ab. Für verschiedene Anwendungsfälle ist die zugrunde liegende Verteilung wahrscheinlich unterschiedlich, sie ist jedoch bekannt. Daher bin ich an guten Lösungen für alle gängigen (normale, einheitliche, exponentielle, möglicherweise einige andere) interessiert. Ich würde auch gerne Vorschläge dazu hören, wie die "binärartige" Suche am besten durchgeführt werden kann, um die Anzahl der Schritte zu minimieren, wenn eine Annahme über die zugrunde liegende Verteilung getroffen wird.
ANHANG: Jeder Wert in der Liste wird unter den Teilnehmern unter Verwendung des geheimen Freigabeschemas von Shamir geteilt. Angenommen , es gibt M Teilnehmer und die Liste wird dann die Länge N, die i-te Nummer auf der Liste durch ein Polynom dargestellt wird vom Grad M-1 über ein endliches Feld F. Der konstante Term von f i die Zahl die geteilt, alle anderen Koeffizienten werden gleichmäßig zufällig aus F. der j-ten Teilnehmers Anteile werden dann gewählt , f i ( j ) , 1 ≤ i ≤ N. Bei diesem Anteil hat der Teilnehmer keine informationstheoretischen Informationen über die Anzahl; In der Tat kann keine richtige Teilmenge der Teilnehmer Wissen kombinieren, um Informationen über die gemeinsam genutzten Nummern zu erhalten. Mithilfe einer ausgeklügelten sicheren Mehrparteien-Berechnungstechnik kann jedoch festgestellt werden, ob ein gemeinsamer Wert kleiner als der andere ist, ohne dass weitere Informationen preisgegeben werden. Diese Technik beinhaltet, dass alle Teilnehmer zusammenarbeiten, weshalb es so kostspielig ist und so selten wie möglich durchgeführt werden sollte.