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 :

Supprimer rapidement des droites confondues


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Supprimer rapidement des droites confondues
    Bonjour à tous,

    J'ai un modèle éléments finis 1D dans lequel je dois vérifier que des éléments ne sont pas confondus. Pour ceux qui ne serait pas familier avec le langage, un élément 1D c'est une droite (ou segment pour les puristes) avec deux nœuds (deux points).

    Je suis partie du principe que deux droites sont confondus si et seulement si leurs équations réduites sont identiques (facile ).
    Je dois pour chaque éléments définir l'équation réduite et ensuite les comparer les unes aux autres .

    Le soucis c'est qu'en terme d'algo c'est assez violent surtout si j'ai des milliers voir des millions d'éléments (c'est normal d'avoir un modèle avec 1 million d'éléments).

    Dans un soucis de performance je viens vers vous afin que vous m'orientez vers une solution optimale qui me permettrait d'isoler assez rapidement les éléments qui sont susceptibles d'être en double pour ensuite les traiter (autrement dit : les supprimer).

    J'espère avoir été clair, si ce n'est pas le cas, n'hésitez pas à me poser des questions.

    Merci par avance.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 774
    Par défaut


    Une idée, comme ça : une fois que tu as tes équations réduites, pourquoi ne pas trier selon un coefficient ? Dès que tu trouves un élément qui a un coefficient "suffisamment proche", tu vérifies si les deux segments sont confondus. En complexité, c'est du O(n log n) pour n segments, je ne sais pas si c'est suffisamment réduit…
    Ou alors un arbre à k dimensions (chaque segment étant représenté par un point dans l'espace, dont les coordonnées sont données par ses coefficients), pas mal utilisé pour effectuer des requêtes rapides dans l'espace ?
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par dourouc05 Voir le message


    Une idée, comme ça : une fois que tu as tes équations réduites, pourquoi ne pas trier selon un coefficient ? Dès que tu trouves un élément qui a un coefficient "suffisamment proche", tu vérifies si les deux segments sont confondus. En complexité, c'est du O(n log n) pour n segments, je ne sais pas si c'est suffisamment réduit…
    Merci pour ton retour.

    Alors l'idée du tri est intéressante. Mais du coup tu parcours ton tableau tant que le rapport coeff_1/coeff_i = 1 par exemple et lorsque le rapport n'est plus égale à 1 tu passe au coeff_2 et tu fait coeff_2/coeff_i etc .....

    Sinon j'ai eu l'idée de créer deux tableaux, le premier de dimension (l,c) contiendrait l'ensemble des coefficients de mes équations réduites

    Tab_1 = [[a1,b1],[a2,b2], ....[ai,bi]]
    ensuite je créé un deuxième tableau de dimension (l,c) identique au premier mais qui contiendra uniquement les coefficients de ma droite 1.

    Tab_2 = [[a1,b1], [a1,b1], .....,[a1,b1]]
    Ensuite je fait soit le rapport des deux tableaux et je sors les index des lignes dont les coefficients sont égales à 1, et je réitère

    Tab_1 / Tab_2 = [[1,1], [a2/a1, b2/b1], ....., [ai/a1,bi/b1]]

    Remarque : Éventuellement je peux retirer de Tab_1 le coefficients de la droite 1

    Tab_1 / Tab_2 = [[a2/a1, b2/b1], ....., [ai/a1,bi/b1]]
    De ce fait les vecteurs [1,1] correspondront à des éléments confondus.

    Je réitère ensuite pour l'ensemble des droites du modèle ....

    Ou alors un arbre à k dimensions (chaque segment étant représenté par un point dans l'espace, dont les coordonnées sont données par ses coefficients), pas mal utilisé pour effectuer des requêtes rapides dans l'espace ?
    Par contre j'ai pas très bien compris le concept de l'arbre à k dimensions

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 774
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    Alors l'idée du tri est intéressante. Mais du coup tu parcours ton tableau tant que le rapport coeff_1/coeff_i = 1 par exemple et lorsque le rapport n'est plus égale à 1 tu passe au coeff_2 et tu fait coeff_2/coeff_i etc .....
    Non, tu fais un seul parcours du tableau : tu regardes si les éléments i et i+1 sont suffisamment près ; si oui, tu compares les segments correspondants.

    Pour les arbres : https://pierre-benet.developpez.com/...octree-morton/, https://en.wikipedia.org/wiki/K-d_tree
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Hello,

    D'après les tableaux que tu donnes en exemple, tu utilises l'équation y = ax + b pour modéliser tes droites. Ca posera problème si tu as des droites verticales. Je te conseille d'utiliser l'équation ax + by = c pour modéliser tes droites et éviter ce problème.

  6. #6
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Ok merci pour la biblio je vais regarder ça.

    Citation Envoyé par bertry Voir le message
    D'après les tableaux que tu donnes en exemple, tu utilises l'équation y = ax + b pour modéliser tes droites. Ca posera problème si tu as des droites verticales. Je te conseille d'utiliser l'équation ax + by = c pour modéliser tes droites et éviter ce problème.
    Salut,

    Merci pour cette précision je n'y avais pas réellement pensé en fait.

  7. #7
    Membre très actif
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Par défaut
    Le segment qui va de (1,1) à (2,2) est sur la même droite que celui qui va de (3,3) à (4,4). Ca ne pose pas de problème ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/03/2016, 13h46
  2. [dos] supprimer un compte des droits d'un repertoire
    Par sun19 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 29/01/2008, 18h12
  3. Comment afficher rapidement des images ?
    Par Michel_57 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/01/2005, 04h07
  4. Gestion des droits d'accès
    Par soulryo dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 12/01/2005, 10h50
  5. Configuration des droits pour samba avec ftp et www
    Par Alkmie dans le forum Réseau
    Réponses: 2
    Dernier message: 07/11/2004, 13h50

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