Permutation, transposition, ...

Tout ce qui concerne le langage Asymptote. Ce langage est utilisable sur le forum via les balises asy.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Permutation, transposition, ...

Message non lu par maurice »

Bonjour, je cherche à écrire les lettres de l'alphabet dans un ordre aléatoire ; voici le code :
5014e9e020477b16985365098b9a5d9fbd1b1fd4.svg
Ma question est de savoir
1) peut être il existe des fonction déjà définies pour les transposition, permutation, permutation aléatoire, ...
2) Pourquoi, alors qu'il y a return T1; ou return T2, la liste string[] T est modifiée dans chaque cas (les 3e et 5e lignes devraient être les mêmes que la 1ère).
Autrement dit, comment faire pour que alph reste toujours égale à :

Code : Tout sélectionner

string[] alph={"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
dans cet ordre.

Merci d'avance

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: permutation, transposition, ...

Message non lu par maurice »

C'est mieux comme ça, grâce aux infos trouvées sur le site de Gaétan.
ddfc27af27e1da18ff877a47a7c30ed0394f22c4.svg
Il reste la première question : pas de fonctions de ce type prédéfinies ?

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
OG
Modérateur spécialisé
Modérateur spécialisé
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: permutation, transposition, ...

Message non lu par OG »

maurice a écrit :Il reste la première question : pas de fonctions de ce type prédéfinies ?
pas à ma connaissance.


O.G.
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: permutation, transposition, ...

Message non lu par GMaths »

N'est ce pas plus simple avec un simple "string" et des fonctions de chaines pour en extraire des parties ?

Il me semble que oui :
a1bbfd04895807c3a287bf1f40beef381a8e9450.svg
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: permutation, transposition, ...

Message non lu par maurice »

GMaths a écrit :N'est ce pas plus simple avec un simple "string" et des fonctions de chaines pour en extraire des parties ?
Sans doute que si ! J'avais commencé à le découvrir un peu tout seul ! j'ai écris le début du code avec mes petites connaissances sur les string quasi-nulls et ai découvert à fur et à mesure les commandes du type substr, erase, insert, find, ...

Je pense donc me repencher sur le problème.

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: permutation, transposition, ...

Message non lu par maurice »

Bonjour,
voila où j'en suis avec un résultat bizarre :
b8112558226468d6bcd92fa8d49a1a18c01808b9.svg
Pourquoi la chaîne alph s'affiche deux fois ?
J'avoue je sèche, c'est ça de pas avoir fait d'info dans sa jeunesse !

Merci

Maurice
Dernière modification par maurice le vendredi 25 mars 2011, 17:23, modifié 1 fois.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: permutation, transposition, ...

Message non lu par maurice »

Bonjour, en remplaçant trans par :

Code : Tout sélectionner

string transposer(string T, int i, int j) {
		string s1=substr(T,i,1);
		string s2=substr(T,j,1);
		string T1=T;
		if (j==length(T)-1) {
			T1=erase(T1, i, 1);
			T1=insert(T1, i, s2);
			T1=erase(T1, j, 1);
			T1=T1+s1;
		}
		else {
			T1=erase(T1, i, 1);
			T1=insert(T1, i, s2);
			T1=erase(T1, j, 1);
			T1=insert(T1,j,s1);
		}
	return T1;
} 
CA travaille mieux, mais j'aimerais bien comprendre l'erreur précédent (ces histoires d'indices qui deviennent négatifs ....!)

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: permutation, transposition, ...

Message non lu par GMaths »

Je ne peux pas tester car je ne suis pas chez moi : je le ferai dans une heure.

Mais j'ai une question préalable : que cherches-tu à faire ?

Toujours à mélanger les lettres d'un mot ? Si oui, ma solution ne t'allait pas ?
Si non... ce serait plus facile de t'aider, en sachant précisément le cahier des charges de ce que tu veux.
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: permutation, transposition, ...

Message non lu par maurice »

GMaths a écrit : Mais j'ai une question préalable : que cherches-tu à faire ?
Je prépare un cours sur la cryptographie (code de césar, chiffre de Vigenère, ...) et essai de faire des algorithmes pour chiffrer/déchiffrer avec asymptote.
f96aa61fadd04adbf5e2d7252e1269280f9fdc54.svg
Ca c'est l'ancienne version avec les string[], je suis en train d'adapter tout ça avec string.
GMaths a écrit : Toujours à mélanger les lettres d'un mot ? Si oui, ma solution ne t'allait pas ?
Si, mais je voulais adapter ce que j'avais fait !

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: permutation, transposition, ...

Message non lu par GMaths »

maurice a écrit :CA travaille mieux, mais j'aimerais bien comprendre l'erreur précédent
Alors... j'ai regardé ton code... et ton permut_alea est déroutant : pourquoi faire si compliqué pour mélanger ?!??

Mais passons là dessus et parlons de l'erreur... il me semble qu'il y a des k à remplacer par k+1... pour avoir le fonctionnement que tu veux :

Code : Tout sélectionner

if (j != k+1) T2=trans(T2, j, k+1);
Car k=0 pose problème avec trans. s2 était parfois "vide" !
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: Permutation, transposition, ...

Message non lu par maurice »

GMaths a écrit : Alors... j'ai regardé ton code... et ton permut_alea est déroutant : pourquoi faire si compliqué pour mélanger ?!??
C'est un algorithme trouvé sur wikipédia :

Code : Tout sélectionner

Le mélange de Fisher–Yates (en), également appelé mélange de Knuth, est un algorithme en place permettant d'appliquer une permutation aléatoire à n éléments en temps linéaire, les n! permutations possibles étant équiprobables en sortie.

Le principe de cet algorithme est le suivant :

 pour i de 0 à n-1
   j := nombre aléatoire entre 0 et i (inclus)
   si i ≠ j, alors échanger T[i] et T[j]
Il y a sans doute plus efficace ou plu simple (la solution que tu m'as donné) !
GMaths a écrit :Mais passons là dessus et parlons de l'erreur... il me semble qu'il y a des k à remplacer par k+1... pour avoir le fonctionnement que tu veux :

Code : Tout sélectionner

if (j != k+1) T2=trans(T2, j, k+1);
Car k=0 pose problème avec trans. s2 était parfois "vide" !
Merci, je vais regarder tout cela !

Maurice

Edit : ajout du lien
Dernière modification par maurice le vendredi 25 mars 2011, 19:57, modifié 1 fois.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: Permutation, transposition, ...

Message non lu par GMaths »

maurice a écrit :C'est un algorithme trouvé sur wikipédia :
ok, ok ! Merci pour le lien.
Répondre