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

Algorithmes et structures de données Discussion :

Intersection d'ensemble trié


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 95
    Par défaut Intersection d'ensemble trié
    Hello,

    j'ai deux ensemble triés.

    J'aimerai faire leur intersection, c'est à dire le nombre d'éléments qu'ils ont en commun.

    En utilisant des listes, j'ai fait un algo qui avance dans la liste qui a l'élément le plus petit.

    J'accèlère grandement le traitement si j'utilise des set (avec hachage donc).

    Seulement, je n'utilise plus le fait que mes ensemble sont déjà triés (par construction en fait)

    Je me demande s'il n'y a pas un moyen d'accélerer encore le traitement (cette fonction occupe 80% du temps de mon algo :s)

    merci

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    1. Tu places un curseur au début de chaque liste
    2. Tu compares les valeurs pointées par les curseurs
    3. Tu avances le curseur qui pointe sur la plus petite valeur (ou les 2 en cas de match)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    L1 = 1           5     7            11      13
    L2 =    2        5  6           10          13
     
    (^,^)   --> avancer dans L1 et L2      
    (1,2)   --> avancer dans L1
    (5,2)   --> avancer dans L2
    (5,5)   --> [MATCH] avancer dans L1 et L2
    (7,6)   --> avancer dans L2
    (7,10)  --> avancer dans L1
    (11,10) --> avancer dans L2
    (11,13) --> avancer dans L1
    (13,13) --> [MATCH] avancer dans L1 et L2
    ($,$)   --> fini
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 95
    Par défaut
    Ouep, c'était mon premier algo.
    Mais il est plus lent que en utilisant les hash set

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Ah ok. Pour des optimisations plus poussées il faut utiliser la forme de tes ensembles: taille, densité, etendue de l'intersection, ...

    Si les HashSet sont plus rapide, je suppose que c'est parceque tu as bcp de données dans tes ensembles.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 95
    Par défaut
    C'est très hétérogène.

    La moyenne est d'environ 50, mais il y en a beaucoup avec un seul élement (la moitié) et donc quelques uns avec beaucoup d'éléments..

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Si les HashSet sont plus rapide, je suppose que c'est parceque tu as bcp de données dans tes ensembles.
    Quel est ton raisonnement?

    (Perso, je n'ai pas assez de renseignements pour emettre une opinion).

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Quel est ton raisonnement?
    Les hashset accelerent la recherche d'un element parmis n. Si c'est plus rapide que l'algo sweep, c'est surement qu'il y a peu d'element commun par rapport au nombre total d'elements. Enfin bon, c'est un peu du pif aussi
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. intersection d'ensemble avec liste en dur
    Par yoyo173fr dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/11/2008, 17h31
  2. Intersection d'ensembles de points en 3D
    Par dodup64 dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 04/03/2008, 23h35
  3. Ensemble trié/triable avec contrainte d'unicité
    Par teletexte dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 27/02/2008, 15h40
  4. Réponses: 8
    Dernier message: 27/11/2006, 16h46
  5. Problème d'intersection de 2 ensembles
    Par Premium dans le forum Langage
    Réponses: 6
    Dernier message: 19/06/2006, 14h54

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