Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1282 connectés 

  FORUM HardWare.fr
  Programmation

  [Algo-Prog C] Un ptit algo que je n'arrive pas à trouver[2,5 ans+tard]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Algo-Prog C] Un ptit algo que je n'arrive pas à trouver[2,5 ans+tard]

n°76624
Giz
Posté le 29-11-2001 à 15:55:41  profilanswer
 

Voilà je mi suis pris assez la tête comme ça dc je donne ma langue au chat ;)
l'algo consiste à trouver les 5 indices (d'un tableau de dix éléments) correspondant aux 5 plus grandes valeurs dans le tableau et mettre c indices dans un autre tableau contenant donc ces 5 indices (le premier élément de cet autre tableau contient l'indice du tableau de départ correspondant au plus grand nombre...le dernier element de cet autre tableau contient l'indice correspondant au cinquième plus grand nombre du tableau de départ.
 
Exemple:
 
Tableau de départ int tab[10]={10,5,30,15,20,4,51,34,3,1}
 Les cinq nombres les plus grand sont: 51,34,30,20,15 et ont    respectivement pour indice (en C): 6,7,2,4,3
 
L'autre tableau: il contiendra DANS L'ORDRE: int tab[5]={6,7,2,4,3} cad les indices du tableau de départ correspond aux cinq plus grand nombre.
 
Je pense avoir été suffisamment clair sinon posez vos questions...Moi je mi suis pris la tête et jsuis sûr que c qu'un ptit truc bête qui me repousse (comme tjs).
Proposez vos solutions, Merci.


Message édité par Giz le 20-07-2004 à 11:55:09

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
mood
Publicité
Posté le 29-11-2001 à 15:55:41  profilanswer
 

n°76625
Giz
Posté le 29-11-2001 à 15:58:01  profilanswer
 

Vous pouvez tjs proposez vos solutions directement en C...


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°76627
chrisbk
-
Posté le 29-11-2001 à 16:02:27  profilanswer
 

tu te fais un tableau annexe :
 
int indiceTab[10];
 
for (int i=0;i<10;i++)
  indiceTab[i] = i;
 
ca c la phase 1
 
ensuite tu tri ton tableau tab, mais lors de tri quand tu change un element de place tu modifie aussi le tableau indiceTab
 
par ex :
 
int tab[10]={10,5,30,15,20,4,51,34,3,1}  
 
mettons apres un debut de tri tu auras :
int tab[10]={30,5,10,15,20,4,51,34,3,1}  
 
alors indiceTab doit etre :
{2,1,0,3,4,5,6,7,8,9}
 
 
et vala a fin du tri t'as plus qu'a rechope les 5 premieres entree de indiceTab

n°76630
chrisbk
-
Posté le 29-11-2001 à 16:08:11  profilanswer
 

encore que je complique la vie moi
 

Code :
  1. int itab[5];
  2. for (int i=0;i<5;i++)
  3. {
  4. int max = 0;
  5. int indice = -1;
  6. for (int j=0;j<10;j++)
  7. {
  8. if (tab[j] >= max)
  9. {
  10.   for (int l=0;l<i;l++)
  11.     if (j==itab[l])
  12.       break;       //pas inserer deux fois le meme indice
  13.  
  14.   if (l == i)
  15.   {
  16.     max = tab[j];
  17.     indice = j;
  18.    }
  19. }
  20. itab[i] = indice;
  21. }

 

[edtdd]--Message édité par chrisbk--[/edtdd]

n°76634
Giz
Posté le 29-11-2001 à 16:19:50  profilanswer
 

chrisbk a écrit a écrit :

tu te fais un tableau annexe :
 
int indiceTab[10];
 
for (int i=0;i<10;i++)
  indiceTab[i] = i;
 
ca c la phase 1
 
ensuite tu tri ton tableau tab, mais lors de tri quand tu change un element de place tu modifie aussi le tableau indiceTab
 
par ex :
 
int tab[10]={10,5,30,15,20,4,51,34,3,1}  
 
mettons apres un debut de tri tu auras :
int tab[10]={30,5,10,15,20,4,51,34,3,1}  
 
alors indiceTab doit etre :
{2,1,0,3,4,5,6,7,8,9}
 
 
et vala a fin du tri t'as plus qu'a rechope les 5 premieres entree de indiceTab  




 
Ok...ton IndiceTab[10] sera = à : {0,1,2,3,4,5,6,7,8,9}
 
ensuite si je tri mon tableau de départ par ordre croissant, je PERD tout mes indices!...je ne vois pas comment tu fais.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°76635
chrisbk
-
Posté le 29-11-2001 à 16:23:28  profilanswer
 

Giz a écrit a écrit :

 
 
Ok...ton IndiceTab[10] sera = à : {0,1,2,3,4,5,6,7,8,9}
 
ensuite si je tri mon tableau de départ par ordre croissant, je PERD tout mes indices!...je ne vois pas comment tu fais.  




 
tu tri en parrallele
je veux dire, tu inverse deux val dans ton tableau "tab", tu inverse les meme val (enfin les val se situant au meme indice) dans le tableau indiceTab
 
a la fin du traitemnt tu as dans indiceTab les indices des plus grand chiffre du tableau par ordre decroissant (ou croissant, depend de comment tu fais ton tri)
 
enfin, ces indices s'appliquent au tableau original "tab" non trie

n°76641
Giz
Posté le 29-11-2001 à 16:35:11  profilanswer
 

chrisbk a écrit a écrit :

 
 
tu tri en parrallele
je veux dire, tu inverse deux val dans ton tableau "tab", tu inverse les meme val (enfin les val se situant au meme indice) dans le tableau indiceTab
 
a la fin du traitemnt tu as dans indiceTab les indices des plus grand chiffre du tableau par ordre decroissant (ou croissant, depend de comment tu fais ton tri)
 
enfin, ces indices s'appliquent au tableau original "tab" non trie  




 
Ok je crois avoir compris...ton tableau de départ tu le parcours , tu y repère le plus grand tu échanges le plus gd nombre avec le 1er élément ds ton Tab de départ...et les cases que t'échange ds dans tab, tu echanges les meme cases ds ton indicetab  
exemple: on échange la case 1 et 3 de tab, on change dc les cases 1 et 3 d'indicetab
puis on récupère les cinq valeurs des 5 cases d'indicetab...ok
c ca a peu près ?

 

[edtdd]--Message édité par Giz--[/edtdd]


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°76644
Giz
Posté le 29-11-2001 à 16:46:16  profilanswer
 

Sinon nivo optimization (rapidité) c bien adapté ?


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°76645
chrisbk
-
Posté le 29-11-2001 à 16:48:19  profilanswer
 

sur un truc de 10elements tu peux optimiser ca comme tu veux tu verras pas la difference :D

n°76646
Giz
Posté le 29-11-2001 à 16:52:28  profilanswer
 

Ca j'avais compris...surtout avec mon Tbird 1.4GHz !  :lol:  
Mais je parle avec n élément!


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
mood
Publicité
Posté le 29-11-2001 à 16:52:28  profilanswer
 

n°76911
Giz
Posté le 30-11-2001 à 12:43:26  profilanswer
 

ckrisbk ton algo ne marche pas!
 
Une otre proposition ?


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°76915
tgrx
My heart is pumping for love
Posté le 30-11-2001 à 13:04:26  profilanswer
 

Basé sur l'algo de chrisbk, mais sans le tableau d'indices (mais avec un tableau d'entiers ce qui revient au même en complexité mémoire).
 

Code :
  1. #include <limits.h> // ou un truc du style, je sais plus très bien
  2. int tab[10], tmptab[10], indices[5];
  3. for (int i=0;i<10;i++) tmptab[i]=tab[i]; // simple recopie
  4. for (int i=0;i<5;i++)
  5. {
  6.   int max=INT_MIN, indice;
  7.   for (int j=0;j<10;j++)
  8.     if (tmptab[j]>=max) indice=j;
  9.  
  10.   tmptab[j]=INT_MIN;
  11.   indices[i]=j;
  12. }


 
La complexité est en O(nm), où m est la taille du tableau d'indices à déterminer.
 
Donc si m=n/2 dans le cas général, tu as du O(n²), si m reste fixé à 5, c'est du O(n)
 
 :hello:

n°76916
chrisbk
-
Posté le 30-11-2001 à 13:13:32  profilanswer
 

Giz a écrit a écrit :

ckrisbk ton algo ne marche pas!
 
Une otre proposition ?  




 
mon algo marche, j'en suis certain :p

n°77117
Giz
Posté le 01-12-2001 à 10:23:29  profilanswer
 

Non, déroule le à la main en récupérant les 3 plus grand nombre du tab suivant: tab={10,5,30,15,20}
puis ton indicetab={0,1,2,3,4}(au départ)
je te demande juste de récupérer les 3 1ere case du tableau indicetab
ca te renverra 2,4,4!...(les 3 1ere valeur) au lieu de 2,4,3...


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°77434
chrisbk
-
Posté le 02-12-2001 à 13:49:07  profilanswer
 

j'ai du mal a comprendre comment indiceTab pourra contenir deux fois 4

n°77435
chrisbk
-
Posté le 02-12-2001 à 13:51:25  profilanswer
 

regarde :
1er tri
val     = 30,5,10,15,20
indice  = 2,1,0,3,4
 
2eme tri
val    = 30,20,10,15,5
indice = 2,4,0,3,1
 
3eme tri  
val = 30,20,15,10,5
indice = 2,4,3,0,1
 
dans le tableau original
original[2] = 30;
original[4] = 20;
original[3] = 15;
original[0] = 10;
original[1] =  5;
 
 
ca colle non ?

n°800535
Giz
Posté le 20-07-2004 à 11:53:49  profilanswer
 

Me revoila 2 ans et demi plus tard, toujours dans l'info. T1 ce que g t nul avant :D.
Y'a pas plus facile comme pb ! ... et dire que l'algo de chrisbk ne marche pas faut vraiment etre benet!  :lol:  
Effectivement j'ai l'impression d'avoir progresse depuis ;)
Surtout que maintenant je m'interesse au pb du PVC  :love:  
 
PS : chrisbk , tu e t vraiment gentil de ne pas m'avoir envoyer en l'air.

n°800638
noldor
Rockn'roll
Posté le 20-07-2004 à 13:48:00  profilanswer
 

Giz a écrit :

Me revoila 2 ans et demi plus tard, toujours dans l'info. T1 ce que g t nul avant :D.
Y'a pas plus facile comme pb ! ... et dire que l'algo de chrisbk ne marche pas faut vraiment etre benet!  :lol:  
Effectivement j'ai l'impression d'avoir progresse depuis ;)
Surtout que maintenant je m'interesse au pb du PVC  :love:  
 
PS : chrisbk , tu e t vraiment gentil de ne pas m'avoir envoyer en l'air.

PVC ? kézako ?


---------------
http://runnerstats.net
n°800760
Jubijub
Parce que je le VD bien
Posté le 20-07-2004 à 14:55:51  profilanswer
 

ca c du déterrage de topic ;)


---------------
Jubi Photos : Flickr - 500px
n°800804
Giz
Posté le 20-07-2004 à 15:19:02  profilanswer
 

noldor a écrit :

PVC ? kézako ?


 
PVC = probleme du voyageur de commerce = TSP = travelling salesman problem ;)


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°800876
Jubijub
Parce que je le VD bien
Posté le 20-07-2004 à 16:02:22  profilanswer
 

et sa variante le problème du postier (plus les noeuds mais les branches)...
 
mais si tu augmentes les noeuds il devient vite insoluble ce truc (enfin dans des limites de temps acceptables)?


---------------
Jubi Photos : Flickr - 500px
n°800909
Giz
Posté le 20-07-2004 à 16:24:43  profilanswer
 

Jubijub a écrit :

et sa variante le problème du postier (plus les noeuds mais les branches)...
 
mais si tu augmentes les noeuds il devient vite insoluble ce truc (enfin dans des limites de temps acceptables)?


 
 :jap: ... le nombre de chemins différents dans un probleme du PVC avec n villes est :
 
(n-1)! / 2 ... ce qui commence a faire avec n > 10 :D


Message édité par Giz le 20-07-2004 à 16:25:10

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°801121
jagstang
Pa Capona ಠ_ಠ
Posté le 20-07-2004 à 18:22:55  profilanswer
 

j'ai un algo en C qui implémente 3 heuristiques pour tenter la résolution de ce problème.
 
intéressé ? je l'ai pas sous la main, je dois fouiller


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°828010
Giz
Posté le 20-08-2004 à 19:05:59  profilanswer
 

JagStang a écrit :

j'ai un algo en C qui implémente 3 heuristiques pour tenter la résolution de ce problème.
 
intéressé ? je l'ai pas sous la main, je dois fouiller


 
dit moi juste à quoi elles ressemblent en gros. J'en connais kk1 d'après google ;) mais juste pour savoir si les tiennes je les connais. ;)


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Algo-Prog C] Un ptit algo que je n'arrive pas à trouver[2,5 ans+tard]

 

Sujets relatifs
[All - Newbies] Ca existe un lexique des termes de prog ?[ PASCAL ] ou puis je trouver quelques programmes déja faits ??
Prog d'installationQuestion en Algo pour les balezes, que la Force soit avec vous!!!!!!!!
kk1 sais ou je pourais trouver toolbook??Kel language de programation est utiliser pour prog les jeu ressent??
[DETENTE][ALGO] Permuter 2 variables a et b ...[dbase] Où le trouver ???
[Prog Windows] CreatWindows et Fenetre fille de sasie de texte ?ASP / Windows XP : arrive pas a ouvrir ma base de donnee !
Plus de sujets relatifs à : [Algo-Prog C] Un ptit algo que je n'arrive pas à trouver[2,5 ans+tard]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR