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

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

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Citation Envoyé par bm Voir le message
    [...]
    L'algo ne commence pas avec des théories fumantes qui sortent d'un chapeau

    Tu as raison, l'algorithmique ne sort jamais d'un chapeau si on comprend ce qu'on fait et pourquoi on le fait. Si tu n'as pas de notions de base en algo tu ne pourras jamais construire de programmes efficaces. Si tu n'as pas une culture minimum en algo tu ne pourras pas construire de programmes efficients.
    Les notions de base s'acquièrent en lisant et en faisant et refaisant les exos classiques jusqu'à devenir intime avec les objets manipulés et les manipulations basiques. La culture ensuite, ma foi, elle s'acquiert en étant curieux et en lisant, puis en comprenant la démarche.
    L'expérience n'apporte pas grand chose de plus que la capacité à faire de bons choix plus tôt possible en connaissant les possibilités pour résoudre un problème donné avec les contraintes particulières.

    Pour en revenir à ton problème, on peut le décrire ainsi →
    • on a un ensemble V de nœuds
      chaque nœud possède au moins une propriété : ses coordonnées dans un plan
      le nombre de nœuds est une puissance de 2 moins 1;
    • un arête reliant deux nœuds aura un poids définit par W(u,v)=distance_euclienne(u.coordonnées, v.coordonnées);
    • tu dois construire un arbre binaire complet utilisant tous les nœuds dont la somme des poids des arêtes doit être minimisée qui a la propriété supplémentaire que sa représentation graphique soit planaire.


    Avec un peu de réflexion (et très rapidement) on peut penser à plusieurs approches :
    • diviser pour régner/programmation dynamique → peut-on raisonner en fonction de problèmes identiques de tailles inférieures ? est-ce que résoudre ce problème revient à résoudre deux problèmes de taille 2n-1-1 ? Les cas n<3 étant triviaux.
    • graphe → ça sent fort l'arbre couvrant avec des contraintes supplémentaires (planéarité, de type binaire complet), peut-on chercher du côté de chez Prim ou Kruskal ?
    • graphe → de la même manière ça sent aussi le dessin planaire d'un graphe, peut-on utiliser les algos Tarjan Hopcroft de reconnaissance ? doit-on par exemple essayer de construire un arbre binaire complet en reliant les feuilles (y compris par des arcs courbes) pour avoir un graphe triangulaire ?
    • graphe, algo géométriques → cette dernière remarque m'amène à la triangulation de Delaunay. Si tu construis un graphe triangulaire et que tu cherchais un arbre couvrant ? sans doute une autre piste à explorer …
    • idée à la con → si tu construis un arbre couvrant minimum, que se passe-t-il si tu en détermines les centres (le ou les nœuds qui sont équidistants des extrémités) ? Aurais-tu de bons candidats de racines pour commencer la construction de ta solution ?
    • la liste n'est pas exhaustive loin de là … à toi d'imaginer d'autres approches


    Les pistes sont nombreuses, les contraintes fortes, surtout en compétition où tu as une limite aux temps de refléxion et d'implémentations sans compter les limites matérielles (1s de temps cpu, 256MB de mémoire, …).

    Néanmoins c'est un très bon exercice qui va te permettre d'aborder de nombreux concepts avec lesquels tu n'es sans doute pas familier mais tu vas découvrir un monde assez magnifiques
    D'autant plus qu'on ne te demandes pas un algo efficient mais juste un minimum efficace …

  2. #22
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #                  __ h
    #            _ d _/    
    #                 \__ i
    #      b __/       __ j
    #      /   \ _ e _/    
    #  a __           \__ k
    #                  __ l
    #      \     _ f _/    
    #      c __/      \__ m
    #                  __ n
    #          \ _ g _/    
    #                 \__ o
    #                      
    #
    # Avec une numérotation :
    # a,b,c,d,e,f,g = 0,1,2,3,4,5,6
    # h,i,j,k,l,m,n,o = 7,8,9,10,11,12,13,14
    #
    # Cela donne 8 branches pour N=4 :
    # 0,1,3,7
    # 0,1,3,8
    # 0,1,4,9
    # 0,1,4,10
    # 0,2,5,11
    # 0,2,5,12
    # 0,2,6,13
    # 0,2,6,14
    Comment généraliser le codage des branches à l'ordre N pour passer à l'ordre N+1 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    N=3
    0,1,3
    0,1,4
    0,2,5
    0,2,6


    Indice : La transposition de matrice

    N=10
    La ligne 444 -> 0 2 6 13 28 58 118 237 476 954
    N=20
    La ligne 444 444 -> 0 2 6 13 28 58 117 235 472 945 1891 3783 7567 15135 30271 60544 121090 242181 484364 968730

  3. #23
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Ordonner les segments sécants et non sécants ne m'a pas plus avancé.



    Avec des cas particuliers pour N=3,4

    Des distributions de points sont compatibles, d'autres ne le sont pas :

    Nom : n4_sec2.png
