Алгоритми за решавање судокуа — разлика између измена

Садржај обрисан Садржај додат
мНема описа измене
мНема описа измене
Ред 50:
Мане ове методе су да је поприлчно спора кад се упореди са компјутерским методама решавања које су осмишљене према дедуктивним методама.
 
Алгоритам “грубе силе” долзидолази до празних ћелија по неком реду, редом их попуњавајућипопуњава бројевима који одговарају, или бектрекингом (уклањањем неодгговарајућихнеодговарајућих избора) док не дође до краја. На пример, програм исцрпне претраге ће решити слагалицу уметањем цифре “1” у прву ћелију и проверавањем да ли је дозвољено да се она ту нађе. При проверавању да ли има преступа, сазнаје се да “1” није дозвољено, па се зато вредност повећава на ”2”. Ако се пронађе ћелија где ниједна од 9 цифара није дзвољена, алгоритам оставља ту ћелију празну и враћа се на претходну ћелију. Тада се вредност у тој ћелији повећава за 1. Алгоритам се понавља све док не нађе одговарајуће решење за сву 81 ћелију.<ref>[http://www.geeksforgeeks.org/backtracking-set-7-suduku/ Geeks For Geeks Back Tracking Sudoku Algorithm]</ref><ref>[http://www.norvig.com/sudoku.html]</ref>
 
===Насумична претрага/метода оптимизације===
Судоку се може решити користећи насумчненасумичне методе претраге.<ref name="Lewis, R (2007) pp 387-401">Lewis, R (2007) ''Metaheuristics Can Solve Sudoku Puzzles'' Journal of Heuristics, vol. 13 (4), pp 387-401.</ref><ref name="Perez, Meir and Marwala, Tshilidzi (2008) ">Perez, Meir and Marwala, Tshilidzi (2008) ''Stochastic Optimization Approaches for Solving Sudoku'' arXiv:0805.0697.</ref> Пример овог приступа је да:
# Насумично одреди бројеве празним ћелијаама у мрежи
# Израчуна број грешака
# “Промеша” ове унете бројеве по мрежи док се број грешака не сведе на нулу
 
Решење слагалице ће тада бити пронађено. Приступи мешању бројева укључују [[симулационо прекаљивање]], [[генетички алгоритам]] и [[табу претраживање]]. Насумично засновани оптимизовани алгоритми знају да буду веома брзи, иако можда нису брзи као неке логички засноване технике. За разлику од потоњихдругих, оптимизациони алгоритми не захтевају да проблеми буду обавезно логички решиви, тако им давајући потенцијал да реше шири распон проблемских случајева. Алгоритми дизајнирани за графичко бојење исто знају да раде веома добро са Судоку слагалицама.<ref name="Lewis2015">Lewis, R. ''A Guide to Graph Colouring: Algorithms and Applications''. Springer International Publishers, 2015.</ref>
 
Такође је могуће да Судоку прикажемо као проблем [[Целобројно програмирање|целобројнох линеарног програмирања]]. Изгледа да су такви приступи ближи брзом проналажењу решења и онда могу да користе рачвање пред крај. [[Симплекс алгоритам]] делује као да може да поднесе веома добро ситуације без решења или са вишеструким решењима.
 
===Ограничено програмирање===
Судоку је ограничен проблем. [http://4c.ucc.ie/~hsimonis/sudoku.pdf "Судоку као ограничен проблем"] описује многе разумне алгоритме приступачне у формуформи ограничења који се могу применити на моделмоделу и решити проблем. Неки модератори ограничења обухватају пример како подесити и решити Судоку проблеме.<ref>[http://jacop.osolpro.com "JaCoP"]</ref><ref>[https://github.com/Rhollor/SudoKuSolver "Sudokusolver"]</ref> Програм ограничења подешавањем и решавањем ће код већине случајева имати мање од 100 редова кода. Ако код користи јак разуман алгоритам, укључивање претраге је потребно само за најтеже слагалице.
 
==Време рачунања==
Ред 69:
 
==Празне Судоку мреже==
Иако Судоку мреже које долазе са неким од ћелија које су унапред попуњенимпопуњене,решавање могуможе бити веома изазовнеизазовно, празне Судоку ћелије се заправо могу веома брзо решити. Можда је најлакши начин да се то спроведе је да се произведе коренско решење, које се може достићи коришћењем следећег једноставног [[Полиномијално време|полиномијалног временског алгоритма]].
 
За стандардну n2 x n2 (9 x 9) мрежу, овај алгоритам (еквивалентна имплементација у [[Јава (програмски језик)|Јави]] и [[Haskel (programski jezik)|Хаскелу]]) је следећи: