Bonsoir,
Sujet passionnant...
Si on attaque le problème en
brute-force qui permettrait, abordée différemment de la résolution d'une grille donnée en partie, de produire toutes les grilles valides : il a été établi que c'est de l'ordre de
6.67 x 10²¹...
On se lance dans ce que j'appelle le
hard fun et on se doute et qu'il vaut mieux optimiser ce qui se trouve au coeur de la boucle infernale...
Le problème de savoir s'il existe une solution pour une grille de
sudoku est classé
NP-complet.
En version simplifiée :
Il existe peut-être une méthode simple pour trouver efficacement s'il existe une solution pour une grille de
sudoku : mais elle n'est pas connue à ce jour.
Ce qui est rassurant, c'est qu'il n'existe pas non plus de démonstration que ce soit impossible...
La question qui se pose alors est :
comment optimiser ?
Il semblerait que les
résolveurs, un tant soit peu performants, s'appuient sur le
backtracking (retour légèrement en arrière).
La récursivité est donc de mise.
Donald E. Knuth a publié l'algorithme X, qui s'implante avec des techniques de liste doublement chaînées (
dancing links) et qui se révèle efficace pour ce genre de traitement.
poissonbleu a écrit :Je crois qu'il ne s'agit pas vraiment de maths.
Effectivement, mais on s'approche sérieusement de l'informatique théorique...
www-cs-faculty.stanford.edu/~uno/index.html
arxiv.org/abs/cs/0011047
en.wikipedia.org/wiki/Knuth%27s_Algorithm_X
plop plop a publié un cours sympa sur
openclassrooms qui devrait t'intéresser, dont le titre est
Le backtracking par l'exemple : résoudre un sudoku, qui plus est en français
