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

Mathématiques Discussion :

Recherche du point le plus proche dans un espace à N dimension


Sujet :

Mathématiques

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Recherche du point le plus proche dans un espace à N dimension
    Bonjour,

    J'ai un problème assez simple à résoudre. Mais je ne trouve pas un méthode simple et propre.

    J'ai un nuage de points dont je connais les coordonnées dans un espace à N dimensions. Ce que je souhaite c'est pour un point donné, trouver le point de l'ensemble qui soit le plus proche.

    Mon ensemble de points n'évolue pas et je l'utilise ensuite pour approximer un très grand nombre de points. Je peux donc le structurer au départ même si ce travail de structuration est gourmand en terme de calcul. il ne sera fait qu'une fois.

    Je penche vers une sorte de dichotomie dans l'espace me permettant de trouver le point le plus proche avec une complexité de l'ordre de logNe Np étant le nbre de point dans mon ensemble de départ.


    Merci bcp pour tous vos tuyau

    Arnaud Megret

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Tu peux toujours utiliser un KD-tree, ça marche en ND et pour trouver les plus proches voisins, ça fonctionne pas trop mal.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ou un Quick Sort sur la distance (au carré, comme ça pas de calcul de racine)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    pour avoir le point le plus proche, il te suffit de parcourir tes points et de calculer la distance avec la métrique de ton choix. La plus répandue étant la distance Euclidienne.
    Sinon, si tu souhaites structurer tes points, tu peux tenter un petit Voronoï. Comme ça ton nouveau point appartiendra à une cellule et le point le plus proche sera parmi les points constituant la cellule.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Points : 105
    Points
    105
    Par défaut
    Si tu utilises pas trop de points et que tu dois déterminer souvent quel est le point le plus proche d'un autre :
    A chaque fois que tu introduis un point dans ton "sac", tu détermines son point le plus proche par test sur chacun des points. Tu associes le point trouvé au nouveau point. Si ce nouveau point est le point le plus proche du point trouvé, alors tu associes le nouveau point au point trouvé. Comme chaque point "pointe" sur son point le plus proche.
    Par contre c'est gourmand en espace mémoire si tu ne peux pas numéroter les points et si les coordonnées sont compliquées.

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos pistes.
    J'ai implémenté la méthode avec un KD-Tree.
    Dans sa phase préparatoire, cet algo divise la zone d'espace contenant les points en un arbre de zones imbriquées (hyper-pavés).
    Les feuilles consistent en un petit hyper-pavé contenant un seul point.

    La recherche consiste à trouver le pavé contenant le point recherché en partant de la zone racine. On suppose que le point le plus proche est le point du pavé.
    puis, on s'assure qu'il ne peut pas y avoir un point candidat meilleur dans une zone adjacente en remontant jusqu'à la racine.

    La complexité est en log(N) mais est très dépendante de la dimension de l'espace de recherche.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si tu veux une complexité de recherche relativement indépendante de la dimension, oriente toi vers un PAT tree, l'avantage est que c'est un arbre qui contient très peu de creux, quelle que soit la dimensiont (la séparation et la recherche se font en dimension 1, ce qui est rapide)

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

Discussions similaires

  1. Repérer le couple de points les plus proches dans des matrices
    Par lolo-40 dans le forum Mathématiques
    Réponses: 0
    Dernier message: 23/02/2014, 16h12
  2. Recherche de lieux les plus proches d'un point donné
    Par Quentz dans le forum Performance Web
    Réponses: 2
    Dernier message: 25/10/2013, 16h22
  3. [Complexité] recherche des n points les plus proches d'un point dans une liste
    Par Benoit_T dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/06/2009, 15h55
  4. Recherche du point le plus près dans un tableau de points (x,y,z)
    Par Vol dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 02/06/2006, 22h59
  5. Recherche de point le plus proche [façon optimal]
    Par norwy dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/10/2005, 17h15

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