Niedawno grałem ponownie w The Logical Journey of the Zoombinis i próbowałem wdrożyć niektóre algorytmy komputerowe, które mogą rozwiązać różne zagadki. Utknąłem, jak podejść do układanki promowej kapitana Cajuna.
Dla nieznajomych Zoombini jest stworzeniem z 4 atrybutami: włosy, oczy, nos i stopy. Każdy z tych atrybutów ma 5 możliwych wartości; na przykład stopami Zoombini mogą być koła, wrotki, trampki, sprężyna lub śmigło. Oto przykład Zoombini z rozczochranymi włosami, okularami, zielonym nosem i trampkami:
W łamigłówce promowej zadaniem jest zorganizowanie kolekcji 16 Zoombinis na 16 siedzeniach promu. Układ musi być zgodny z zasadą, że Zoombinis, które mają co najmniej jedną cechę, muszą zajmować dowolne dwa sąsiadujące ze sobą prostopadle siedzenia. Jeśli dwa Zoombini mają różne włosy, różne oczy, różne nosy i różne stopy od siebie, mogą nie siedzieć obok siebie.
Rozmieszczenie siedzeń zmienia się w zależności od poziomu; dla konkretności skupmy się na poziomie „Very Hard”, na którym 16 miejsc jest rozmieszczonych w układzie 4 na 4. Oto przykład, w którym 15 Zoombinis zostało legalnie usadzonych, ale ostatecznego Zoombini stojącego na doku nie można umieścić na ostatnim pustym siedzeniu, ponieważ nie dzieliłaby żadnych funkcji z Zoombini po jej prawej stronie:
Jest 16! ≈ 21 bilionów możliwych przypisań Zoombinis do miejsc. Po prostu przeglądanie każdego możliwego zadania, aby sprawdzić, czy jest to zgodne z prawem, nie będzie praktyczne. Jakich heurystyk mógłbym użyć, aby rozsądnie podejść do tego problemu?
Subgraph Isomorphism Problem
. Problem polega na znalezieniu jednego wykresu na innym wykresie. W twoim przypadku podgraf byłby miejscem siedzącym (krawędzie to przylegania), podczas gdy grafem macierzystym byłby zoombinis, gdzie połączenia byłyby obecnością wspólnej cechy. Zauważ, że generalnie problem jest NP-zupełny i zwykle rozwiązuje się go również przez cofanie, jednak w niektórych szczególnych przypadkach (w przypadku których twój wykres może być bardzo dobrze) możliwe są rozwiązania wielomianowe lub nawet liniowe.