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 :

Calcul de distance entre deux points


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Calcul de distance entre deux points
    salut les amies
    j'ai un exercie,
    ecrire un algorithme qui calcul la distance entre n points est a la fin il compare ces distances et dire qu'elle la plus petite.
    est ce que quelqu'un peut m'aider a résoudre ce probléme .
    et merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    Bonsoir c'est pas très compliqué.
    1 la distance on peut la calculer avec le théorème de Pythagore
    2 ensuite en ayant calculé la distance de chaque point il faut les mémoriser dans un tableau de n éléments.
    3 puis avec une méthode de tri du tableau il suffit de ranger le tableau de la plus petite à la plus grande...

  3. #3
    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
    Citation Envoyé par Mat.M Voir le message
    1 la distance on peut la calculer avec le théorème de Pythagore
    2 ensuite en ayant calculé la distance de chaque point il faut les mémoriser dans un tableau de n éléments.
    3 puis avec une méthode de tri du tableau il suffit de ranger le tableau de la plus petite à la plus grande...
    Version 2
    1 la distance on peut la calculer avec le théorème de Pythagore
    2 tu stockes la plus petite au fur et à mesure dans une variable (min) qui tu (ça évite un tableau et un tri).
    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.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    Bonjour après coup j'avais oublié de préciser qu'il faut faire une double imbriquée et tester pour chaque point
    une version sophistiquée serait de prendre peut-être l'algorithme de Djykstra ?

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut
    Si tu as juste besoin de trouver la distance la plus petite, tu calcules les n*n distances en gardant en mémoire la plus petite distance rencontrée. A la fin, tu retournes simplement cette distance. Cette algorithme ne peut pas être amélioré : tu es obligé de faire au minimum ces n*n (en fait n*(n-1)) itérations.

  6. #6
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Si il est possible d'améliorer le schmilblick : il n'est pas nécessaire de calculer toutes les distances, leur carré suffit
    On retournera la racine carrée du plus petit carré de distance
    -- Yankel Scialom

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut
    Oui mais la complexité reste la même Ce que je veux dire c'est que n*n est la complexité minimale.

  8. #8
    Membre actif Avatar de Acrim
    Profil pro
    En recherche d'emploi
    Inscrit en
    Septembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Septembre 2010
    Messages : 134
    Points : 204
    Points
    204
    Par défaut
    Si on part du principe que les distances sont symétriques il n'y a alors que n*(n-1)/2 distances à calculer.

    Est il possible de faire mieux ? Je pense que oui (vous me direz ce que ça vaut).

    Etape-1 : Choisir un point A (parmi les n points)
    Etape-2 : Calculer la distance entre A et les (n-1) autres points
    Etape-3 : Trier les points par distance croissante (par rapport à A) dans un tableau allant de 0 à n-1 (le point A étant dans la première case).
    Etape-4 : Pour chaque points i, calculer distance(i,j) avec j>i et j<n (en retenant la minDist au fur à mesure).

    Bon jusqu'à là on a rien amélioré, sauf si on rajoute la condition d’arrêt:
    j<n et distance(A,j)-distance(A,i)< minDist (distance(A,j)-distance(A,i) étant une borne min de la distance séparant i et j).

    Ça ne réduit pas la complexité dans le pire des cas. Mais en moyenne on doit quand même éviter quelques calculs.
    « La science informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes. » — Edsger Dijkstra

  9. #9
    Membre actif Avatar de Acrim
    Profil pro
    En recherche d'emploi
    Inscrit en
    Septembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Septembre 2010
    Messages : 134
    Points : 204
    Points
    204
    « La science informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes. » — Edsger Dijkstra

  10. #10
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut
    Effectivement il existe des algos sympas en O(n*log n).

    Je trouve ce PDF bien expliqué : http://people.cis.ksu.edu/~subbu/Pap...est%20pair.pdf

    Et une implémentation Java + explications ici : http://www.baptiste-wicht.com/2010/0...eep-algorithm/


  11. #11
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Oui mais la complexité reste la même
    La complexité est une notion chère aux spécialistes de l'algorithmique théorique. Mais pour ceux qui font du calcul numérique concret, ça ne correspond souvent pas à grand chose.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  12. #12
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut
    Oui enfin sur un forum d'algorithmique, il me semble que la notion de complexité en temps / espace a droit de cité.

    Sinon qu'entends-tu quand tu dis que ça ne correspond souvent pas à grand chose ?

  13. #13
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Prenons un algorithme quelconque. Divisons (quelque soit la taille du problème) le nombre d'instructions nécessaire par 1000 pour obtenir un nouvel algorithme. Et bien ces deux algos auront la même complexité.

    Considérer la complexité dans le pire des cas est une chose, considérer celle dans le cas moyen et bencher le programme résultant en est une autre. Les deux sont nécessaires, et cracher sur l'un tout en vénérant l'autre c'est un peu comme tenir le Théâtre en sainte estime et laisser Molière être enterré dans la fosse commune.

    J'espère que l'analogie vous fera sourire
    -- Yankel Scialom

  14. #14
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 77
    Points
    77
    Par défaut
    Heu oui d'accord. Bien sûr il s'agit de description asymptotique, mais elles donnent aussi une idée claire de l'évolution du temps d'exécution en fonction de la taille de l'entrée.

    Sauf pour des entrées à taille quasiment fixe, je vois pas trop comment discuter d'une telle notation surtout que pour des tailles faibles, le temps humain consommé est généralement négligeable ...

  15. #15
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Sinon qu'entends-tu quand tu dis que ça ne correspond souvent pas à grand chose ?
    mais elles donnent aussi une idée claire de l'évolution du temps d'exécution en fonction de la taille de l'entrée.
    Il y a quelques années, j'ai fait un petit test; j'ai mesuré le temps d'exécution pour la résolution de systèmes linéaires de taille 128, 256, 512, 1024, 2048, etc. En principe, le graphe des valeurs obtenues aurait dû être celui d'un polynôme du 3ème degré; en fait, la courbe présentait une discontinuité qui s'expliquait par le fait qu'au delà d'une certaine taille, Windows stockait des morceaux de la matrice sur le disque dur (sans avertir l'utilisateur) et que les transferts prenaient beaucoup de temps.
    La théorie, c'est très beau, mais la réalité est dans la pratique.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

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

Discussions similaires

  1. Calcul de distance entre deux points sur une carte ( openlayers)
    Par Atika90 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/08/2013, 16h27
  2. calcul de distance entre deux points.
    Par jamsgoodon dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 31/05/2010, 15h06
  3. calculer la distance entre 2 point en c++
    Par chabeka dans le forum Débuter
    Réponses: 6
    Dernier message: 10/02/2009, 19h50
  4. [Base de données Spatial] Distance entre deux points
    Par Pumpkins dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/11/2006, 12h18
  5. Calcul de distance entre deux points en WGS84
    Par marieR dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2006, 17h07

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