Tri d'un tableau par indexation

Tri d'un tableau par indexation - Algo - Programmation

Marsh Posté le 20-05-2009 à 23:19:06    

Bonjour
j'ai du mal à comprendre le comportement du tableau d'indexation d'un tableau, surtout quand on supprime un enregistrement du tableau et qu il faut mettre à jour le tableauIndex
Puis je avoir une explication et un exemple d'algo svp
Merci :jap:

Reply

Marsh Posté le 20-05-2009 à 23:19:06   

Reply

Marsh Posté le 21-05-2009 à 09:22:38    

Hi sensunique !
 
C'est quoi exactement ton problème ?
 
ex :
Tableau de 5 éléments 2 colonnes
 
TAB =>
N°entrée - Libellé
-----------------------
1 Tarte à la menthe
2 Croissants
3 Café
4 Gateau au chocolat
5 Biere
 
Tu veux créer un tableau d'indexation de ce tableau avec
un index sur libellé  
ce qui nous donne
 
IND =>
N°index N°entrée
--------------------
1 5          (Biere)
2 3          (Café)
3 2          (Croissants)
4 4          (Gateau au chocolat)
5 1          (Tarte à la menthe)
 
 
Si tu supprimes les Croissants
TAB contient maintenant
=>
N°entrée - Libellé
-----------------------
1 Tarte à la menthe
3 Café
4 Gateau au chocolat
5 Biere
 
et notre index devrait contenir
maintenant  
IND =>
N°index N°entrée
--------------------
1 5          (Biere)
2 3          (Café)
4 4          (Gateau au chocolat)
5 1          (Tarte à la menthe)
 
voir ceci (réindexation)
 
IND =>
N°index N°entrée
--------------------
1 5          (Biere)
2 3          (Café)
3 4          (Gateau au chocolat)
4 1          (Tarte à la menthe)
 
Bon ta question est un peu générale
alors mon explication l'est aussi ;-)
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Marsh Posté le 21-05-2009 à 11:24:59    


slt vttman2
 
Merci bcp pour les explications mais est ce que tu peux me donner un algorithme qui permet de mettre à jour la tablIndex, qui dit que le croissant  qui a été supprimé de la tableAliment (qui a tel indice) doit être supprimé de la tablIndex tout en décalant les indices des autres aliment comme tu as fait.
 
supposant que les deux tableaux ont déjà été triés
 
pour supprimer  de TabAlim
 
t <-- 1
tantque tabAlim[t] <> croissant
faire t <-- t+1
fintantque
 
après on décale les aliment à partir de "t" indice jusqu à la fin du tabAlim  de façon à écraser le Croissant
 
Donc "t" est l indice de l'élément supprimé dans TablAlim mais je ne sais pas comment l'utiliser pour attaquer le tbleau des index?
 
Merci
 
 
 
 
 
 
 
 
 
 

Reply

Marsh Posté le 21-05-2009 à 12:03:31    

Donc Croissants à virer  
dans Tab pas de soucis tu fais comme tu as dit  
ou suppression logique (rajout d'un champ Valid par exemple)
Dans ce dernier cas tu ne tiendras compte que des élements
avec valid = "OK"
 
ex :  
TAB =>  
N°entrée - Libellé - Valid
-----------------------  
1 Tarte à la menthe OK
2 Croissants           NOK
3 Café                   OK  
4 Gateau au chocolat  OK
5 Biere                      OK
 
 
Pour la table index tu dois virer le N°entrée 2 qui n'existe plus
( ou Valid = "NOK" )
donc là  
tu vas rechercher  le N °Entrée (2) dans ta table index
une fois trouvé, tu as donc en face le N°Index
Du début de ta table d'index jusqu'à ce N°index, rien  
à faire ...
ensuite il faut renuméroter (recopie de l'entrée n+1 dans n)
=>
Pour i allant de N°index à (MaxElements -1) faire
   tabindex (i) = tabindex(i +1)
fpour
   
Ok ?
 
 
 
 
 
 
 
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Marsh Posté le 21-05-2009 à 14:09:09    


 
slt
 
c'est un peu flou dans ma tête
 
tu as dit: "tu vas rechercher  le N °Entrée (2) dans ta table index
une fois trouvé, tu as donc en face le N°Index"
 
il est égal à combien son indice par rapport à la boucle de supression précédente  
 
si je fais
 
pour i de Début à FinTab-1
tab[i]<-- tab[i+1]
finPour
 
j=1
tantque
tabIndex[j] <> [i]
j++  
FinTanque
 
//Donc si j ai bien compris j a  la valeur de i, c est à dire de l'élément supprimé de tab élément.
 
TabIndex[j] <-- i+1
 
 
 
 
 
 
 
 
 
 
 
[/quotemsg]

Reply

Marsh Posté le 21-05-2009 à 15:10:35    

TAB(1)= "Tarte à la menthe"  
TAB(2)= "Croissants"  
TAB(3)= "Café"  
TAB(4)= "Gateau au chocolat"  
TAB(5)= "Biere"
 
 
 
IND(1)= 5          (Biere)  
IND(2)= 3          (Café)  
IND(3)= 2          (Croissants)  
IND(4)= 4          (Gateau au chocolat)  
IND(5)= 1          (Tarte à la menthe
 
si tu supprimes TAB(2)
ex : TAB(2) = "" maintenant
et mettre à jour la table index ...
 
1) tu dois rechercher x tel que IND(x) = 2
donc ici tu trouveras x ayant comme valeur 3  
car IND(3) = 2 ... OK ?
 
2) Décalage
 
De 1 à (3-1 = 2) rien à faire ça reste pareil qu'avant
=>
IND(1)= 5          (Biere)  
IND(2)= 3          (Café)  
 
 
Ensuite  
de 3  à  (5-1)  
tu dois faire
 
IND(3) <- IND(3+1) ecrasement  
=>
IND(3)= 4          (Gateau au chocolat)  
 
puis
 
IND(4) <- IND(4+1) ecrasement
=>
IND(4)= 1          (Tarte à la menthe)
 
bref on en revient à cette boucle
Pour i allant de 3 à (5 -1) faire  
   IND (i) = IND(i +1)  
fpour  
 
OK ?
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Marsh Posté le 21-05-2009 à 18:37:32    

Merci je commence à saisir la nuace
je recherche des tutos d'algo sur le net traitant des tris par indexation mais j ai rien trouvé
là j ai bien compris
Merci bcp ;)

Reply

Marsh Posté le 22-05-2009 à 07:56:53    

Pas de quoi ;-)
 
Sinon tu peux faire un tour ici
=>
http://www.developpez.net/forums/f [...] gorithmes/
 
Pour les réponses sur "developpez.net" ça dépendra comment les gens sont "lunés" mais à essayer ...


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed