[C] probleme permutation indices d'un tableau
Fermé
memo67
Messages postés
5
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
22 mars 2008
-
20 mars 2008 à 12:53
Maximvs Messages postés 39 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2010 - 21 mars 2008 à 00:19
Maximvs Messages postés 39 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2010 - 21 mars 2008 à 00:19
A voir également:
- Tableau de permutation
- Tableau word - Guide
- Tableau ascii - Guide
- Tableau croisé dynamique - Guide
- Trier tableau excel - Guide
- Imprimer tableau excel sur une page - Guide
4 réponses
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
20 mars 2008 à 14:46
20 mars 2008 à 14:46
a mon avis il voudrait aussi que les valeur soit differentes pour ça il faut que une fois que tu a tiré le nombre au hasard tu verifie qu'il n'est pas deja dans le tableau
pour ça tu initialise d'abord toutes les cases de ton tableau a 11
pour ça tu initialise d'abord toutes les cases de ton tableau a 11
for(i=0;i<10;i++) tab[i]=11;puis ensuite avant de mettre le nombre tu verifies qu'il n'est pas deja la
for(i=0;i<10;i++){ while(trouve){ trouve=0; a=rand()%11; for(j=0;j<10;j++) if(tab[j]==a) trouve=1; } tab[i]=a; printf("%d\n",tab[i]); }
Salut memo67,
problème très classique, la solution de mype semble bonne à première vue, mais elle risque pour des tableaux très grand de prendre un temps très très long !
Voici comment il faut procéder.
Première étape : tu génères un tableau de la taille voulu tel que t[i]=i donc 0 1 2 3 4 5 6 etc .....
Deuxième étape : pour i allant de la taille maximale à 2 (boucle décrémentée) fait un rand()%i et inverse les cases t[i] et t[rand()%i]
Ca fera exactement ce que tu souhaite en temps linéaire à la taille du tableau.
Bon courage, Greg.
problème très classique, la solution de mype semble bonne à première vue, mais elle risque pour des tableaux très grand de prendre un temps très très long !
Voici comment il faut procéder.
Première étape : tu génères un tableau de la taille voulu tel que t[i]=i donc 0 1 2 3 4 5 6 etc .....
Deuxième étape : pour i allant de la taille maximale à 2 (boucle décrémentée) fait un rand()%i et inverse les cases t[i] et t[rand()%i]
Ca fera exactement ce que tu souhaite en temps linéaire à la taille du tableau.
Bon courage, Greg.
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
5 février 2025
1 526
20 mars 2008 à 13:02
20 mars 2008 à 13:02
Ben oui mais c'est le problème des fonctions comme rand: il faut changer la graine qui génère le calcul du nombre (srand) régulièrement.
Il faudrait que tu cherches une librairie de création de nombres aléatoires plus performante.
Il faudrait que tu cherches une librairie de création de nombres aléatoires plus performante.
Maximvs
Messages postés
39
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2010
2
21 mars 2008 à 00:19
21 mars 2008 à 00:19
Essaye d'incorporer cette ligne :
srand( (unsigned)time( NULL ) );
avant la génération du nombre aléatoire.
Normalement ça empêche le programme de retomber sur une valeur déjà généré.
srand( (unsigned)time( NULL ) );
avant la génération du nombre aléatoire.
Normalement ça empêche le programme de retomber sur une valeur déjà généré.