Ho un problema abbastanza singolare da risolvere e spero che qualcuno qui possa darmi un'idea di come affrontarlo al meglio.
Problema: supponiamo che un elenco di N numeri sia condiviso tra un insieme di partecipanti in modo tale che nessun singolo partecipante conosca effettivamente nessuno dei numeri che condividono. Tutti i partecipanti conoscono N (la dimensione dell'elenco di numeri) e la somma di tutti i numeri nell'elenco, ma niente di più a priori.
Lavorando insieme, è possibile confrontare due numeri condivisi aeb in modo tale che i partecipanti apprendano se l'affermazione "a <b" è vera, ma niente di più. Tuttavia, questa è una cosa estremamente costosa da fare (leggi: potrebbero essere necessari molti secondi, forse anche minuti, per completare un singolo confronto). Vedi la fine di questo post per ulteriori informazioni su come una cosa del genere sia possibile.
Alla fine della giornata, le parti desiderano produrre quali indici nell'elenco corrispondono al "massimo K percento" (il K% che è il maggiore) numeri condivisi nell'elenco. Questo può ovviamente essere fatto ordinando o usando un algoritmo di selezione "top K". Tuttavia, questi tendono ad usare un sacco di confronti terrificanti, che deve essere evitato. (Questi sono O (n log n) o O (n), con costanti nascoste abbastanza grandi.)
Un'altra alternativa è "indovinare" un numero X per cui (1-K)% è più piccolo di X e K% è più grande. Quindi puoi confrontare ogni elemento con X e vedere quanti sono più grandi e quanti sono più piccoli. Se la tua ipotesi era errata, revisionala usando qualcosa come una ricerca binaria fino a quando convergi su una soluzione corretta. Questo richiede molti meno confronti se la tua ipotesi è buona.
Quindi la mia domanda è
Dati solo N e la somma, qual è il modo migliore per "prevedere" X?
Naturalmente questo dipenderà dalla distribuzione sottostante. Per diversi casi d'uso la distribuzione sottostante sarà probabilmente diversa ma sarà conosciuta, quindi sono interessato a buone soluzioni per tutti i comuni (normale, uniforme, esponenziale, forse alcuni altri). Mi piacerebbe anche ricevere suggerimenti su come effettuare al meglio la ricerca "di tipo binario" per ridurre al minimo il numero di passaggi dato un presupposto sulla distribuzione sottostante.
APPENDICE: Ogni valore nell'elenco è condiviso tra i partecipanti usando lo schema di condivisione segreta di Shamir. Supponiamo che ci siano M partecipanti e che la lista sia di lunghezza N. Quindi, l'i-esimo numero nella lista è rappresentato da un polinomio di grado M-1 su un campo finito F. Il termine costante di è il numero che è condivisi, tutti gli altri coefficienti sono scelti in modo uniforme a caso da F. Le azioni del j-esimo partecipante sono quindi ,. Data questa condivisione, il partecipante non ha informazioni (in senso teorico-informativo) sul numero; infatti, nessun sottoinsieme adeguato di partecipanti può combinare le conoscenze per apprendere qualsiasi informazione sui numeri condivisi. Tuttavia, utilizzando una sofisticata tecnica di calcolo multipartitica sicura, è possibile determinare se un valore condiviso è inferiore a un altro senza rivelare ulteriori informazioni. Questa tecnica prevede la collaborazione di tutti i partecipanti, motivo per cui è così costoso da eseguire e dovrebbe essere eseguita il minor numero di volte possibile.