|
|||||||||||||
05-24-2012 06:20 PM - modifié 05-24-2012 06:23 PM
Résolution des Sudoku avec LV.
Ce VI utilise un algorithme de réflexion associé à un algorithme de backtraking. (100% home made)
Il agit comme nous le ferions nous mêmes, par déductions, éliminations, recoupements
et ... retour arrière en cas de "cul de sac".
Les Sudoku "faciles" utilisent peu le backtraking. (pas du tout pour certains)
Plus un Sudoku est difficile, plus il possède de solutions différentes.
Celui que j'ai placé en "valeur par défaut d'entrée" est un exemple de Sudoku très difficile.
Une horreur à résoudre, pour reprendre les termes de certains (je l'ai trouvé sur le Net)
Ce Sudoku possèdent 2756 solutions différentes.
Ce VI trouve la 1ere solution en 23 ms ... et les 2756 en un peu plus de 9 sec (Q6600 - 2.6Ghz)
Possibilités:
input - votre sudoku à résoudre.
trouver une solution (la 1ere)
trouver toutes les solutions.
Faire pause (une fois que vous avez appuyé sur Pause, le petit bouton blanc permet de visualiser les solutions une par une)
Le VI principal est : SUDOKU.vi
Pour le tester rapidement ... lancer le vi et run
1) start : il vous trouve la 1ere solution
2) basculer l'interrupteur sur "all solutions" ... start ... il trouvera les 2756 solutions.
voilou.
Sur ce coup là ... me suis encore bien amusé ![]()
Résolu ! Accéder à la solution.
le 05-25-2012 12:40 AM
Tu devrais créer un groupe sur NI Community pour mettre tes algos/solutions et en discuter.
le 05-25-2012 02:31 AM
Anglais trop pauvre pour me permettre ce genre de chose.
Je comprends quasi tout à la lecture ... mais dans le sens inverse, c'est beaucoup plus "basic".
Je peux poser une question, j'arriverai toujours à me faire comprendre,
mais de là à tenir une discussion sur une sujet ... oops.
Il est vrai que la communauté anglophone est plus "riche" en débats de toutes sortes, Ce n'est pas une critique, mais un constat.
Ce forum francophone est avant tout une plateforme d'assistance entreprise/utilisateurs,
et j'y trouve peu (ou pas ?) de vériatbles amateurs de programmation.
Bien entendu, je ne parle pas de l'ensemble des membres certifiés LV.
Il y a certainement parmis eux des mordus d'algorithmes et de programmation, mais ils semblent ne pas être là pour ça.
Un petit détail significatif .. en dehors des heures de "travail", ce forum est totalement désert ... c'est très curieux.
Le forum anglophone est aussi une plateforme de type assistance, mais on y trouve également autres choses.
Passionné de programmation, mais non utilisateur de LV sur un plan professionnel,
je suis un électron libre sur ce forum, une ambiguïté. un point de Lagrange. ![]()
et pour résumer toute cette papotte, oui, ça me plairait,
mais il me manque un minimum d'aisance avec l'anglais.
05-25-2012 03:07 AM - modifié 05-25-2012 03:10 AM
Il y a une règle pour interdire les groupes non anglophone?
ouadji wrote:Un petit détail significatif .. en dehors des heures de "travail", ce forum est totalement désert ... c'est très curieux.
Je comprends que ceux qui travaillent sous LabVIEW tout ou partie de la journée aient envie de faire autre chose une fois chez eux.
05-25-2012 03:37 AM - modifié 05-25-2012 03:45 AM
Il y a une règle pour interdire les groupes non anglophone?
?
1) mon dieu ... que cela est bien difficle d'exprimer quelque chose ... de simple et de simplement dit.
Je comprends que ceux qui travaillent sous LabVIEW tout ou partie de la journée aient envie de faire autre chose une fois chez eux.
?
2) Je comprends parfaitement également, Il s'agissait d'un simple constat. (voir point 1)
https://decibel.ni.com/content/docs/DOC-6108
J'ai trouvé ceci sur le Net ... joli morceau de code ! très jolie cette solution récursive ...
Mais ... mon algo va 5 fois plus vite. Résolution de la 1ere solution : 138ms contre 27ms.
Cet algo récursif utilise également le backtraking, mais devant une impasse, il essaye "simplement" le nombre suivant.
De mon côté, je calcule les possibilités pour chaque cases et à chaque instant,
et quand je reviens en arrière, je ne passe pas "simplement" au nombre suivant ... mais au nombre suivant "possible" !
le 05-25-2012 03:51 AM
ouadji wrote:
https://decibel.ni.com/content/docs/DOC-6108
J'ai trouvé ceci sur le Net ... joli morceau de code ! très jolie cette solution récursive ...
Mais ... mon algo va 5 fois plus vite. Résolution de la 1ere solution : 138ms contre 27ms.
Cet algo récursif utilise également le backtraking, mais devant une impasse, il essaye "simplement" le nombre suivant.
De mon côté, je calcule les possibilités pour chaque cases et à chaque instant,
et quand je reviens en arrière, je ne passe pas "simplement" au nombre suivant ... mais au nombre suivant "possible" !
Tu devrais lui envoyer un message avec ton algo.
le 05-25-2012 04:03 AM
certainement pas.
Aucun intérêt .. si ce n'est la dynamique du "je"
mais il y a longtemps que j'ai résolu cette question. ![]()
le 05-25-2012 04:07 AM
ouadji wrote:
certainement pas.
Aucun intérêt .. si ce n'est la dynamique du "je"
mais il y a longtemps que j'ai résolu cette question.
Alors là je suis scotché... poster ton algo c'est très bien mais malheureusement il n'y a pas bcp de réponse pour discuter des détails et de l'implémentation, l'auteur de cette autre solution serait certainement heureux de pouvoir analyser ton code et d'en discuter avec toi. Quoi de mieux pour travailler ton anglais ![]()
05-25-2012 04:48 AM - modifié 05-25-2012 04:55 AM
Sur le lien que j'ai donné précédemment (solution récursive),
il y a juste en dessous 4 snippets d'exemples de sudoku très difficiles.
Je prends le 1er, soit celui-ci
et je teste avec mon algo.
Dans mon sous-VI Back and Enqueue ... il y a une constante à "2" (à l'entrée de la 2eme boucle For)
Il faut mettre cette constante à "3" pour résoudre ce sudoku.
Cela correspond, pour chaque case, à la profondeur des solutions possibles prise en compte.
Je suis content, c'est le 1er sudoku que je trouve et qui nécessite "3" de profondeur.
temps pour trouver la 1ere solution : 53ms (230ms avec la solution récursive)
J'ai testé avec "4" ... encore plus vite ... 24ms. (pas d'amélioration avec 5)
voici l'équivalent pour celui qui veut tester avec mon vi.
le 06-13-2012 04:48 AM
Bonjour,
Très bon exemple de code.
Pour information, vous avez déja certainement remarqué une nouvelle catégorie LabVIEW sur notre forum francophone, et concernant la communauté,elle est en cours de construction pour avoir un espace dédié aux français et sera très bientôt en ligne.
Merci
Mon Profil | Confidentialité |
Conditions d'utilisation |
Contacter NI
© 2011 National Instruments Corporation. All rights reserved. | Envoyer cette page
|
||

Envoyer cette page