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 :

Recherche de point le plus proche [façon optimal]


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 95
    Points : 42
    Points
    42
    Par défaut Recherche de point le plus proche [façon optimal]
    Bonjour,

    Comment trouver le point le plus proche à partir d'une liste de points de façon optimale ?

    Je pourrais bêtement boucler sur tous les point et définir le plus proche mais devant un grand nombre de points sur lesquels appliquer cette opération ce serait beaucoup trop lourd...

    Ma fonction aurait ce prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Point nearestPointFrom(Point localisation, Vector pointList);
    où localisation est le point à partir duquel on veut trouver le point le plus proche contenu dans la liste (vector) pointList.

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut Re: Recherche de point le plus proche [façon optimal]
    Citation Envoyé par norwy
    Je pourrais bêtement boucler sur tous les point et définir le plus proche mais devant un grand nombre de points sur lesquels appliquer cette opération ce serait beaucoup trop lourd...
    Et tu voudrais faire comment pour déterminer quel est le point le plus proche de ta localisation sans tous les regarder.......
    La seule "optimisation" qu'on puisse faire c'est de restreindre l'ensemble de recherche en partitionnant plus ou moins astucieusement l'espace et en admettant quelques heuristiques (il faut être prêt à accepter de ne pas être toujours parfaitement optimal). Evidemment ceci n'est valable que si on fait un nombre très important de recherche du point le plus proche.

    --
    Jedaï

  3. #3
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    Une autre optim est de stocker les points dans une structure de données autre qu'une liste (quadtrees par exemple). Fabriquer une telle structure n'est, comme le dit Jedaï:
    ... valable que si on fait un nombre très important de recherche du point le plus proche.
    Voir aussi ce topic:
    http://www.developpez.net/forums/vie....php?p=2192614

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Difficile de faire plus rapide que l'algorithme naïf. Calculer le carré de la distance d'un point à un autre n'est vraiment pas lourd. Tu peux essayer de commencer par comparer la distance horizontale à la plus petite distance déjà trouver. Ceci peut être intéressant, il faut tester la méthode pour savoir si c'est la cas ou non.

    Si le point de comparaison est toujours le même, alors là tu peut faire des optimisations intéressantes. Tu peux par exemple stocker tes points dans un conteneur ordonné.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    le problème va varier selon la fonction de croissance du nombre de points
    déja on peut munir l'espace d'une frontière ou rectangle enserrant tous les points

    quadriller l'espace en petits carrés
    le point le plus proche se situe dans le carré d'origine ou dans un carré
    contigu 4
    pour les carrés frontaliers on a 3 cotés à examiner
    si le nombre de points augmente on peut procéder ainsi
    j'ai un nombre de points connus 1000 000
    je délimite mon espace total
    je crée par exemple 10000 carrés (dont 400 frontières) je classe mes points
    je peux faire toutes mes comparaisons
    les nouveaux points calculés prendront place dans une liste spéciale
    égale à la taille de 5 carrés
    quand je veux rechercher le voisin de x
    j'ai la taille de mon espace et le nombre de carrés
    je peux calculer mon adresse
    je fais ma recherche dans mes 5 carrés si pas frontière plus ma liste
    spéciale
    quand ma liste atteint 105000 points je redispose l'ensemble
    le nombre de comparaisons nécessaires varie avec racine de x dans cet
    exemple si les points suivent une loi aléatoire
    par contre si les points suivent une loi de distribution différente
    il va falloir considérer des zones denses et des zones désertiques
    là il faudra jouer sur un effet de zoom
    avec des zones de quadrillage plus ou moins fin
    Elle est pas belle la vie ?

Discussions similaires

  1. 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
  2. [XL-2003] -debutante-Rechercher la somme la plus proche d'une certaine valeur
    Par brindacier dans le forum Excel
    Réponses: 3
    Dernier message: 29/07/2009, 22h37
  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 proche dans un espace à N dimension
    Par arnoldo165 dans le forum Mathématiques
    Réponses: 6
    Dernier message: 15/04/2008, 00h06
  5. 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

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