Алгоритм переслідування рухомої цілі


20

Припустимо, у нас є чорна скринька f яку ми можемо запитувати та скидати. Коли ми скинути f , стан fS з f встановлюється на елемент обраної рівномірно випадковим чином з безлічі

{0,1,...,n−1}
де n закріплено і відоме для заданого f . Для запиту f , елемент x (здогад) з
{0,1,...,n−1}
надається, а повернене значення - (fS−x)modn . Крім того, стан fS з f задається значенням fS′=fS±k , де k вибирається рівномірно з
{0,1,2,...,⌊n/2⌋−((fS−x)modn)}

Роблячи однакові випадкові здогадки з кожним запитом, можна було б очікувати, що доведеться зробити n здогадок, перш ніж отримати fS=x , з відхиленням n2−n (заявлене без доказів).

Чи може алгоритм бути спроектований так, щоб зробити краще (тобто зробити меншу кількість здогадок, можливо, з меншою розбіжністю у кількості здогадів)? Наскільки краще це могло б зробити (тобто який оптимальний алгоритм та яка його ефективність)?

Ефективне рішення цієї проблеми може мати важливі наслідки економії витрат на відстріл кролика (обмежений стрибками на круговій доріжці) у темній кімнаті.


Я не впевнений, чи відстріл кроликів - це інформатика.
— Дейв Кларк

6
@DaveClarke Але якщо ви можете застрелити кроликів, ви вирішили проблему зупинки кролів.
— Patrick87

@DaveClarke Не знімають супутників у космос, але обчислення положення супутника є. Це питання не зовсім на відміну від криптоаналізу.
— Жиль "ТАК - перестань бути злим"

Відповіді:


13

Перш за все, я вважаю, що

Крім того, стан з задається значенням , де вибирається рівномірно з f f ′ S = f S ± k k { 0 ,fSffS′=fS±kk

{0,1,2,...,⌊n/2⌋−((fS−x)modn)}

ти насправді маєш на увазі

Крім того, стан з встановлюється у значення , де вибирається рівномірно зfSf ′ S = f S + kfk { - | ⌊ nfS′=fS+kmodnk

{−|⌊n2⌋−((fS−x)modn)|,…,−1,0,1,2,…,|⌊n2⌋−((fS−x)modn)|}

Інакше не зовсім зрозуміло, що завжди має місце і як саме .fS∈{0,...,n−1}fS±k

Використовуючи це, проблема в основному зводиться до "відсутності якнайбільше". Зауважте, що чим ближче ми стріляємо із кроликом, тим більший хміль він робить; в крайньому випадку маємо . Це призводить до рівномірного між та , що в основному повністю рандомізує положення кролика знову. З іншого боку, якщо ми пропустимо якомога зміщенням , кролик насправді зовсім не рухається (!), І чорна скринька насправді нас оновлює. за цим фактом. Тому ми можемо просто розвернутися і застрелити кролика.- ( ⌊ n / 2 ⌋ ± 1 ) ( ⌊ nfS−x=±1modn−(⌊n/2⌋±1)(⌊n/2⌋±1)fS−xmodn=⌊n/2⌋

Нам залишається знайти процедуру відсутності все частіше в кожному кадрі. Я пропоную простий "двійковий пошук". (Я зручно опустити округлення.) Це відбувається приблизно так:

  1. Скиньте і стріляйте у довільному положенні, поки не отримаєте з відповідьЦе вимагає постійної кількості кроків у очікуванні.(fS−xmodn)∈{14n,...,34n}.
  2. Тепер ми знаємо, що попереднє положення , і що воно не рухалося більше ніж кроків в будь-якому напрямку. Це в основному наш пошуковий простір у наступній ітерації, оскільки кролик повинен знаходитись у положенніfSf ′ S ∈14nfS′∈{(fS−14n)modn,...,fS,...,(fS+14n)modn}
  3. Рекурс: стріляйте у положення . З імовірністю позиція на яку кролик стрибнув на кроці 1 і 2, лежить діапазон . У такому випадку ми ще раз наполовину зменшили простір пошуку. Імовірно, кролик не стрибнув у цьому діапазоні, але оскільки ми знаємо, що , у нас є ті ж припущення, що і на кроці (2) і тому нічого не втрачайте.fS−n/2modn1/2fS′{fS−18n,...,fS,...,fS+18n}1/2fS′−xmodn=fS′−fS+n/2modn∈{12n−14n,...,12n+14n}

Кожен крок потребує очікуваного часу, щоб досягти успіху, і наполовину шукає простір пошуку, отримуючи загальну кількість очікуваної кількості кроків.O ( log n )2=O(1)O(log⁡n)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.