[VB.net] Tris successifs

Fermé
Kr1 - 2 juil. 2009 à 17:53
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 3 juil. 2009 à 13:55
Bonjour,

Je suis en stage et je travaille sur la création d'un site web destiné à la gestion de fonds d'investissements. Je suis en train de développer une page qui permet de saisir/consulter des business plans. Un business plan comporte des caractéristiques (revenus, dette...) sur cinq années. La première année contient des données réelles, la deuxième un budget (qui peut se présenter en semestres ou en trimestres) et les trois dernières des données estimées.

Voici mon souci : j'aimerai pouvoir effectuer deux tris, un qui dans un premier temps trie mes tableaux selon le "type de l'année" (réelle, budget ou estimée) puis un autre tri qui au sein de chaque type trie selon les années.
J'ai fait le premier en tri à bulles mais quand j'effectue le second, bah il me trie par date donc je perds mon tri par type !!

J'espère avoir été claire ;)
Merci d'avance de vos réponses
A voir également:

4 réponses

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
2 juil. 2009 à 21:18
Salut !

Dans un premier temps sache que le choix du tri par bulle n'est pas très judicieux car il a une complexité en O(n²) alors qu'on peux faire du tri en O(n.log n)

Si j'ai bien compris ton problème, dans ton premier tri tu connais le nombre de valeurs qui peuvent être prises, on peut donc ranger tes valeurs sans faire vraiment de tri, avec une complexité de O(n), je m'explique, considérons que tu veuilles mettre tes types dans cet ordre : réelle, budget, estimée

Etape 1 : Tu parcours ton tableau et tu compte le nombre d'occurrence de chaque type, exemple réelle=5, budget=3, estimée=6

Etape 2 : Tu sais où vont aller les différents types (réelle entre 0 et 4, budget entre 5 et 7, estimée entre 8 et 13)
Donc tu parcours à nouveau ton tableau mais à chaque fois que tu arrives à une donnée soit elle est du bon type soit tu l'échange et tu la places au bon endroit.
Tu devras t'aider de 3 "curseurs" qui auront au départ 0, 5 et 8 pour valeur et que tu incrémenteras au fur et à mesure

Etape 3 : Ton tableau est trié par type, et tu veux les triés par dates, tu ne dois donc considérés que les sous-tableaux délimités par un type commun, et faire le tri sur ces parties de tableau.
Je te conseilles un tri à complexité logarithmique (heapsort par exemple)

PS. je ne connais pas le VB.NET mais je peux te faire du code en Pascal, C/C++, Caml pour te donner une idée plus concrète de ce que je viens de t'expliquer
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
2 juil. 2009 à 21:44
Je donne un semblant de code pour mon étape 2...

Supposons qu'on ait un tableau de taille `N` et qu'avec l'étape 1 on ait obtenu `Rcpt` le nombre de type Réél, `Bcpt` le nombre de type Budget, `Ecpt` le nombre de type Estimé
i:=0;

R0:=0;
B0:=R0+Rcpt;
E0:=B0+Bcpt;

R1:=B0-1;
B1:=E0-1;

while (i<E0) do
begin
     if (i>=R0 and i<= R1) then begin

                                case type(t[i]) of
                                
                                R : begin
                                    i:=i+1;
                                    R0:=R0+1;
                                    end

                                B : begin
                                    echange(i,B0);
                                    B0:=B0+1;
                                    end

                                E : begin
                                    echange(i,E0);
                                    E0:=E0+1;
                                    end

                                end

else if (i>=B0 and i<= B1) then begin

                                case type(t[i]) of
                                
                                B : begin
                                    i:=i+1;
                                    B0:=B0+1;
                                    end

                                E : begin
                                    echange(i,E0);
                                    E0:=E0+1;
                                    end

                                end
end;
0
L'idée est vraiment bien, je vais essayer de la mettre en place ce matin ;)
C'est vrai que le tri à bulles est celui dont la complexité est une des plus élevée mais bon, je sais que j'ai au maximum 10 éléments alors... mais un tri d'une complexité moindre ça ferait tout de même plus propre ;) !!
Allez, au boulot !
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
3 juil. 2009 à 13:55
Pour 10 éléments tu peux garder ton tri par bulle, il sera presque plus efficace de par sa simplicité, mais pour un plus grand nombre de valeurs (au moins une centaine) la complexité logarithmique s'imposerait !
0