Informatyczny kącik olimpijski
Opóźnione wyszukiwanie
W tym kąciku zajmiemy się zadaniem Delayed search, które pojawiło się w 2004 r. w konkursie Internet Problem Solving Contest, organizowanym co roku przez Słowaków. Zadanie jest wariacją na temat znanej zabawy „zgadnij, o jakiej liczbie myślę”...
Organizatorzy wybrali pewną liczbę naturalną z przedziału a my mamy ją wyznaczyć, zadając pytania „jak się ma wybrana liczba do liczby ”, na które dostajemy odpowiedź, że jest ona mniejsza, większa lub równa Zadanie ma jednak dodatkowe urozmaicenie: odpowiedź na -te pytanie dostajemy dopiero po zadaniu pytania numer (w szczególności, pierwszą odpowiedź po zadaniu pytań). Ponieważ za każde zadane pytanie naliczane są nam punkty karne, chcemy znaleźć liczbę za pomocą jak najmniejszej liczby pytań. Zabawa kończy się, gdy usłyszymy odpowiedź „wybrana liczba jest równa ”. Warto dodać, że chcemy zminimalizować liczbę pytań zadanych w pesymistycznym przypadku – organizatorzy nie muszą ustalać zawczasu, mogą swą decyzję opierać na naszych pytaniach tak, aby wymusić na nas zadanie jak największej ich liczby.
Dla rozwiązanie jest znane: używamy wyszukiwania binarnego. Każde pytanie dzieli przedział, w którym może znajdować się na pół, potrzebujemy zatem pytań. Pożyteczne będzie przyjrzenie się tej strategii bliżej. Załóżmy, że mamy ustaloną liczbę pytań, Zastanówmy się, jaka jest największa długość przedziału dla której pytań wystarczy do wyznaczenia Oznaczmy tę liczbę przez
Oczywiście, bo musimy zadać jedno pytanie o liczbę 1, by dostać odpowiedź, że zgadliśmy poprawnie. Załóżmy, że mamy oraz przedział i że zadajemy pierwsze pytanie o liczbę Mamy do rozważenia trzy przypadki: albo mamy szczęście, i gra się kończy, albo zostaje nam pytań i wiemy, że szukana liczba znajduje się w przedziale albo mamy pytań i przedział Ponieważ pytań wystarczy dla przedziału o długości więc zmieścimy się w limicie pytań, o ile Opłaca nam się, żeby przedziały i były jak najdłuższe, więc możemy przyjąć dowolne oraz Zatem
Rozwiązując tę rekurencję, dostajemy, że co dla „klasycznych” 20 pytań daje nam przedział długości
Dla możemy zastosować trywialną strategię: po każdym pytaniu czekamy na odpowiedź, zadając „głupich” pytań. Taka strategia wymaga zadania pytań. Nie jest zbyt dobrze, gdyż w ten sposób 20 pytań pozwoli nam dla jedynie na przedział długości Zdradzimy zaś, że optymalna strategia daje Musimy więc umieć wyznaczać kolejne pytania, zanim dostaniemy odpowiedź na poprzednie.
Rozważmy przypadek Załóżmy, że pierwsze dwa pytania są o liczby oraz (bez straty ogólności ). W tym momencie znamy już odpowiedź na pierwsze z tych pytań. Jeśli więc gra się nie skończyła, to albo i wtedy pytanie o jest stracone (wiemy na pewno, że ), zatem mamy pytań i przedział Jeśli zaś to zostajemy z przedziałem w którym zadaliśmy już jedno pytanie Mogliśmy więc przewidzieć tę sytuację i użyć jako pierwszego pytania z optymalnej strategii dla i przedziału długości Dzięki temu nie marnujemy tego pytania i w sumie zostaje nam pytań. Stosując rozumowanie jak poprzednio, mamy
Ponieważ więc rozwiązaniem rekurencji jest gdzie jest -tą liczbą Fibonacciego. Zatem strategia postępowania dla jest następująca: zadajemy pytanie, dzieląc najdłuższy przedział w złotej proporcji.
Podobną strategię możemy zastosować dla Zadajemy pytań: pierwsze o liczbę a następne o coraz większe liczby zgodnie z optymalną strategią dla przedziału długości Jeśli gra się nie skończyła, to albo i mamy pytań na przedziale długości albo i mamy pytań na pozostałej części przedziału. Zatem
Okazuje się, że powyższa strategia jest optymalna. Dowód tego faktu jest nieco techniczny, zainteresowanych Czytelników odsyłamy do pracy [1]. Jej autorzy podają również „życiowy” przykład zastosowania „opóźnionego” wyszukiwania binarnego. Chcieli oni mianowicie wyznaczyć optymalny poziom trudności prac domowych dla grupy studentów, zadając im prace i analizując ich wyniki (tzn. sprawdzając, czy sobie z nimi poradzili, czy nie). Z uwagi jednak na organizację zajęć studenci dostawali nową pracę domową co tydzień, a mieli ją oddać na następnych zajęciach. Zatem profesorowie musieli przygotować zadania na zajęcia w tygodniu zanim sprawdzili zadania z tygodnia – zastosowali zatem powyższy algorytm dla