begin process at 2010 02 10 05:39:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Algorithme

 > 

Maths

 > 

Question pour un champion de maths


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Question pour un champion de maths

jeudi 31 août 2006 à 19:38:19 | Question pour un champion de maths

cantador

Membre Club
Bonjour à tous,

J'ai une liste de données de cette manière :
ex : 7 enregistrements :

           S1     S2

1        10      348
2        45      230
3        89      339
4        12      339
5        142    780
6        7        459
7        548    650

Comment faire pour trier numériquement de façon décroissante la série S2 de nombres et récupérer ensuite la première sans utiliser de table ni SQL et de manière très rapide ?

merci par avance.

cantador
jeudi 31 août 2006 à 21:35:18 | Re : Question pour un champion de maths

Loda

Membre Club
si tu n'as QUE 7 valeur a trier, un trie à bulle est bien assez rapide.

Si tu avais plus de valeur, ca vaudrait la peine de chercher un autre algo.

Mais la plus grosse question est:

Comment stock tu ces "enregistrement"? de quel type sont-il ?

si tu veux optimiser un try, commence par choisir un moyen de stockage adapté. Le mieux étant un tableau statique et un record d'integer je pense. à voir.

bon code,
jeudi 31 août 2006 à 23:03:14 | Re : Question pour un champion de maths

cantador

Membre Club
7 c'était juste un exemple, mais en fait  j'ai plus de valeur que çà.
C'est OK pour le tri à bulles..
bien sûr j'ai déjà fait qlqchose, mais ce n'est pas très bon.
un  record d'integer...intéressant..

je te précise que j'ai une totale liberté de stockage des nombres et je voudrais éviter le stockage table ou fichier texte.
Pour simplifier,on va considérer que j'ai  deux tableaux statiques
de 1 à n.
Voilà,  maintenant coment faire pour trier l'un en décroissance et récupérer la liste du deuxième sachant que les positions des nombres dans les deux sont évidemement liées.(tabA(1) en relation 1-1 avec tabB(1)....  tabA(n) avec tabB(n).

merci par avance pour le coup de main.

cantador
jeudi 31 août 2006 à 23:19:02 | Re : Question pour un champion de maths

florenth

Membre Club
Salut, Fais un tour ici : http://www.delphifr.com/codes/ALGORITHMES-TRI-RAPIDE-QUICKSORT-IMPLEMENTATION-FACILE_34509.aspx Non seulement tu auras l'algorithme le plus rapide (QuickSort) mais en plus, sa mise en place est archi simple ! Tu peux garder un "array of record", c'est une très bonne idée je trouve. Ou alors un "array of array[0..1] of Integer", ça marche aussi. PS: je n'ai pas mis d'exemple de tri décroissant dans ma source mais il faut juste changer la fonction de comparaison. Pose un commentaire si tu peines encore. A+ florenth
jeudi 31 août 2006 à 23:55:11 | Re : Question pour un champion de maths

cantador

Membre Club

Je connaissais déjà le QuickSort..
Mais ce n'est pas mon souci du moment..
Je souhaiterai trier en décroissant le premier tableau.
mais, mais mais mais ..

Comment faire pour que le 2e tableau soit affecté lui aussi par le tri du premier en gardant la relation avec les positions correspondantes.

Bref, un bon schèma valant mieux que..

ex: j'ai 

17   567
  8   728
45   459
             
je trie la première série cela donne :

         45   459
         17   567
           8   728

et je relie ma seconde liste (459, 567, 728)

Je pense que c'est plus clair maintenant.

 
            



cantador

vendredi 1 septembre 2006 à 08:07:24 | Re : Question pour un champion de maths

Emandhal

Dichotomie.
C'est simple, et il te dit si la valeur existe deja. dans ce cas, il te faut refaire une dichotomie par rapport au 2ème tableau (mais il faut changer les bornes de recherche
Perso je metterai dans une IntegerList (à créer mais c'est facile : descendant du TList en adaptant) parce que tu auras accès au Insert

Voilà, moi je ferais comme ceci :)

Tout problème a sa solution... Mais en général, celle que l'on trouve n'est jamais la bonne...

vendredi 1 septembre 2006 à 09:15:43 | Re : Question pour un champion de maths

Loda

