Sekwencja Józefa Flawiusza
Opis: Są ludzie stojący w kręgu czekający na wykonanie. Odliczanie zaczyna się w pewnym punkcie okręgu i krąży wokół okręgu w ustalonym kierunku. W każdym kroku pewna liczba osób jest pomijana i wykonywana jest następna osoba. Eliminacja przebiega wokół okręgu (który staje się coraz mniejszy w miarę usuwania wykonywanych ludzi), dopóki pozostanie tylko ostatnia osoba, która otrzyma wolność.
I Googled to „problem Josephus” i hit Wikipedii daje mi rozwiązanie do programowania dynamicznego:f(n,k)=((f(n-1,k)+k-1) mod n)+1, with f(1,k)=1
, ale to daje tylko ostatniego ocalałego. Jak mogę uzyskać sekwencję ludzi wykonanych? Powiedz, p (5, 3) = {3,1,5,2,4}.
Jest teżO(nlogn)
rozwiązanie zamiast aO(nk)
jeden?