Affichages : 412
Taille : 64,0 Ko

    En voilà un qui va au bout sans intersection :

    Nom : n4_sec0.png
Affichages : 392
Taille : 51,5 Ko


    Nom : n4_sec01.png
Affichages : 366
Taille : 53,0 Ko

    (12 minutes de calcul )

    Nom : n4_sec02.png
Affichages : 381
Taille : 55,4 Ko

    (29 secondes de calcul - N=5 peut aboutir )

  4. #24
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Nom : n5_sec00.png
Affichages : 368
Taille : 40,4 Ko

    Décomposition en plusieurs nuages à partir de N=5




    Nom : n5_sec01.png
Affichages : 339
Taille : 63,1 Ko

  5. #25
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    C'est le nombre de points qui rend possible , l'existence d'un arbre optimum.

    Nom : bin4.png
Affichages : 355
Taille : 37,7 Ko

    N=8 , et faudra beaucoup plus de points pour obtenir un binaire sans intersection

    Nom : bin8.jpg
Affichages : 376
Taille : 116,9 Ko

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

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Pourquoi n'essayes-tu pas de partir d'une triangulation ?

  7. #27
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Pourquoi n'essayes-tu pas de partir d'une triangulation ?
    L'arbre est construit de gauche à droite.
    Ce qu'il faut trouver c'est une grille de point de densité variable.

    Nom : test.jpg
