Załóżmy, że Mario chodzi po powierzchni planety. Jeśli zacznie chodzić ze znanego miejsca, w ustalonym kierunku, na określoną odległość, jak szybko możemy ustalić, gdzie się zatrzyma?
Bardziej formalnie, załóżmy, że otrzymujemy wypukły politop w 3-przestrzeni, punkt początkowy na powierzchni , wektor kierunku (w płaszczyźnie pewnej ścianki zawierającej ) i odległość . Jak szybko możemy ustalić, który aspekt Mario zatrzyma się w środku? (Z technicznego punktu widzenia załóżmy, że jeśli Mario wejdzie w wierzchołek , natychmiast eksploduje; na szczęście prawie nigdy tak się nie dzieje.)s P v p ℓ P P
Lub jeśli wolisz: załóżmy, że otrzymamy wcześniej polytop , punkt źródłowy i wektor kierunku . Po wyprzedzającym, jak szybko możemy odpowiedzieć na pytanie dla danej odległości ?s v ℓ
Łatwo jest wyśledzić ślady Mario, szczególnie jeśli ma tylko trójkątne ścianki. Ilekroć Mario wejdzie w aspekt przez jedną z jego krawędzi, możemy w czasie określić, przez którą z dwóch pozostałych krawędzi musi przejść. Chociaż czas działania tego algorytmu jest linią prostą w szeregu przejściach krawędzi, jest nieograniczona w funkcji wielkości wejściowych, ponieważ odległość może być dowolnie większy niż średnica . Czy możemy zrobić lepiej?O ( 1 ) ℓ P
(W praktyce długość ścieżki nie jest właściwie nieograniczona; istnieje górna granica globalna pod względem liczby bitów potrzebnych do reprezentacji danych wejściowych. Ale naleganie na liczby całkowite rodzi pewne dość nieprzyjemne problemy numeryczne - Jak obliczyć dokładnie, gdzie zatrzymać? - więc trzymajmy się prawdziwych danych wejściowych i dokładnej prawdziwej arytmetyki).
Czy jest coś nietypowego na temat złożoności tego problemu?
Aktualizacja: W świetle komentarza Julkiewicza wydaje się jasne, że czas działania rzeczywistej pamięci RAM ograniczony wyłącznie w kategoriach (złożoność polytopa) jest niemożliwy. Rozważ szczególny przypadek dwustronnego kwadratu jednostkowego , w którym Mario zaczyna od i idzie w kierunku . Mario zatrzyma się z przodu lub z tyłu kwadratu w zależności od parzystości liczby całkowitej . Nie możemy obliczyć funkcję piętro w stałym czasie rzeczywistym na RAM, chyba że jesteśmy szczęśliwi zrównując PSPACE i P . Ale możemy obliczyć w[ 0 , 1 ] 2 ( 0 , 1 / 2 ), ( 1 , 0 ) ⌊ ℓ ⌋ ⌊ ℓ ⌋ O ( log ℓ ) n log £ -lczas przez wyszukiwanie wykładnicze, co stanowi wykładniczą poprawę w stosunku do naiwnego algorytmu. Czas wielomianem i zawsze osiągalne?