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


20

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

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

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

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

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


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

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

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

Відповіді:


13

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

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

{0,1,2,...,n/2((fSx)modn)}

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

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

{|n2((fSx)modn)|,,1,0,1,2,,|n2((fSx)modn)|}

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

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

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

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

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

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