|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 8 ![]() |
Bonjour, si je crée cette nouvelle discussion, c'est parce que j'ai un petit problème de permutations. Je tourne en rond depuis plusieurs jours sans trouver de solution à mon problème.
Je m'explique, je programme plusieurs méthodes de résolutions de gratte-ciel. Et c'est avec la méthode brute que je bloque. Je représente ma grille à l'aide d'une liste de sous-listes. -->ex int[][] liste = {{1,2,3,4,5},{2,3,4,5,1},{3,4,5,1,2},{4,5,1,2,3},{5,1,2,3,4}}; J'aimerai trouver toutes les grilles de gratte-ciel possibles. Pour cela, je fais les permutations de toutes les colonnes (=toutes les sous-listes) et de toutes les lignes (=toutes le i ème élément de chaque sous liste avec le j ème élément de ces dernière) Cependant lorsque j'effectue mon programme, je ne trouve pas toutes les solutions. Le voici: Code :
|
||
|
|
00
|
|
|
#2 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 818 ![]() |
Bonjour,
Citation:
Pour ce qui est de ton problème, il faut s'entendre sur la notion de "toutes les grilles de gratte-ciel possibles". Ta stratégie ne permet de trouver que les grilles qui sont obtenues par permutation. Il n'y a donc pas "toutes" les grilles possibles. Par exemple, si on applique des permutations sur une grille {A,B} {C,D} on aura toujours A et B qui seront sur une meme ligne. On ne pourra donc jamais avoir la grille {A,D} {B,C}
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 8 ![]() |
Bonjour,
Oui, cependant, les grilles de gratte-ciel respectent aussi les règles de celles des sudokus. C'est- à-dire chaque nombre doit figurer une et une seule fois dans chaque colonne et ligne. (ex:http://www.prise2tete.fr/forum/viewtopic.php?id=9209) Par conséquent changer l'ordre d'une seule ligne/colonne est interdite. Et c'est pourquoi je représente initialement ma grille en respectant les règles du sudoku (int[][] liste = {{1,2,3,4,5},{2,3,4,5,1},{3,4,5,1,2},{4,5,1,2,3},{5,1,2,3,4}}; ). Je n'ai donc plus qu'à faire les permutations des permutations... |
|
|
00
|
|
|
#4 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 818 ![]() |
Citation:
4 5 6 7 8 9 Si on suppose que la grille ci-dessus est valide, alors celle ci-après est également valide (c'est une symétrie ligne/colonne): 1 4 7 2 5 8 3 6 9 Pourtant, on ne peut pas obtenir la seconde grille à partir de la première par permutation. En effet, avec les permutations on aura toujours 1 2 et 3 sur une même ligne.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 8 ![]() |
sauf que les nombres à utiliser sont de 1 à n, n étant la taille de la grille.
Ex: pour n=3, int[][] grille={{1,2,3},{2,3,1},{3,2,1}}; --> 1 2 3 2 3 1 3 1 2 |
|
|
00
|
|
|
#6 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 818 ![]() |
Citation:
S'il s'agit de faire toutes les permutations row/column possibles, je propose de faire une approche "divide & conquer": on fait toutes les permutations de la 1ere ligne et de la 1ere colonne, puis on ré-applique le principe sur le tableau (N-1)x(N-1) restant. Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 8 ![]() |
cette méthode ne marche pas, je devrais obtenir 14400 possibilités ( (5!)² ). Or il n'y en a que 1'313.
Car on doit fait une permutation des lignes puis toutes les permut des colonnes, annuler les permut des colonnes si l'on a pas trouvé la bonne réponse et faire la permutation des lignes suivante, puis toutes les colonnes ...etc Voici le code que j'ai actuellement, j’obtiens bien 14400 possibilités, cependant certaines réapparaissent plusieurs fois --> il me manque certaines possibilités. Code :
Vuedepuisdonnee() regarde le nombre de gratte-ciel vus depuis chaque point externe à la grille Penalites est la différence entre la donnée et la vuedepuisdonnees (==0 si la solution à été trouvée |
||
|
|
00
|
|
|
#8 | |||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 818 ![]() |
Citation:
![]() En gros, tu veux construire toutes les grilles possibles en changeant l'ordre des lignes et colonnes existantes. Pour cela, le plus simple c'est d'utiliser les permutations de la liste {0,1,2,3,4} et de s'en servir comme index (=bijection) pour construire la nouvelle grille. Code java :
Pour itérer toutes les permutations d'une liste, tu as plusieurs méthodes. Par exemple celle-ci: Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||||
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 8 ![]() |
{{1,5,4,3,2},{2,3,5,1,4},{5,2,3,4,1},{4,1,2,5,3},{3,4,1,2,5} |
|
|
00
|
|
|
#10 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 818 ![]() |
Citation:
Citation:
C'est comme pour les grilles de sudoku 9x9. Les operations de permutations permettent de trouver des grilles équivalentes (=sur la même orbite), mais pas de nouvelles grilles (=sur une orbite différente)
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 8 ![]() |
merci quand même et bonne soirée |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com