Besoin d'aide [Générer un permutoèdre]

Besoin d'aide [Générer un permutoèdre] - C++ - Programmation

Marsh Posté le 27-05-2003 à 23:05:45    

Salut les codeurs,
j'ai un projet en C à rendre la semaine prochaine et je n'ai malheureusement toujours pas trouvé la solution  :fou: , ce serait sympa si vous pouviez m'aider svp ....  
 
Voilà les questions!!!
 
1. Générer un permutoèdre *
2. Une fois le permutoèdre généré, votre programme devra pouvoir retrouver la longueur d'une permutation donnée, ainsi qu'un chemin de l'identité vers cette permutation ( i.e. la décomposition de la permutation en produit de transpositions, plus les permutaions intermédiaires).
 
 
* On appellera "permutoèdre" un graphe orienté dont l'ensemble de sommets est constitué de toutes les permutations d'une taille donnée, et dans lequel on mettra un arc entre deux permutations, si la deuxième peut être obtenue à partir de la première en la multipliant juste par une transposition élémentaire, et sa longueur est supérieure à celle de la première.
 
 
Merci pour toute aide !!!!!!!!!!


Message édité par Fornium le 28-05-2003 à 00:11:58
Reply

Marsh Posté le 27-05-2003 à 23:05:45   

Reply

Marsh Posté le 27-05-2003 à 23:50:48    

Ahlàlà, le rush... On arrive à une semaine de l'échéance, et oh, on tombe nez à nez avec la feuille du projet :whistle:  
 
Sérieusement, déjà, j'ai rien pigé au permutoèdre, et qui va s'amuser à programmer ce truc ? (si ce n'est toi of course :d)
 
mets y toi, non seulement tu en retireras de la satisfaction :love: mais également de l'expérience ! :whistle:
 
edit : au fait, tu es en quoi ? Je viens de relire le coup du permutoèdre et j'y pige vraiment que dalle !


Message édité par HORNY-Grandcornu le 27-05-2003 à 23:58:08
Reply

Marsh Posté le 28-05-2003 à 00:17:38    

HORNY-GRANDCORNU a écrit :

Ahlàlà, le rush... On arrive à une semaine de l'échéance, et oh, on tombe nez à nez avec la feuille du projet :whistle:  
 
Sérieusement, déjà, j'ai rien pigé au permutoèdre, et qui va s'amuser à programmer ce truc ? (si ce n'est toi of course :d)
 
mets y toi, non seulement tu en retireras de la satisfaction :love: mais également de l'expérience ! :whistle:
 
edit : au fait, tu es en quoi ? Je viens de relire le coup du permutoèdre et j'y pige vraiment que dalle !


 
 
T'inkietes t'es pas le seul à n'avoir rien compris  ;) et sinon j'suis en IUP Génie Maths et Info et c'est un sujet d'Algo !!! en fait c un truc qui à une relation avec les permutations des chiffres et transpositions élémentaires bref des truc pas trop passionnant et ça me rend fou  :pt1cable: !!!


Message édité par Fornium le 28-05-2003 à 18:20:21
Reply

Marsh Posté le 28-05-2003 à 06:23:46    

et c'est quoi le rapport avec le C? moi j'ai bien l'impression que c'est de l'algo pure (permutometre, c'est dans le dico?)

Reply

Marsh Posté le 28-05-2003 à 08:50:16    

++Taz a écrit :

et c'est quoi le rapport avec le C? moi j'ai bien l'impression que c'est de l'algo pure (permutometre, c'est dans le dico?)


permutoèdre, pas permutomètre!:D
Mais en effet c'est plutot un pb d'algo...

Reply

Marsh Posté le 28-05-2003 à 18:23:05    

skeye a écrit :


permutoèdre, pas permutomètre!:D
Mais en effet c'est plutot un pb d'algo...


 
t'as tout à fait raison c un sujet d'algo, j'me suis trompé en haut  ;) mais pour l'instant personne n'a trouvé une solution pour moi  :cry:

Reply

Marsh Posté le 28-05-2003 à 18:26:24    

ben en C++ je t'aurais sorti le std::next_permutation, mais tu fais du C :D

Reply

Marsh Posté le 28-05-2003 à 20:45:51    

++Taz a écrit :

ben en C++ je t'aurais sorti le std::next_permutation, mais tu fais du C :D  


 
je refuserais pas ton code alors ce serait sympa si tu me le files  ;)

Reply

Marsh Posté le 28-05-2003 à 20:49:55    

