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

C++ Discussion :

Liste chainee avec index/indices


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 31
    Par défaut Liste chainee avec index/indices
    Bonjour a tous,
    Mon interrogation est la suivante;
    Je souhaiterai faire une Liste (doublement) chainee, et atteindre le 5iem element de ma liste directement avec un indice. Donc au lieu de parcourir du debut et faire "->Suivant" jusqu'au 5iem element, je souhaiterai savoir si il est possible de faire plutot un truc du genre:

    Val1 = emplacement memoire du premier element.
    X = Taille d'un element de ma liste
    Val5 etant l'emplacement du 5iem element.

    Val5 = Val1 + (5 * X) //ceci pour le 5iem element


    Et donc apres lire les differentes valeurs dans mon elemment a partir de son emplacement memoire.

    On pourrait penser que je pourrai utiliser directement des tableaux, mais en fait je travaille sur des nuage de points tres volumineux (300000 points par exemple).
    Mes questions sont: Cela est il possible? Si oui, ou puis-je trouver des exemples ou des references?

    Remarque: il 'est inenvisageable de parcourir avec des "->Suivant" ou "->Precedant" vu le nombre de fois que j'aurais a parcourir ma liste plutot volumineuse.

    Merci de votre attention.

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 31
    Par défaut
    Merci de ta reponse plutot rapide,
    Je ne connais pas trop cette chose mais a premiere vue cela semble interessant. Je regarde plus en profondeur pour voir si cela me convient.
    En esperant que oui ... ^^
    Merci encore

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par eagl1 Voir le message
    On pourrait penser que je pourrai utiliser directement des tableaux, mais en fait je travaille sur des nuage de points tres volumineux (300000 points par exemple).
    Oui, et alors ? Ton PC fonctionne bien avec un tableau géant d'environ un milliard d'entrées, communément appelé "RAM"... Et ça marche très bien !
    C'est plutôt en utilisant des listes que tu vas ralentir tes performances, SAUF si les ajouts/suppressions sont courants dans ta structure (chose que tu n'as pas précisée).

    Et même si c'était le cas, pour ma part, j'utiliserais un container "maison" pour ça, c'est à dire un container hybride genre "vecteur de listes de vecteurs" permettant un morcellement des données (= fragmentation) tout en réduisant drastiquement le temps d'accès direct (ou "aléatoire") aux données.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Oui, et alors ? Ton PC fonctionne bien avec un tableau géant d'environ un milliard d'entrées, communément appelé "RAM"... Et ça marche très bien !
    C'est plutôt en utilisant des listes que tu vas ralentir tes performances, SAUF si les ajouts/suppressions sont courants dans ta structure (chose que tu n'as pas précisée).

    Et même si c'était le cas, pour ma part, j'utiliserais un container "maison" pour ça, c'est à dire un container hybride genre "vecteur de listes de vecteurs" permettant un morcellement des données (= fragmentation) tout en réduisant drastiquement le temps d'accès direct (ou "aléatoire") aux données.
    De meme

    Et oui si le nombre d'entrees est Fixe (ou aproximativement connu a l'avance) le tableau est une tres bonne solution !
    En revanche si sa taille peut varrier de tout a rien il serait catastrophique pour les perfs d'utiliser un tableau que tu dois realouer.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Sémantiquement parlant, un tableau et une liste (doublement chainée ou non) évoquent deux choses bien distinctes ayant des propriétés et des capacités qui leur sont propres...

    L'un est en accès aléatoire, l'autre en accès séquentiel, potentiellement dans les deux sens.

    L'un permet un accès rapide à un élément donné, mais demande énormément de temps en cas d'insertion (y compris en fin de tableau) alors que l'autre mettra plus de temps à atteindre un élément donné au départ de n'importe où mais donne l'assurance qu'une insertion, quel que soit l'endroit, sera effectuée quasiment en temps constant

    Ce qu'il faut, c'est arriver à te faire une idée précise de ce que tu passera le plus de temps à faire, histoire de maximiser au mieux les performances.

    Maintenant, il reste peut être une solution alternative qui te permettra de retrouver un élément donné aussi rapidement que dans un tableau (grâce à la dicotomie): le tableau binaire, qui peut être une solution à envisager
    Citation Envoyé par Mac LAK Voir le message
    Oui, et alors ? Ton PC fonctionne bien avec un tableau géant d'environ un milliard d'entrées, communément appelé "RAM"... Et ça marche très bien !
    C'est plutôt en utilisant des listes que tu vas ralentir tes performances, SAUF si les ajouts/suppressions sont courants dans ta structure (chose que tu n'as pas précisée).
    L'usage des tableaux présente malgré tout une limite que, pour autant que les éléments soient "suffisamment importants" (en terme de place utilisée en mémoire), les listes sont en mesure de dépasser: Le fait que tous les éléments d'un tableau utilise un espace mémoire contigus.

    Comme il faut malgré tout prendre en compte le fait qu'une application donnée fonctionne régulièrement en même temps que d'autres, on ne peut exclure l'impossibilité de trouver un espace mémoire suffisant pour représenter de manière contigüe l'ensemble des éléments.

    Par contre, il reste malgré tout beaucoup plus facile de trouver X fois quelques bytes "éparpillés" en mémoire que de trouver un espace capable de contenir X fois ces quelques bytes, même si la structure à représenter demande 8 (ou 16) bytes de moins (qui correspondent, tout simplement, aux référence vers l'élément précédent et l'élément suivant)
    Et même si c'était le cas, pour ma part, j'utiliserais un container "maison" pour ça, c'est à dire un container hybride genre "vecteur de listes de vecteurs" permettant un morcellement des données (= fragmentation) tout en réduisant drastiquement le temps d'accès direct (ou "aléatoire") aux données.
    Effectivement, une forme hybride peut souvent s'avérer être "la moins mauvaise solution"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Effectivement, une forme hybride peut souvent s'avérer être "la moins mauvaise solution"
    Je le pense aussi : partir sur un tableau, qui est l'entrée unique d'une liste chaînée.
    A l'insertion, quel que soit l'endroit, on "coupe" le tableau en deux éléments (=> de deux à trois entrées dans la liste) au point d'insertion, et on crée un nouveau tableau pour les nouvelles données. Chaque élément de la liste doit simplement connaître la taille du tableau associé afin de pouvoir surcharger l'opérateur [] correctement.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    @Mac Lak
    A combien de temps évaluerais-tu la création d'un tel template? Avec sa batterie de tests unitaires et ces méthodes de base :

    insert(int, object)
    size()
    push_back(object)
    remove(int)
    at(int)
    operator []

    Sans forcément considérer toutes les features d'une collection,les iterators et tout ça?

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En fait, c'est le genre de choses pour lesquelles je verrais plus un arbre binaire de recherche (cousu si nécessaire, mais ça n'est pas forcé: des algos de parcours itératif existent) qu'une liste...
    L'accès par index et l'insertion/suppression se feront en temps logarithmique...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liste chainee avec le mot cle THIS
    Par mutkas10 dans le forum C++
    Réponses: 3
    Dernier message: 24/02/2012, 21h18
  2. [Conception] Listes chainées avec plusieurs champs
    Par Nasky dans le forum Général Java
    Réponses: 6
    Dernier message: 11/03/2006, 23h52
  3. problème de pointeur avec les listes chainees
    Par innosang dans le forum C
    Réponses: 9
    Dernier message: 30/12/2005, 15h46
  4. Probleme avec les double Liste chainees
    Par BernardT dans le forum Langage
    Réponses: 1
    Dernier message: 12/07/2005, 17h22
  5. [LG]Listes chainées avec pointeur
    Par PaowZ dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2004, 19h49

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