Przeskocz do treści

Delta mi!

Informatyczny kącik olimpijski

Opóźnione wyszukiwanie

Tomasz Idziaszek

o artykule ...

  • Publikacja w Delcie: październik 2013
  • Publikacja elektroniczna: 01-10-2013
  • Wersja do druku [application/pdf]: (66 KB)

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ę”...

obrazek

Organizatorzy wybrali pewną liczbę naturalną math  z przedziału math a my mamy ją wyznaczyć, zadając pytania „jak się ma wybrana liczba do liczby math”, na które dostajemy odpowiedź, że jest ona mniejsza, większa lub równa math Zadanie ma jednak dodatkowe urozmaicenie: odpowiedź na math-te pytanie dostajemy dopiero po zadaniu pytania numer math (w szczególności, pierwszą odpowiedź po zadaniu math pytań). Ponieważ za każde zadane pytanie naliczane są nam punkty karne, chcemy znaleźć liczbę math  za pomocą jak najmniejszej liczby pytań. Zabawa kończy się, gdy usłyszymy odpowiedź „wybrana liczba jest równa math”. Warto dodać, że chcemy zminimalizować liczbę pytań zadanych w pesymistycznym przypadku – organizatorzy nie muszą ustalać math  zawczasu, mogą swą decyzję opierać na naszych pytaniach tak, aby wymusić na nas zadanie jak największej ich liczby.

Dla math rozwiązanie jest znane: używamy wyszukiwania binarnego. Każde pytanie dzieli przedział, w którym może znajdować się math  na pół, potrzebujemy zatem math pytań. Pożyteczne będzie przyjrzenie się tej strategii bliżej. Załóżmy, że mamy ustaloną liczbę pytań, math Zastanówmy się, jaka jest największa długość przedziału math dla której math pytań wystarczy do wyznaczenia math  Oznaczmy tę liczbę przez math

Oczywiście, math bo musimy zadać jedno pytanie o liczbę 1, by dostać odpowiedź, że zgadliśmy poprawnie. Załóżmy, że mamy math oraz przedział math i że zadajemy pierwsze pytanie o liczbę math Mamy do rozważenia trzy przypadki: albo mamy szczęście, math  i gra się kończy, albo math  zostaje nam math pytań i wiemy, że szukana liczba znajduje się w przedziale math albo math  mamy math  pytań i przedział math Ponieważ math pytań wystarczy dla przedziału o długości math więc zmieścimy się w limicie pytań, o ile math Opłaca nam się, żeby przedziały math i  math były jak najdłuższe, więc możemy przyjąć dowolne math oraz math Zatem

display-math

Rozwiązując tę rekurencję, dostajemy, że math co dla „klasycznych” 20 pytań daje nam przedział długości math

Dla math możemy zastosować trywialną strategię: po każdym pytaniu czekamy na odpowiedź, zadając math „głupich” pytań. Taka strategia wymaga zadania math pytań. Nie jest zbyt dobrze, gdyż w ten sposób 20 pytań pozwoli nam dla math jedynie na przedział długości math Zdradzimy zaś, że optymalna strategia daje math Musimy więc umieć wyznaczać kolejne pytania, zanim dostaniemy odpowiedź na poprzednie.

Rozważmy przypadek math Załóżmy, że pierwsze dwa pytania są o liczby math oraz math (bez straty ogólności math). W tym momencie znamy już odpowiedź na pierwsze z tych pytań. Jeśli więc gra się nie skończyła, to albo math  i wtedy pytanie o  math jest stracone (wiemy na pewno, że math ), zatem mamy math pytań i przedział math Jeśli zaś math  to zostajemy z przedziałem math w którym zadaliśmy już jedno pytanie math Mogliśmy więc przewidzieć tę sytuację i użyć jako math pierwszego pytania z optymalnej strategii dla math i przedziału długości math Dzięki temu nie marnujemy tego pytania i w sumie zostaje nam math pytań. Stosując rozumowanie jak poprzednio, mamy

display-math

Ponieważ math więc rozwiązaniem rekurencji jest math gdzie math jest math-tą liczbą Fibonacciego. Zatem strategia postępowania dla math jest następująca: zadajemy pytanie, dzieląc najdłuższy przedział w złotej proporcji.

Podobną strategię możemy zastosować dla math Zadajemy math pytań: pierwsze o liczbę math a następne o coraz większe liczby zgodnie z optymalną strategią dla przedziału długości math Jeśli gra się nie skończyła, to albo math  i mamy math  pytań na przedziale długości math albo math  i mamy math  pytań na pozostałej części przedziału. Zatem

display-math

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 math zanim sprawdzili zadania z tygodnia math – zastosowali zatem powyższy algorytm dla math


Do czytania
[1]
A. Ambainis, S.A. Bloch, D.L. Schweizer, Delayed Binary Search, or Playing Twenty Questions with a Procrastinator, SODA 1999