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étermination de l'appartenance d'un point à un carré


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Détermination de l'appartenance d'un point à un carré
    Bonjour à tous,

    Je dispose d'un série de carrés formant une grille carrée de N carrés par N carrés. N est impair et peut aller jusqu'à 11 ou 13 grand maximum, mais je n'ai cette information qu'à l'exécution.
    Je dois déterminer à quel carré appartient chaque point d'une liste de coordonnées.
    Rien de compliqué en approche naïve, sauf que la liste à traiter contient plus d'un million de points, et qu'il faut donc soigner les performances de l'algorithme.
    Je pensais éventuellement travailler par dichotomie ou groupes de carrés pour éliminer des cas plus rapidement, mais je ne vois rien d'autre. Y a-t-il quelque chose d'optimal?
    Things working well, no problems. Time to upgrade.

  2. #2
    Rédacteur/Modérateur

    Tu as NxN carrés.
    Tu es en dimension 2 ; chaque point (1 Million de points) est connu par (x,y) et les carrés aussi sont donnés par des équations en x,y.

    Je fais une hypothèse : les carrés sont parallèles aux axes. Ca simplifie les calculs, et c'est une hypothèse très plausible. Si ce n'est pas le cas, tout ça va s'adapter, mais ce sera un peu plus compliqué.

    Déjà, peux-tu confirmer si c'est le cas.
    Ensuite, oublie la dichotomie, c'est BEAUCOUP plus simple que ça.
    Enfin pour continuer le 'débat', peux tu proposer des notations, pour ta série de 13x13 carrés. Pour qu'on parle directement dans le langage qui te convient le mieux.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre régulier
    Alors, les carrés sont effectivement tous parallèles aux axes.
    Je n'ai pas spécialement de notation idéale en tête.
    Du coup, tu m'as fait un sacré teasing avec ton "BEAUCOUP plus simple".
    Je me demande si ça ne va pas tout simplement passer par une multiplication/division par un facteur représentant la ligne ou la colonne du carré, à comparer avec les coordonnées du point. Mais ce sont des opérations coûteuses...
    Things working well, no problems. Time to upgrade.

  4. #4
    Rédacteur/Modérateur

    X0 = l'abscisse du 1er coin du 1er carré.
    Y0 = l'ordonnée du 1er coin du 1er carré.
    L = la largeur (ou la longueur) de chaque carré.

    X,Y les coordonnées du point cherché.

    trunc( (X-X0)/L ) et trunc ( (Y-Y0)/L) vont te donner le n° de ligne et le n° de colonne de ton carré.
    Attention aux +1 à ajouter éventuellement, si les numérotations ne commencent pas à 0 ou des pièges du genre.

    Oui, il y a une division pour chaque calcul. Mais même si une division est un peu plus coûteuse qu'une addition, ça me paraît vraiment le plus efficace.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre régulier
    Ok, c'est compris. Merci!
    Things working well, no problems. Time to upgrade.

###raw>template_hook.ano_emploi###