Създадох 8 решаване на пъзели, използвайки първо търсене в ширина. Сега бих искал да променя кода, за да използва евристика. Ще бъда благодарен ако някой ми отговори на следните два въпроса:
Разрешимост
Как да решим дали пъзел 8 е разрешим? (предвид начално състояние и целево състояние ) Ето какво казва Уикипедия:
Инвариантът е паритетът на пермутацията на всичките 16 квадрата плюс паритетът на разстоянието на таксито (брой редове плюс брой колони) на празния квадрат от долния десен ъгъл.
За съжаление не можах да разбера какво означава това. Беше малко сложно за разбиране. Може ли някой да го обясни на по-прост език?
Най-краткото решение
Като се има предвид евристика, гарантирано ли е да се даде най-краткото решение с помощта на алгоритъма A*? За да бъдем по-конкретни, винаги ли първият възел в отворения списък ще има дълбочина (или броя на движенията, направени толкова дебели), която е минималната от дълбочините на всички възли, присъстващи в отворения списък?
Трябва ли евристиката да отговаря на някакво условие, за да бъде вярно горното твърдение?
Редактиране: Как става така, че една допустима евристика винаги ще осигурява оптималното решение? И как да тестваме дали една евристика е допустима?
Бих използвал евристиката, изброена тук
Manhattan Distance
Linear Conflict
Pattern Database
Misplaced Tiles
Nilsson's Sequence Score
N-MaxSwap X-Y
Tiles out of row and column
За пояснение от Eyal Schneider: