IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Fonction de tri array


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut Fonction de tri array
    Bonjour

    J'ai déclaré ce nouveau type pour extraire les mots un fichier texte leurs positions le problème c'est le tri
    comment je peux les triés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      type
      TListDesMots = record
        LeMot : string;
        Sapos : cardinal;
      end;
     
    Var
     ListDesMots:array[0..131071]of TListDesMots ;
    j'ai cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
           SortArray(ListDesMots, 0, SizeOf(ListDesMots[Low(ListDesMots)]),
      0,wcunt-1  , ComparePersons);
    mais lorsque il s'agi de 80000 mots elle devient un peu lente et il y a ce message "Stack Overflow..."

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Pourquoi ne pas essayer de faire en sorte d'ajouter le mot à sa bonne place dans le tableau ?

    Dans la logique on récupère le mot, on détermine l'indice où il devrait être avec une recherche dichotomique puis on insère le mot à l'indice prévu.

  3. #3
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Bonjour
    Cette recherche dichotomique peut trier les mot si le nombre et inconnu ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Je ne suis pas sûr d'avoir bien compris la question mais la recherche dichotomique est une fonction de recherche pas de tri. Cependant dans mon idée on va utiliser cette recherche pour positionner "just in time" les enregistrement à leur bonne place dans le tableau au moment où l'on veut ajouter un nouvel enregistrement au tableau.

    Peut-être que c'est la notion de recherche dichotomique que tu ne visualises pas, c'est en fait une autre méthode de recherche que celle linéaire mais qui nécessite de travailler sur un tableau trié au préalable. Fais une recherche dans google pour plus de détail sur son algorithme.

  5. #5
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Merci je vais essayer le B-TREE

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Salut,

    Pour la recherche dichotomique suggérée par Aka Guymelef tu peux par exemple t'inspirer du code de la function IndexOfSL3(SL : TStringList; const S: string): Integer; qui se trouve ici (dans la 2ième moité du message du 21/07/2007, 15h15 ) : http://www.developpez.net/forums/sho...exofSL3&page=2
    ... il s'agit du code qu'on a trafficoté pour remplacer la function standard IndexOf pour gains de vitesse.
    ... mais attention il faudrait la remodeler :
    - d'une part pour effectuer la recherche dans ta ListDesMots : array[0..131071]of TListDesMots (relativement simple);
    - et d'autre part de sorte qu'elle renvoie l'Index de la bonne position d'un mot qui n'y figure pas encore (faut trouver une astuce)(*) car la fonction en son état actuel renvoie seulement l'index d'un mot qui y figure déjà.

    A+

    EDIT du 8 mai : (*) : Comme l'idée d'Aka Guymelef consiste, me semble-t-il, à placer chaque nouveau mot à ajouter dans le tableau à l'index correspondant à sa bonne place lors et au fur et à mesure de la création du tableau de sorte que le tableau soit d'entrée de jeu toujours dans l'état trié, les modifications à apporter à IndexOfSL3 consistent :
    - en une simplification : suppression de la partie if Not Sorted then ...
    - et pour qu'elle renvoie l'Index de la bonne position d'un mot qui n'y figure pas encore il faudrait à première vue ajouter une variable Cprec: Integer qui mémorise la valeur prise lors du tour de boucle précédent par la variable C lors des comparaisons if SL[i] < S then C:=-1 else if SL[i] > S then C:=+1 else C:=0; et de détecter le moment où C change de signe (if C<>Cprec) et qui correspond à +/- 1 unité à la valeur de l'Index de la bonne position recherchée, puis pour savoir si cet index est égal à i, i+1 ou i-1 suffit de faire un test sur une liste d'une dizaine de mots pour effectuer le calibrage.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. [Faq(?)][VB6] Fonction de tri.
    Par méphistopheles dans le forum Vos contributions VB6
    Réponses: 2
    Dernier message: 29/03/2006, 23h17
  2. Fonction de tri
    Par max2245 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 13/01/2006, 00h28
  3. Problème avec une fonction et un array
    Par Neal Morse dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/08/2005, 12h04
  4. fonction de tri par introspection
    Par ned-flanders dans le forum C++
    Réponses: 7
    Dernier message: 21/10/2004, 11h49
  5. Réponses: 2
    Dernier message: 08/04/2004, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo