Sudoku: ciekawostka

https://xpil.eu/QJq

Technik rozwi膮zywania Sudoku jest ca艂a chmara. Od najprostszych, typu Naked Single (inaczej: Naked Candidate) czy Single Position, poprzez bardziej zaawansowane typu Naked Pairs czy X-Wings, a偶 po ca艂kiem egzotyczne typu Forcing Chains czy Nishio. Ka偶dy, kto interesowa艂 si臋 kiedykolwiek tematem, zna przynajmniej niekt贸re z tych nazw, a najtwardsi z Klubu Klozetowych Rozwi膮zywaczy Sudoku by膰 mo偶e nawet pr贸bowali opanowa膰 te bardziej skomplikowane.

Tymczasem okazuje si臋, 偶e z punktu widzenia komputer贸w istnieje tylko jeden uniwersalny algorytm rozwi膮zywania 艂amig艂贸wek Sudoku i w zupe艂no艣ci sprawdza si臋 on dla wszystkich bez wyj膮tku plansz (nawet tych nieprawid艂owych, z wieloma mo偶liwymi rozwi膮zaniami). Jest to ni mniej ni wi臋cej tylko Random Search. Czyli pr贸bujemy kolejnych cyferek w kolejnych polach, a偶 trafimy na w艂a艣ciwe rozwi膮zanie.

U偶ywaj膮c wyszukiwania losowego, 99% wszystkich plansz mo偶e by膰 rozwi膮zanych w czasie poni偶ej jednej dziesi膮tej sekundy. Sporadycznie trafiaj膮 si臋 plansze wymagaj膮ce czasu w okolicach 1 sekundy. Bardzo, ale to bardzo rzadko trafiaj膮 si臋 plansze z czasem rz臋du powy偶ej stu sekund.

Jedyna wymagana do szybkiej pracy algorytmu optymalizacja jest taka, 偶e nale偶y losowe cyferki wybiera膰 zawsze na polach z jak najmniejsz膮 liczb膮 mo偶liwych kandydat贸w, co minimalizuje szanse na eksponencjaln膮 "eksplozj臋" drzewa.

Je偶eli kto艣 jest zainteresowany technicznymi szczeg贸艂ami (w tym r贸wnie偶 konkretn膮, bardzo pomys艂ow膮 i niezwykle kr贸tk膮 implementacj膮 w Pythonie), zapraszam do artyku艂u autorstwa Petera Norviga (po angielsku): http://norvig.com/sudoku.html

 

https://xpil.eu/QJq

Leave a Comment

Komentarze mile widziane.

Je偶eli chcesz do komentarza wstawi膰 kod, u偶yj sk艂adni:
[code]
tutaj wstaw sw贸j kod
[/code]

Je偶eli zrobisz liter贸wk臋 lub zmienisz zdanie, mo偶esz edytowa膰 komentarz po jego zatwierdzeniu.