On Jun 4, 9:45 pm, David Fleury wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
On Jun 4, 9:45 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
On Jun 4, 9:45 pm, David Fleury wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
On Jun 4, 9:45 pm, David Fleury wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12
Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
On Jun 4, 9:45 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12
Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
On Jun 4, 9:45 pm, David Fleury wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12
Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
Est-ce que le problème, c'est la mémoire, ou le temps
d'exécution ? Parce que j'imagine qu'en stockant les solutions,
on arrive assez vite à épuiser la mémoire aussi. (Ou à épuiser
la mémoire vive, et à se mettre à paginer comme un fou.) C'est
certainement un problème avec ma première solution, où on stocke
d'abord toutes les n! permutations. Pour N = 6, il n'y a que
720 ; pas de problème en vue, mais déjà avec N = 10, il y en a
plus de 3 millions, et à N = 13, on dépasse la capacité
d'adressage sur une machine 32 bits. (J'ai une machine 64 bits
sous la main, mais elle n'est configurée qu'avec 1 Go de mémoire
virtuelle. Alors, elle s'arrête déjà à N = 11 avec mon premier
algorithme. Qui tourne aussi extrèmement lentement, à cause du
paging. Mais tant que je reste dans la mémoire physique, les
temps d'exécution sont « adéquate », et ceci sur un très
vieille et très lente Sparc.)
Est-ce que le problème, c'est la mémoire, ou le temps
d'exécution ? Parce que j'imagine qu'en stockant les solutions,
on arrive assez vite à épuiser la mémoire aussi. (Ou à épuiser
la mémoire vive, et à se mettre à paginer comme un fou.) C'est
certainement un problème avec ma première solution, où on stocke
d'abord toutes les n! permutations. Pour N = 6, il n'y a que
720 ; pas de problème en vue, mais déjà avec N = 10, il y en a
plus de 3 millions, et à N = 13, on dépasse la capacité
d'adressage sur une machine 32 bits. (J'ai une machine 64 bits
sous la main, mais elle n'est configurée qu'avec 1 Go de mémoire
virtuelle. Alors, elle s'arrête déjà à N = 11 avec mon premier
algorithme. Qui tourne aussi extrèmement lentement, à cause du
paging. Mais tant que je reste dans la mémoire physique, les
temps d'exécution sont « adéquate », et ceci sur un très
vieille et très lente Sparc.)
Est-ce que le problème, c'est la mémoire, ou le temps
d'exécution ? Parce que j'imagine qu'en stockant les solutions,
on arrive assez vite à épuiser la mémoire aussi. (Ou à épuiser
la mémoire vive, et à se mettre à paginer comme un fou.) C'est
certainement un problème avec ma première solution, où on stocke
d'abord toutes les n! permutations. Pour N = 6, il n'y a que
720 ; pas de problème en vue, mais déjà avec N = 10, il y en a
plus de 3 millions, et à N = 13, on dépasse la capacité
d'adressage sur une machine 32 bits. (J'ai une machine 64 bits
sous la main, mais elle n'est configurée qu'avec 1 Go de mémoire
virtuelle. Alors, elle s'arrête déjà à N = 11 avec mon premier
algorithme. Qui tourne aussi extrèmement lentement, à cause du
paging. Mais tant que je reste dans la mémoire physique, les
temps d'exécution sont « adéquate », et ceci sur un très
vieille et très lente Sparc.)
c'est rigolo il me semble qu'il y a à peu près un an le même problème
était posé.
Un TD repris d'une année sur l'autre et toujours mal compris ;-) ?
Je croyais que c'était la même personne qui n'avait toujours pas trouvé de
réponse au problème.
c'est rigolo il me semble qu'il y a à peu près un an le même problème
était posé.
Un TD repris d'une année sur l'autre et toujours mal compris ;-) ?
Je croyais que c'était la même personne qui n'avait toujours pas trouvé de
réponse au problème.
c'est rigolo il me semble qu'il y a à peu près un an le même problème
était posé.
Un TD repris d'une année sur l'autre et toujours mal compris ;-) ?
Je croyais que c'était la même personne qui n'avait toujours pas trouvé de
réponse au problème.
Est-ce que le problème, c'est la mémoire, ou le temps
d'exécution ? Parce que j'imagine qu'en stockant les solutions,
on arrive assez vite à épuiser la mémoire aussi. (Ou à épuis er
la mémoire vive, et à se mettre à paginer comme un fou.) C'est
certainement un problème avec ma première solution, où on stocke
d'abord toutes les n! permutations. Pour N = 6, il n'y a que
720 ; pas de problème en vue, mais déjà avec N = 10, il y en a
plus de 3 millions, et à N = 13, on dépasse la capacité
d'adressage sur une machine 32 bits. (J'ai une machine 64 bits
sous la main, mais elle n'est configurée qu'avec 1 Go de mémoire
virtuelle. Alors, elle s'arrête déjà à N = 11 avec mon premier
algorithme. Qui tourne aussi extrèmement lentement, à cause du
paging. Mais tant que je reste dans la mémoire physique, les
temps d'exécution sont « adéquate », et ceci sur un très
vieille et très lente Sparc.)
Le temps d'exécution n'est pas bon.. J'ai supprimé le stockage des
solutions. Seules la génération (next_permutation) et le tri pénali se le
premier traitement.
Pour les pires cas si K = N, l'algo génére N! permutations alors qu 'une
seule est valide. Pour N = 10, ça fait quand même presque 4.10e6 tr is
inutiles.
Est-ce que le problème, c'est la mémoire, ou le temps
d'exécution ? Parce que j'imagine qu'en stockant les solutions,
on arrive assez vite à épuiser la mémoire aussi. (Ou à épuis er
la mémoire vive, et à se mettre à paginer comme un fou.) C'est
certainement un problème avec ma première solution, où on stocke
d'abord toutes les n! permutations. Pour N = 6, il n'y a que
720 ; pas de problème en vue, mais déjà avec N = 10, il y en a
plus de 3 millions, et à N = 13, on dépasse la capacité
d'adressage sur une machine 32 bits. (J'ai une machine 64 bits
sous la main, mais elle n'est configurée qu'avec 1 Go de mémoire
virtuelle. Alors, elle s'arrête déjà à N = 11 avec mon premier
algorithme. Qui tourne aussi extrèmement lentement, à cause du
paging. Mais tant que je reste dans la mémoire physique, les
temps d'exécution sont « adéquate », et ceci sur un très
vieille et très lente Sparc.)
Le temps d'exécution n'est pas bon.. J'ai supprimé le stockage des
solutions. Seules la génération (next_permutation) et le tri pénali se le
premier traitement.
Pour les pires cas si K = N, l'algo génére N! permutations alors qu 'une
seule est valide. Pour N = 10, ça fait quand même presque 4.10e6 tr is
inutiles.
Est-ce que le problème, c'est la mémoire, ou le temps
d'exécution ? Parce que j'imagine qu'en stockant les solutions,
on arrive assez vite à épuiser la mémoire aussi. (Ou à épuis er
la mémoire vive, et à se mettre à paginer comme un fou.) C'est
certainement un problème avec ma première solution, où on stocke
d'abord toutes les n! permutations. Pour N = 6, il n'y a que
720 ; pas de problème en vue, mais déjà avec N = 10, il y en a
plus de 3 millions, et à N = 13, on dépasse la capacité
d'adressage sur une machine 32 bits. (J'ai une machine 64 bits
sous la main, mais elle n'est configurée qu'avec 1 Go de mémoire
virtuelle. Alors, elle s'arrête déjà à N = 11 avec mon premier
algorithme. Qui tourne aussi extrèmement lentement, à cause du
paging. Mais tant que je reste dans la mémoire physique, les
temps d'exécution sont « adéquate », et ceci sur un très
vieille et très lente Sparc.)
Le temps d'exécution n'est pas bon.. J'ai supprimé le stockage des
solutions. Seules la génération (next_permutation) et le tri pénali se le
premier traitement.
Pour les pires cas si K = N, l'algo génére N! permutations alors qu 'une
seule est valide. Pour N = 10, ça fait quand même presque 4.10e6 tr is
inutiles.
On Jun 4, 9:45 pm, David Fleury wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
[snip code]
On Jun 4, 9:45 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12
Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
[snip code]
On Jun 4, 9:45 pm, David Fleury wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
[snip code]
On Jun 4, 9:45 pm, David Fleury wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
[snip code]
En travaillant sur les index, on peut faire une version iterative à
occupation mémoire constante mais l'algo passe de n! à (n+1)!.
On Jun 4, 9:45 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12
Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
[snip code]
En travaillant sur les index, on peut faire une version iterative à
occupation mémoire constante mais l'algo passe de n! à (n+1)!.
On Jun 4, 9:45 pm, David Fleury wrote:
Note bien qu'à mon avis, même ma version initiale (qui générait
toutes les permutations, pour en supprimer les dupliqués par la
suite) a probablement une performance adéquate.
oula, faudrait préciser "adéquate"...
sur mon PC il ne vaut plus rien au delà de N = 12Et si c'est vrai
que les copies pourraient être signifiantes quand on fait 10000
dans 100000, dans la pratique... même sans les copies, ça risque
de craquer. Le nombre de combinaisons dans ce cas déborde un
double, c-à-d qu'il dépasse 1E306. Alors, ce n'est pas en
supprimant une copie de chaîne qu'on va le faire passer dans le
temps (ni en mémoire).
Ta dernière version est bien.
pour le fun, j'ai mesuré avec ça (sauf erreur)
Les meilleurs méthode peuvent aller jusqu'à N = 32, en prenant le
plus mauvais cas ( K = N / 2 )
J'ai gardé juste un calcul du nombre de solutions pour les 4 algos.
(celui avec next_permutation ne peut affiche le nombre de solutions
sans stockage)
[snip code]
En travaillant sur les index, on peut faire une version iterative à
occupation mémoire constante mais l'algo passe de n! à (n+1)!.
En travaillant sur les index, on peut faire une version iterative à
occupation mémoire constante mais l'algo passe de n! à (n+1)!.
J'ai beau chercher, je n'arrive pas à trouver un algo recurssif
terminal. Le meilleur reccurssif (de profondeur max N equivalent à
l'iteratif mais en O(n!)) auquel je peux penser est:
En travaillant sur les index, on peut faire une version iterative à
occupation mémoire constante mais l'algo passe de n! à (n+1)!.
J'ai beau chercher, je n'arrive pas à trouver un algo recurssif
terminal. Le meilleur reccurssif (de profondeur max N equivalent à
l'iteratif mais en O(n!)) auquel je peux penser est:
En travaillant sur les index, on peut faire une version iterative à
occupation mémoire constante mais l'algo passe de n! à (n+1)!.
J'ai beau chercher, je n'arrive pas à trouver un algo recurssif
terminal. Le meilleur reccurssif (de profondeur max N equivalent à
l'iteratif mais en O(n!)) auquel je peux penser est:
A l'epoque lointaine ou je generais des tonnes de permutations pour leur
faire subir des choses immondes, la premiere question a se poser, c'etait:
est-ce qu'on a besoin d'avoir les permutations dans l'ordre ?
ou est-ce qu'on se preoccupe juste de sortir chaque solution une seule
fois ?
(je n'ai jamais compris pourquoi la STL ne possedait QUE l'algo complique
qui sort TOUTES les permutations dans l'ordre).
Si on se fiche de l'ordre dans lequel on obtient les resultats, les
solutions les plus efficaces se basent sur un tableau de toutes
les entrees (initialement triee), et d'echanges sur les divers elements.
Ca fait une solution recursive simple, qui peut facilement devenir
iterative en explicitant la pile, de type generateur.
En tres vite, ca donne ceci, pour sortir toutes les permutations dans
n'importe quel ordre (et sans specialement optimiser, c'est juste le concept).
A l'epoque lointaine ou je generais des tonnes de permutations pour leur
faire subir des choses immondes, la premiere question a se poser, c'etait:
est-ce qu'on a besoin d'avoir les permutations dans l'ordre ?
ou est-ce qu'on se preoccupe juste de sortir chaque solution une seule
fois ?
(je n'ai jamais compris pourquoi la STL ne possedait QUE l'algo complique
qui sort TOUTES les permutations dans l'ordre).
Si on se fiche de l'ordre dans lequel on obtient les resultats, les
solutions les plus efficaces se basent sur un tableau de toutes
les entrees (initialement triee), et d'echanges sur les divers elements.
Ca fait une solution recursive simple, qui peut facilement devenir
iterative en explicitant la pile, de type generateur.
En tres vite, ca donne ceci, pour sortir toutes les permutations dans
n'importe quel ordre (et sans specialement optimiser, c'est juste le concept).
A l'epoque lointaine ou je generais des tonnes de permutations pour leur
faire subir des choses immondes, la premiere question a se poser, c'etait:
est-ce qu'on a besoin d'avoir les permutations dans l'ordre ?
ou est-ce qu'on se preoccupe juste de sortir chaque solution une seule
fois ?
(je n'ai jamais compris pourquoi la STL ne possedait QUE l'algo complique
qui sort TOUTES les permutations dans l'ordre).
Si on se fiche de l'ordre dans lequel on obtient les resultats, les
solutions les plus efficaces se basent sur un tableau de toutes
les entrees (initialement triee), et d'echanges sur les divers elements.
Ca fait une solution recursive simple, qui peut facilement devenir
iterative en explicitant la pile, de type generateur.
En tres vite, ca donne ceci, pour sortir toutes les permutations dans
n'importe quel ordre (et sans specialement optimiser, c'est juste le concept).