Un ptit algo que je n'arrive pas à trouver[2,5 ans+tard] [Algo-Prog C] - Programmation
Marsh Posté le 29-11-2001 à 15:58:01
Vous pouvez tjs proposez vos solutions directement en C...
Marsh Posté le 29-11-2001 à 16:02:27
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
Marsh Posté le 29-11-2001 à 16:08:11
encore que je complique la vie moi
Code :
|
[edtdd]--Message édité par chrisbk--[/edtdd]
Marsh Posté le 29-11-2001 à 16:19:50
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.
Marsh Posté le 29-11-2001 à 16:23:28
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
Marsh Posté le 29-11-2001 à 16:35:11
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]
Marsh Posté le 29-11-2001 à 16:46:16
Sinon nivo optimization (rapidité) c bien adapté ?
Marsh Posté le 29-11-2001 à 16:48:19
sur un truc de 10elements tu peux optimiser ca comme tu veux tu verras pas la difference
Marsh Posté le 29-11-2001 à 16:52:28
Ca j'avais compris...surtout avec mon Tbird 1.4GHz !
Mais je parle avec n élément!
Marsh Posté le 30-11-2001 à 12:43:26
ckrisbk ton algo ne marche pas!
Une otre proposition ?
Marsh Posté le 30-11-2001 à 13:04:26
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 :
|
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)
Marsh Posté le 30-11-2001 à 13:13:32
Giz a écrit a écrit : ckrisbk ton algo ne marche pas! Une otre proposition ? |
mon algo marche, j'en suis certain
Marsh Posté le 01-12-2001 à 10:23:29
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...
Marsh Posté le 02-12-2001 à 13:49:07
j'ai du mal a comprendre comment indiceTab pourra contenir deux fois 4
Marsh Posté le 02-12-2001 à 13:51:25
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 ?
Marsh Posté le 20-07-2004 à 11:53:49
Me revoila 2 ans et demi plus tard, toujours dans l'info. T1 ce que g t nul avant .
Y'a pas plus facile comme pb ! ... et dire que l'algo de chrisbk ne marche pas faut vraiment etre benet!
Effectivement j'ai l'impression d'avoir progresse depuis
Surtout que maintenant je m'interesse au pb du PVC
PS : chrisbk , tu e t vraiment gentil de ne pas m'avoir envoyer en l'air.
Marsh Posté le 20-07-2004 à 13:48:00
Giz a écrit : Me revoila 2 ans et demi plus tard, toujours dans l'info. T1 ce que g t nul avant . |
PVC ? kézako ?
Marsh Posté le 20-07-2004 à 15:19:02
noldor a écrit : PVC ? kézako ? |
PVC = probleme du voyageur de commerce = TSP = travelling salesman problem
Marsh Posté le 20-07-2004 à 16:24:43
Jubijub a écrit : et sa variante le problème du postier (plus les noeuds mais les branches)... |
... 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
Marsh Posté le 20-07-2004 à 18:22:55
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
Marsh Posté le 20-08-2004 à 19:05:59
JagStang a écrit : j'ai un algo en C qui implémente 3 heuristiques pour tenter la résolution de ce problème. |
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.
Marsh Posté le 29-11-2001 à 15:55:41
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