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 :

Décomposer un nuage de points en arbre binaire


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut Décomposer un nuage de points en arbre binaire
    bonjour,

    Je cherche une méthode ou plusieurs pour décomposer un nuage de points en arbre binaire.
    C'est un exo d'une olympiade Fario 2016 :

    Nom : lumi.png
Affichages : 734
Taille : 27,4 Ko

    J'ai vu beaucoup de généralités sur des arbres.
    Pour extraire des data et construire des arbres, c'est très pauvre dans ce domaine.

    @+


  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    On dirait un codage de Huffman.

    Tu prends les 2 plus petites distances, puis les 2 nouvelles plus petites, puis les 2 nouvelles plus petites, puis les 2 nouvelles plus petites, puis les 2 nouvelles plus petites, puis les 2 nouvelles plus petites...

  3. #3
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    Huffman, pas facile de coder ..

    Je vais partir d'un arbre fixe et placer les points de manière aléatoire.
    C'est la non intersection du segment N ,avec les N-1 précédents, qui validera la position de ce point.

    Valider la non intersection de [AB] avec [CD] demande déjà pas mal de paramètres de position


  4. #4
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour,
    tu sais donner au moins un lien vers le sujet à défaut de le copier est une bonne chose.

    À la base j'ai vu ton schéma et je me suis dit «tient, une sorte d'arbre k-d», puis je me suis dit cherchons quand même l'énoncé pour voir de quoi il s'agit.

    J'ai trouvé ça ce sujet.

    Alors par exemple, l'information que l'arbre doit être complet est une information importante … celle d'avoir à minimiser la longueur total de fil l'est aussi … que les fils ne se coupent pas (pas de 9-14 avec un 8-13) … et j'en passe comme N≤10.

  5. #5
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    C'est un exo d'une olympiade Fario 2016 :
    http://orac.amt.edu.au/fario/

  6. #6
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bon, nous parlons donc bien du même sujet.

    Je peux te donner les orientations qui me viennent directement en tête face à ce genre de problème. En première approche je me dis qu'un arbre binaire complet est aisément représenté sous forme de tableau →
    • racine à l'indice 1
    • fils gauche en 2*i où i est l'indice du père
    • fils droit en 2*i+1, i étant l'indice du père


    Je place la racine en 1 pour simplifier un tout petit peu les calculs, mais on peut tout aussi bien prendre pour convention indice de la racine en 0.

    Un nœud contient comme informations (algo en pseudo c) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct node {
      int id; // l'id du nœud
      int x; // abscisse
      int y; // ordonnée
    }
     
    struct node tree[1<<N];
    Le problème est symétrique → en échangeant les fils gauche et fils droit on ne change en rien le candidat à la solution.

    Le problème consiste donc à pouvoir construire des arbres respectant les contraintes et de cette suite d'arbres garder celui qui minimise les longueurs de fils.

    Il faut donc se balader dans les différentes permutations possibles → danger d'explosion combinatoire.
    On peut le faire de différentes manières. Soit on considère le tableau dans son entier, on génère des permutations, on vérifie ensuite que les contraintes ne sont pas violées (approche top bottom). Si une contrainte est violée à un niveau de l'arbre on pourra peut être sauter relativement tôt une bonne partie des permutations (pas assuré). Par exemple, en choisissant comme racine 1, fg 2 et fd 3 on va sauter toutes les permutations commençant par 12 car deux est isolé et il n'y a aucun autre nœud que l'on peut rattacher à 2 sans violer de contraintes.
    Soit on commence par créer les combinaisons par étages en commençant par le bas et en construisant récursivment l'arbre vers le haut. C'est juste une autre façon de parcourir les permutations. Une idée à tester.
    Le problème avec ce genre d'approche est l'explosion combinatoire l'espace de recherche peut être suffisamment grand pour dépasser le temps imparti.

    Comme tu n'est pas obligé de trouver une meilleure solution, tu peux essayer des algos d'approximations.

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

Discussions similaires

  1. Afficher un arbre binaire avec sa structure
    Par PhoneKilleR dans le forum C
    Réponses: 7
    Dernier message: 23/04/2008, 23h24
  2. suppression d'un arbre binaire
    Par NomUtilisateurDejaPris dans le forum C
    Réponses: 11
    Dernier message: 16/02/2004, 10h05
  3. [Arbre binaire de Recherche]
    Par Giovanny Temgoua dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/02/2004, 11h45
  4. Arbre binaire
    Par Heaven dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/02/2004, 19h01
  5. [LG]probleme de creation arbre binaire
    Par jsaviola dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2004, 20h57

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