Affichages : 351
Taille : 55,5 Ko

    L'algo "tout terrain" n'existe pas.
    Il y avait 7 nains pour plaire à Blanche Neige.


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

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Peux-tu expliquer un peu mieux ? Je ne comprends pas le sens de ta remarque.
    Avec une triangulation tu n'as plus le problèmes d'arêtes qui se coupent, même si cela ne te donne pas forcément la meilleure solution.

  9. #29
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Ci-dessus 1 point va en chercher 2 ( les plus proches en distance ).
    C'est déjà une optimisation ou triangulation.

    Un grille régulière, du style feuille de classeur à petit carreaux, ne donnera aucun
    arbre binaire.

    C'est un dallage spécifique, qui donnera un tracé ( sans faille ) pour un arbre binaire.

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

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Citation Envoyé par bm Voir le message
    Ci-dessus 1 point va en chercher 2 ( les plus proches en distance ).
    C'est déjà une optimisation ou triangulation.
    Ce n'est pas une triangulation … je te laisse lire cette partie de l'article de wikipedia sur l'application de la triangulation de Delaunay aux arbres couvrants de poids minimum dans le cas euclidien
    Cela te mettra peut-être la puce à l'oreille.
    Citation Envoyé par bm Voir le message
    Un grille régulière, du style feuille de classeur à petit carreaux, ne donnera aucun
    arbre binaire.

    C'est un dallage spécifique, qui donnera un tracé ( sans faille ) pour un arbre binaire.
    Je te renvoie à nouveau vers le lien donné ci-dessus.

  11. #31
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Wikipédia vulgarise des connaissances sous forme de compte rendu vague et décevant.

    Les algo ne se montent pas comme des chevaux dressés par l'écurie Wikipédia.

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

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Tsss ... je ne voulais que te redonner une piste pour te sortir de l'impasse tu sais. Ensuite c'est toi qui vois.
    Bon courage

  13. #33
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Pour moi, ça me fait penser au dessin 'classique' de poumons.
    Et du coup, voici une solution.

    Tous mes points sont dans le rectangle : 0<x <1 ; 0<y<1 et disons qu'on a 255 points pour la facilité des notations.
    Pour l'explication, j'ajoute un point R ( x= 0.5, y=1) ( le haut de la trachée si je me souviens de mes cours d'anatomie)
    Je choisis un point parmi mes 255 points. Je peux prendre un point au hasard, et l'algorithme marchera, je peux aussi prendre le point le plus proche du centre de gravité des 255 points, pour avoir un dessin qui ressemble au dessin de poumons, et je peux aussi prendre le point le plus proche possible de mon point R, si je veux avoir un arbre de longueur totale relativement courte.
    Soit A ce point, ce sera la racine de mon arbre.
    Pour les 254 points M restants, je calcule l'angle (AR,AM) , et je trie mes points selon cet angle. Les 127 premiers points détermineront un demi-arbre (le poumon gauche) et les 127 autres détermineront l'autre demi arbre.

    Et en répétant l'opération de façon récursive sur chaque partition, on obtient un arbre binaire, sans croisement, mais sans assurance d'avoir trouvé la longueur la plus courte.

    Pour détailler un peu, à l'étape 2, on a notre point A. Dans le demi-arbre de gauche, on cherche le point B le plus proche de A. Pour tous les points M de ce demi-arbre, on calcule l'angle (BA,BM), on trie les points selon cet angle ... ... etc, etc, et idem sur l'autre demi-arbre.


    L'algorithme marche pour des arbres binaires, mais aussi pour des arbres 'ternaires' ou 'quaternaires' ou de tout ordre.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  14. #34
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    on obtient un arbre binaire, sans croisement
    tbc92 :
    Rester en dessous de l'objectif n'est pas une défaite.
    Concernant ta méthode, ajoute une image du tracé de cet arbre.

    dailymotion.com/video/x4m27mc_italie-un-camion-fait-demi-tour-au-milieu-de-l-autoroute_auto

    La ligne ci-dessus se voit avec firefox , mais pas avec chrome.

  15. #35
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Je ne vais pas pouvoir travailler plus sur cet algorithme avant demain soir, voire mercredi ; donc pas de dessin à venir d'ici là.
    En fait, je pense qu'il y a une petite erreur. Je dis qu'on peut choisir un fils 'au hasard' dans chaque demi-arbre, et qu'il convient de choisir le fils le plus proche du père. J'ai un doute sur ce point. Si chaque demi-arbre a 255 ou 127 ou 63 points, pas de problème, ça va marcher.
    Idem, si on est au dernier niveau, ça va marcher.
    Mais si chaque demi-arbre a 7 , voire 15 points, ce n'est pas garanti. La solution qui marchera à coup sûr, c'est de réutiliser l'idée du balayage circulaire. Les points M sont classés selon l'angle (AR,AM), et il faut prendre comme fils le point médian (celui qui arrive au milieu quand on classe sur l'angle croissant) .

    Ca va rallonger la longueur moyenne de chaque branche, mais c'est le prix à payer pour avoir un algorithme simple.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  16. #36
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Décomposer un nuage de points en arbre binaire
    Bonjour,

    Je planche depuis plusieurs jours sur ce sujet intéressant, et crois avoir trouvé une démarche permettant d'accéder facilement à une série de solutions:
    1) Localiser l'isobarycentre (G) du nuage;
    2) Repérer les 3 points les plus proches;
    3) Classer les 15 - 3 = 12 points restants selon l'ordre croissant de l'angle polaire t = (ux , GMk) ;
    4) Appliquer les 4 triplets de points consécutifs ainsi obtenus (1, 2, ,3), (4, 5, 6) ... (10, 11, 12) aux extrémités du graphe (arêtes rouges):
    (4, 8, 9), (5, 10,11), (6, 12,13), (7, 14,15) qui, de cette façon, ne se recouperont pas.
    D'autres découpages sont possibles, en partant d'un autre point, par ex:
    (2, 3, 4) ... (11, 12, 1) ou (3, 4, 5) ... (12, 1, 2)
    5) Placer les 3 points initialement mis à part aux sommets encore disponibles de l'arbre (1, 2, 3); vérifier l'absence d'intersections (ici peu probables).
    Nom : Arbre_02.jpg
Affichages : 347
Taille : 9,3 Ko

    À chaque groupe de 4 triplets correspondent théoriquement 34*6 = 486 arbres différents, abstraction faite des éventuelles intersections des arêtes; il devrait subsister un bon paquet de graphes planaires.

    Il est par ailleurs bien possible que l'on puisse isoler au départ des points autres que ceux précédemment définis, pourvu qu'ils ne soient pas trop éloignés de (G).

    PS: Je découvre en postant ce message que tbc92 a exprimé une idée assez proche:
    La solution qui marchera à coup sûr, c'est de réutiliser l'idée du balayage circulaire. Les points M sont classés selon l'angle (AR,AM), et il faut prendre comme fils le point médian (celui qui arrive au milieu quand on classe sur l'angle croissant) .
    PS2: Je me suis demandé depuis si la méthode ne pourrait pas être étendue à n'importe quel point du nuage, et deux de ses plus proches voisins, le taux de réponses conformes (sans chevauchement des arêtes) étant d'autant plus faible que les 3 points choisis sont plus éloignés de (G). La longueur totale serait vraisemblablement plus élevée qu'auparavant.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  17. #37
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Quelque soit la méthode il faut un nuage de points assez gros.
    Les langages de programmation sont équivalents.

    Avec 2048 points ( total du nuage et N=10 ), c'est le grand côté de l'arbre qui diverge :

    Nom : bin10-a.jpg