Membre Club
tu évite de faire deux tableau si tu veux qqch de rapide. il te faut regrouper tes valeurs dans un seul type. note que le type integer est le plus rapide a gerer pour ton pc (plus rapide que byte malgré que byte soit plus petit) La source de florent devrait repondre à toute tes question. mais si tu veux un exemple de principe, tu peux déclare un truc genre TUneDonne = record s1 : integer; s2 : integer; end; TTabDonnes : array[1..n] of TuneDonne; function EstAvant (d1, d2 : TUneDonne) : boolean; begin // cette methode definit l'ordre de tri. result := D1.S1 < D2.S1; end; et ensuite tu reprend un code d'exemple de tri, en remplacer la comparaison "tab[i] > tab[1+1]" par la tienne "EstAvant(tab[i], tab[i+1])" c'est plus clair comme ça? jete aussi un oeil sur les pointeur de function (aussi appeler type function). Cela te permet d'avoir un seul code et de changer le critère de trie très très facilement. je te recommande de coder ton trie dans une unité a part afin de pouvoir changer facilement l'implementation par la suite. bon code,
vendredi 1 septembre 2006 à 17:28:52 | Re : Question pour un champion de maths

cantador

Membre Club

Je ne peux pas encore valider car je ne suis pas sûr que cela répond à mon souci.
Dans l'attente, merci pour votre aide.
A bientôt.

cantador

vendredi 1 septembre 2006 à 18:58:21 | Re : Question pour un champion de maths

florenth

Membre Club
Ben, oui, ma source foncitonne parfaitement bien et répond à ton problème. Faut lire avant de parler ! type TMonType = record S1, S2: Integer; end; var MonTab: array of TMonType; function TForm1.Arraycompare(Index1, Index2: Integer): Integer; begin if MonTab[Index1].S1 > MonTab[Index2].S1 then Result := -1 else if MonTab[Index1].S1 < MonTab[Index2].S1 then Result := 1 else Result := 0; end; procedure TForm1.ArrayExchange(Index1, Index2: Integer); var Temp: TMonType; begin Temp := MonTab[Index1]; MonTab[Index1]:= MonTab[Index2]; MonTab[Index2] := Temp; end; procedure TForm1.Button1click(Sender: TObject); begin with TQuickSort.Create(Arraycompare, ArrayExchange) do SortAndFree(Low(MonTab), High(MonTab)); end; Tu ne vas pas me dire que tu n'arrivais pas à faire ça en t'inspirant de mon exemple, non ? Le cahier des charges est rempli: je trie selon S1 (ordre décroissant) et cela affecte l'ordre de S2
vendredi 1 septembre 2006 à 18:58:29 | Re : Question pour un champion de maths

cantador

Membre Club
Voilà, c'est exactement la question soulevée par GrandVizir :
http://www.delphifr.com/codes/TRIER-LISTE-FONCTION-AUTRE_22063.aspx
avec source..

Mais ce dernier est en alpha et il faut écrire la même chose mais en numérique..

A+

cantador

1 2

Cette discussion est classée dans : question, maths, manière, champion


Répondre à ce message

Sujets en rapport avec ce message

Question en Maths [ par blanc76 ] Salut les amis. Soit N, X, Y des entiers données. je vais décomposé N en produit des facteurs premiers. puis je cherche toutes les probabilités de tel Question INSERT SQL DS un QUERY [ par WinLin ] Bonjour a tous,je code en dephi depuis quelque moiet lorsque j'insere des données dans une table je le fait toujour avec un composant tablede la manie Petite question sur les boutons [ par Francky23012301 ] Voila mon ptit problème :Je souhaite faire une procédureProcedure maprocedure;beginsi le bouton20 de la form 5 a été cliqué alorsbeginPour "si le bout Question : comment assigner un fichier [ par Francky23012301 ] Salut à tous,j'ai deux questions*A quoi sert assignfile exactement et quelle est sa structure ???*J'ai un edit avec un bouton parcourir je fais appara Question de Timing [ par Francky23012301 ] Salut à tous,Voila je me pose une petite question : imaginons que vous avez une procedure de ce type.Procedure Générale ;beginProcedure 1;Procedure 2e Question sur les streams [ par Francky23012301 ] Salut à tous,J'ai besoin de faire une application qui utilise les flux malheureusement il n 'y pas grand chose sur le sujet :Voila j'ai un serveur et Question de synthaxe [ par Francky23012301 ] Salut ,je voudrais connaitre la synthaxe exacte de sendmemory et sendbufMerci Question sur interbase [ par stu76 ] Bonjour à tous,Je travail avec interbase et j'ai plusieurs tables dans mon projet, ma question est comment peut-on faire pour éviter lors de l'exécuti Question Noire Et Blanche !!! [ par Nicolas___ ] Bonjour (Soir ...) , Bon voila ma question est peut etre idiote vu que peut etre elle n est pas possible a rep ms enfin ...Comme on dit qui ne tente r 2 question SQL interbase 6.5 [ par pastapaste ] bonjour  En fait j'ai 2 question SQL  1) peut on utiliser le create view ..........as .....       et ensuite l'utilser dans le meme requette sous delp


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales