У мене є досить унікальна проблема, яку потрібно вирішити, і я сподіваюся, що хтось тут може дати мені деяке уявлення про те, як найкраще вирішити цю проблему.
Проблема: Припустимо, що список з N номерів поділяється між набором учасників таким чином, що жоден учасник насправді не знає жодного з номерів, якими вони поділяються. Усі учасники знають N (розмір списку чисел) та суму всіх чисел у списку, але не більше апріорі.
Працюючи разом, можна порівняти два спільних числа a і b таким чином, щоб учасники дізналися, чи є твердження "a <b" правдивим, але нічого більше. Однак це надзвичайно дорога річ (читай: на повне порівняння може знадобитися багато секунд, можливо, навіть хвилин). Дивіться наприкінці цього допису, щоб дізнатися більше про те, як таке можливо.
Наприкінці дня сторони бажають вивести, які індекси у списку відповідають "найвищим К відсоткам" (К%, який є найбільшим) загальним числом у списку. Звичайно, це можна зробити сортуванням або використанням алгоритму вибору "верхнього К". Однак вони, як правило, використовують жахливу кількість порівнянь, яких слід уникати. (Це або O (n log n), або O (n), з досить великими прихованими константами.)
Інша альтернатива - "здогадуватися" для числа X, для якого (1-K)% менше, ніж X, а K% - більші. Потім ви можете порівняти кожен елемент з X і побачити, скільки більше, а скільки менше. Якщо ви здогадалися, помилилися, перегляньте це, використовуючи щось на зразок двійкового пошуку, доки не сходиться правильне рішення. Це потребує набагато менше порівнянь, якщо ваші здогадки хороші.
Отже, моє питання:
Враховуючи лише N та суму, який найкращий спосіб "передбачити" X?
Of course this will depend on the underlying distribution. For different use-cases the underlying distribution will likely be different but will be known, so I am interested in good solutions for all the common ones (normal, uniform, exponential, perhaps a few others). I would also love to hear suggestions regarding how best to do the "binary-like" search to minimize the number of steps given an assumption about the underlying distribution.
ДОДАТОК: Кожне значення у списку ділиться між учасниками, використовуючи таємну схему обміну Шаміром. Припустимо, є M учасників, а список має довжину N. Тоді i-е число у списку представлене поліномом ступеня M-1 над деяким кінцевим полем F. Постійний - це число, яке є Спільне, всі інші коефіцієнти вибираються рівномірно випадково від F. Частки j-го учасника тоді ,f i f i ( j ) 1 ≤ i ≤ N. Враховуючи цю частку, учасник не має інформації (в інформаційно-теоретичному сенсі) про кількість; насправді жоден належний підмножина учасників не може поєднувати знання, щоб дізнатися будь-яку інформацію про загальні номери. Однак, використовуючи складну безпечну багатосторонню техніку обчислення, можна визначити, чи є одне спільне значення менше іншого, не розкриваючи більше інформації. Ця методика включає всіх учасників, які співпрацюють, тому це так дорого робити, і це потрібно зробити за найменшу кількість можливих разів.