Code :
  1. // next_permutation and prev_permutation, with and without an explicitly  
  2. // supplied comparison function.
  3. template <class _BidirectionalIter>
  4. bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last) {
  5.   __STL_REQUIRES(_BidirectionalIter, _BidirectionalIterator);
  6.   __STL_REQUIRES(typename iterator_traits<_BidirectionalIter>::value_type,
  7.                  _LessThanComparable);
  8.   if (__first == __last)
  9.     return false;
  10.   _BidirectionalIter __i = __first;
  11.   ++__i;
  12.   if (__i == __last)
  13.     return false;
  14.   __i = __last;
  15.   --__i;
  16.   for(;;) {
  17.     _BidirectionalIter __ii = __i;
  18.     --__i;
  19.     if (*__i < *__ii) {
  20.       _BidirectionalIter __j = __last;
  21.       while (!(*__i < *--__j))
  22.         {}
  23.       iter_swap(__i, __j);
  24.       reverse(__ii, __last);
  25.       return true;
  26.     }
  27.     if (__i == __first) {
  28.       reverse(__first, __last);
  29.       return false;
  30.     }
  31.   }
  32. }
  33. template <class _BidirectionalIter, class _Compare>
  34. bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
  35.                       _Compare __comp) {
  36.   __STL_REQUIRES(_BidirectionalIter, _BidirectionalIterator);
  37.   __STL_BINARY_FUNCTION_CHECK(_Compare, bool,
  38.     typename iterator_traits<_BidirectionalIter>::value_type,
  39.     typename iterator_traits<_BidirectionalIter>::value_type);
  40.   if (__first == __last)
  41.     return false;
  42.   _BidirectionalIter __i = __first;
  43.   ++__i;
  44.   if (__i == __last)
  45.     return false;
  46.   __i = __last;
  47.   --__i;
  48.   for(;;) {
  49.     _BidirectionalIter __ii = __i;
  50.     --__i;
  51.     if (__comp(*__i, *__ii)) {
  52.       _BidirectionalIter __j = __last;
  53.       while (!__comp(*__i, *--__j))
  54.         {}
  55.       iter_swap(__i, __j);
  56.       reverse(__ii, __last);
  57.       return true;
  58.     }
  59.     if (__i == __first) {
  60.       reverse(__first, __last);
  61.       return false;
  62.     }
  63.   }
  64. }
  65. template <class _BidirectionalIter>
  66. bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last) {
  67.   __STL_REQUIRES(_BidirectionalIter, _BidirectionalIterator);
  68.   __STL_REQUIRES(typename iterator_traits<_BidirectionalIter>::value_type,
  69.                  _LessThanComparable);
  70.   if (__first == __last)
  71.     return false;
  72.   _BidirectionalIter __i = __first;
  73.   ++__i;
  74.   if (__i == __last)
  75.     return false;
  76.   __i = __last;
  77.   --__i;
  78.   for(;;) {
  79.     _BidirectionalIter __ii = __i;
  80.     --__i;
  81.     if (*__ii < *__i) {
  82.       _BidirectionalIter __j = __last;
  83.       while (!(*--__j < *__i))
  84.         {}
  85.       iter_swap(__i, __j);
  86.       reverse(__ii, __last);
  87.       return true;
  88.     }
  89.     if (__i == __first) {
  90.       reverse(__first, __last);
  91.       return false;
  92.     }
  93.   }
  94. }
  95. template <class _BidirectionalIter, class _Compare>
  96. bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
  97.                       _Compare __comp) {
  98.   __STL_REQUIRES(_BidirectionalIter, _BidirectionalIterator);
  99.   __STL_BINARY_FUNCTION_CHECK(_Compare, bool,
  100.     typename iterator_traits<_BidirectionalIter>::value_type,
  101.     typename iterator_traits<_BidirectionalIter>::value_type);
  102.   if (__first == __last)
  103.     return false;
  104.   _BidirectionalIter __i = __first;
  105.   ++__i;
  106.   if (__i == __last)
  107.     return false;
  108.   __i = __last;
  109.   --__i;
  110.   for(;;) {
  111.     _BidirectionalIter __ii = __i;
  112.     --__i;
  113.     if (__comp(*__ii, *__i)) {
  114.       _BidirectionalIter __j = __last;
  115.       while (!__comp(*--__j, *__i))
  116.         {}
  117.       iter_swap(__i, __j);
  118.       reverse(__ii, __last);
  119.       return true;
  120.     }
  121.     if (__i == __first) {
  122.       reverse(__first, __last);
  123.       return false;
  124.     }
  125.   }
  126. }

Reply

Marsh Posté le 28-05-2003 à 21:01:09    

cool merci !!!!!!!!!

Reply

Marsh Posté le 28-05-2003 à 21:01:09   

Reply

Marsh Posté le 28-05-2003 à 21:26:57    

TipOfTheDay: efface les __, c'est con, mais ça gagne en lisibilité
 
c'est des opérations sur des sequences: first pointe sur le premier élément, last pointe apres le dernier. tous les éléments sont conceptuellement contigus, c'est à dire accessible par incrémentation (comme balader un pointeur sur un tableau[N], first=tableau, et last=tableau+N)

Reply

Marsh Posté le 28-05-2003 à 21:39:21    

++Taz a écrit :

TipOfTheDay: efface les __, c'est con, mais ça gagne en lisibilité
 
c'est des opérations sur des sequences: first pointe sur le premier élément, last pointe apres le dernier. tous les éléments sont conceptuellement contigus, c'est à dire accessible par incrémentation (comme balader un pointeur sur un tableau[N], first=tableau, et last=tableau+N)


 
c noté  :wahoo:  thank u !!!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed