Tri d'un tableau par indexation - Algo - Programmation
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 ;-)
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
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 ?
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]
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 ?
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
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 ...
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