• # listes et dictionnaires

    Posté par . En réponse au message Cherche structure de données adéquate. Évalué à 1.

    Je ne fais que des trucs simples en python et j'essaie de rester sur les types de base que viennent avec la "standard library". La plupart des problèmes peuvent être résolus avec les listes et les dictionnaires. J'utilise toujours ça comme design pattern, si bien que je peux comprendre comment mes vieux codes fonctionnent.

    Tu as une chiée d'évènements avec leurs structure de données, chacun ayant ses propres données. Pour ce genre de truc je fais un dictionnaire de dictionnaires : les données chaque évènements seraient un dictionnaire, je ferais donc un dictionnaire de ces dictionnaires avec pour clé un identifiant d'évènement. Voici pour la structure de données. Dans ton cas tu peux faire un dictionnaire d'objets.

    Tu as besoin d'un ordre chronologique. Pour ça ma solution standard serait une bête liste de listes. L'élément de base est une liste (ou tuple si la date de l'évènement ne peut pas changer, pas sûr que ça influence les performances) [ ]. La propriété du la liste de tels évènements c'est que quand tu tries ça ça trier d'abord par ordre du premier élément puis pas . C'est très simple et efficace. Avec cette façon de faire, la liste chonologique de tuples/listes est toujours "triée", il s'agit jute de trouver la bonne place dans la liste à l'ajout d'évènement (ça peut potentiellement être optimisé pour un algo par dichotomie, pas sûr de ce que les algos de tris de listes font en standard).

    Il est ensuite possible, sans trop se fouler, d'identifier périodiquement les évènements passés dans la liste. Et de les supprimer : dans la liste et dans le dictionnaire. Pour garder les données synchronisées.

    Pour la clé de dictionnaire "identifiant d'évènement" il faut être un peu malin pour éviter les doublons. Un bête +1 par rapport à la dernière entrée peut provoquer des overflows en C si la clé est un entier n bits, c'est un truc à prévoir possiblement.

    Voilà mes 2 cents, de ce que je fais pour mes développements simples sans grosses contraintes de performances. Tu peux essayer ça comme benchmark, en utilisant les fonctions standards associées à ces types de données, pour tester d'autres alternatives qui seraient plus performantes (en python et en C), que tu décides de jouer à l'échelle du type de données en créant un objet ou à l'échelle de fonction de tri.