Affichages : 354
Taille : 152,7 Ko

    Pour un arbre N5, il faut 3 ordres de points en plus ( N8=255 )



    Nom : bin10-b.jpg
Affichages : 365
Taille : 65,5 Ko

    La fin de l'arbre ( feuille ) consomme plus de points.

  18. #38
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Avec la méthode exposée plus haut, voici un résultat :

    Nom : img_arbre_binaire_00201920b.jpg
Affichages : 335
Taille : 132,5 Ko

    Au moment de la génération des points ( 127 ici), je ne vérifie pas la clause ' jamais 3 points alignés' D'où parfois une certaine ambiguïté sur certains segments.
    Pour chaque niveau, je fais un 'balayage circulaire' pour constituer des groupes.
    Sauf pour le dernier niveau. Quand j'ai un groupe de 3 points que je dois attacher à un point père Z, je prends le point P le plus proche de Z, qui va être rattaché à Z, puis les 2 autres seront rattachés à P.

    Le trait bleu vertical ne devrait pas apparaître si on s'en tient à l'énoncé de départ, mais je l'ai laissé pour la clarté de l'algorithme.
    Pour déterminer le point A, je classe les 127 points selon x croissant, et je prends celui qui arrive au rang 64. On a donc 2 demi-arbres : les 63 points de gauche, et les 63 points de droite.
    Le point R est à la verticale de A.

    Pour chaque point P du demi-plan de gauche, je calcule l'angle (AR, AP) et je trie selon cet angle Je fais en sorte de mesurer les angles entre 0 et 360°. Le point N arrive donc en premier, ( angle = 5° environ) et le point M arrive en dernier (angle = 179°), et celui qui arrive au milieu sera choisi comme fils de A. La demi-droite AB ( prolongée en rouge sur le dessin) sépare notre demi-arbre en 2 groupes de 31 points chacun.
    Et ainsi de suite.

    Pour l'étape suivante, pour effectuer le balayage circulaire, je vais prendre comme droite de référence la droite BA et non plus la droite AR...

    Edit : J'aurais voulu enlever la 2ème image ...mais je n'y arrive pas.
    Images attachées Images attachées  
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  19. #39
    bm
    bm est déconnecté
    Membre confirmé

    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
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Edit : J'aurais voulu enlever la 2ème image ...mais je n'y arrive pas.
    Supprimer image :
    Option supplémentaire / Gérer image

  20. #40
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Décomposer un nuage de points en arbre binaire
    Multiplier le nombre de points constitue une fuite en avant stérile, en raison de la croissance incontrôlable des possibilités de connexion; le nombre d'arbres binaires constructibles sur 15 points est déjà si élevé (15!/27 , soit env. 1.02E10 - en triant tous les doublets équivalents du type <i, j>/<j, i>) qu'il laisse peu d'espoir de trouver des graphes planaires par une énumération méthodique ou un tirage aléatoire - à moins d'user de restrictions drastiques.
    Et c'est de toutes façons sortir du sujet, qui impose 15 points de positions déterminées.

    La méthode décrite précédemment a fourni les résultats suivants:
    1°) la liste des distances (GMk):

    Nom : Liste_00.jpg
Affichages : 333
Taille : 26,9 Ko

    2°) la liste des points partiellement ordonnés selon l'ordre croissant de leur angle polaire:

    Nom : Liste_123.jpg
Affichages : 356
Taille : 85,2 Ko

    3°) les graphes planaires envisageables à partir de cette sélection:

    a) série (1): aucun graphe planaire envisageable, en raison des 4 points d'intersection des triangles (1, 2, 3) et (4, 5, 6) - notation abrégée. Ce critère d'élimination inattendu pourrait être inclus dans une recherche plus générale, basée sur la décomposition du nuage de points en 5 triangles.

    Nom : Série_01 - A.jpg
Affichages : 310
Taille : 22,9 Ko

    b) série (2): solutions à foison - il suffit de se baisser pour les ramasser; il y a ainsi 34 arbres planaires du type de celui représenté, par déplacement de l'avant-dernier sommet, dans chaque triangle; d'autres séries sont encore envisageables - mais pas toutes.

    Nom : Série_02 - A.jpg
Affichages : 272
Taille : 39,3 Ko

    c) série (3): les contraintes sont ici plus sévères, mais il existe encore des solutions, ainsi celle ci-dessous.

    Nom : Série_03 - A.jpg
Affichages : 322
Taille : 39,4 Ko

    Cherchez, et vous trouverez.

    D'autant qu'en ce qui concerne le choix des 3 premiers points, rien n'interdit de partir d'un triangle quelconque pourvu qu'il ne contienne aucun autre point du nuage (ils sont assez faciles à trouver - il y en a 228).


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

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