Algorytm ścigania ruchomego celu


20

Załóżmy, że mamy czarną skrzynkę f którą możemy wyszukać i zresetować. Kiedy przywrócić f stan fS o f ma wartość pierwiastka wybranego losowo równomiernie ze zbioru

{0,1,...,n−1}
gdzie n jest ustalone i znane dla danego f . Do zapytania f , element x (przypuszczenie) z
{0,1,...,n−1}
jest podany, a zwracana wartość to . Ponadto stan dla jest ustawiony na wartość , gdzie jest wybierane losowo równomiernie z(fS−x)modnfSffS′=fS±kk
{0,1,2,...,⌊n/2⌋−((fS−x)modn)}

Wykonując jednolicie losowe domysły przy każdym zapytaniu, należałoby się spodziewać domysłów przed uzyskaniem , z wariancją (podane bez dowodu).nfS=xn2−n

Czy można zaprojektować algorytm, aby działał lepiej (tzn. Robił mniej domysłów, być może z mniejszą zmiennością liczby domysłów)? O ile lepiej mógłby to zrobić (tj. Jaki jest optymalny algorytm i jaka jest jego wydajność)?

Skuteczne rozwiązanie tego problemu może mieć istotne implikacje oszczędnościowe podczas strzelania do królika (ograniczonego do przeskakiwania na okrągłym torze) w ciemnym pokoju.


Nie jestem pewien, czy strzelanie do królików to informatyka.
— Dave Clarke,

6
@DaveClarke Ale jeśli potrafisz strzelać do królików, rozwiązałeś problem zatrzymania królików.
— Patrick87,

@DaveClarke Żadne z nich nie strzela do satelitów w kosmos, ale obliczenia pozycji satelity są. To pytanie nie różni się całkowicie od kryptoanalizy.
— Gilles „SO- przestań być zły”

Odpowiedzi:


13

Po pierwsze, zakładam, że do

Ponadto stan dla jest ustawiony na wartość , gdzie jest wybierane losowo równomiernie zfSffS′=fS±kk

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

masz na myśli

Ponadto stan dla jest ustawiony na wartość , gdzie jest wybierane losowo równomiernie zfSffS′=fS+kmodnk

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

W przeciwnym razie nie jest całkowicie jasne, czy zawsze obowiązuje i jak dokładnie .fS∈{0,...,n−1}fS±k

Dzięki temu problem sprowadza się do „zagubienia jak najwięcej”. Zauważ, że im bliżej strzelamy do królika, tym większy robi chmiel; w skrajnym przypadku mamy . Powoduje to jednolity przeskok między i , co w zasadzie całkowicie ponownie losowo ustawia pozycję królika. Z drugiej strony, jeśli przegapimy tak bardzo, jak to możliwe - przesunięcie o , królik faktycznie się nie rusza (!), A czarna skrzynka faktycznie nas aktualizuje na ten fakt. Dlatego możemy po prostu odwrócić się i zastrzelić królika.fS−x=±1modn−(⌊n/2⌋±1)(⌊n/2⌋±1)fS−xmodn=⌊n/2⌋

Pozostaje nam znalezienie procedury zaginięcia w każdym ujęciu. Proponuję proste „wyszukiwanie binarne”. (Dogodnie pominę zaokrąglenie.) Postępuje z grubsza w następujący sposób:

  1. Zresetuj i strzelaj w dowolnej pozycji, aż z odpowiedźTo wymaga stałej liczby kroków w oczekiwaniu.(fS−xmodn)∈{14n,...,34n}.
  2. Teraz wiemy, że poprzednia pozycja królika i że nie przesunęła się ona bardziej niż kroków w dowolnym kierunku. To w zasadzie zmniejsza o połowę naszą przestrzeń wyszukiwania w następnej iteracji, ponieważ królik musi znajdować się w pozycjifS14nfS′∈{(fS−14n)modn,...,fS,...,(fS+14n)modn}
  3. Recurse: Strzelaj w pozycji . Z prawdopodobieństwem pozycja na którą wskoczył królik w kroku 1 i 2, leży w zakresie . W takim przypadku ponownie zmniejszyliśmy o połowę przestrzeń wyszukiwania. Z prawdopodobieństwem królik nie skoczył w tym zakresie, ale ponieważ wiemy, że , mamy takie same założenia jak w kroku (2) i dlatego nic nie tracicie.fS−n/2modn1/2fS′{fS−18n,...,fS,...,fS+18n}1/2fS′−xmodn=fS′−fS+n/2modn∈{12n−14n,...,12n+14n}

Każdy krok wymaga spodziewanego czasu do sukcesu i zmniejsza o połowę przestrzeń wyszukiwania, dając ogólną oczekiwaną liczbę .2=O(1)O(log⁡n)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.