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 :

algorithme de construction d'un graphe en étoile


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut algorithme de construction d'un graphe en étoile
    Bonjour,
    voici mon problème
    je développe une application facebook en java, en récupérant des données sur les "amis" de l'utilisateur.

    je détermine ensuite une première matrice carré symétrique, qui est la "matrice d'amitié" (qui représente l'utilisateur et ses amis, et s'il sont amis entre eux).

    si l'utilisateur est ami avec quelqu'un, c'est représenté par 1, mais aussi si un ami de l'utilisateur est ami avec un autre ami de celui-ci, c'est représenté par 1
    par exemple, si l'utilisateur c'est A, qui a 3 amis B C et D, avec B ami de C et D, mais C pas ami avec D, on a:
    A B C D
    A 0 1 1 1
    B 1 0 1 1
    C 1 1 0 0
    D 1 1 0 0

    ensuite, avec ca, on va déterminer la seconde matrice, qui représente le nombre d'amis commun deux à deux
    exempl: pour D et C, on regarde toute les valeurs communes pour lesquelles ils sont à 1. on a A et B, amis commun de D et C, donc ils ont 2 amis commun
    de proche en proche, on a la seconde matrice:
    A B C D
    A 0 2 1 1
    B 2 0 1 1
    C 1 1 0 2
    D 1 1 2 0
    c'est cette seconde matrice qui va permettre de construire le graphique (tel que je le concois), car elle détermine les distances entre chacun (en les ramenantà une base commune, pour que ca soit relatif parce que quelqu'un qui a 1000 amis et qui a 50 amis commun avec un autre, on peut se douter de leur "proximité")

    la difficulté, c'est de construire quelque chose qui respecte plus ou moins la seconde matrice.

    il y a fa aire trois choses sur un meme graphique :
    - représenter l'amitié entre tout le monde et le l'utitlisateur principal (ca c'est facile)
    - représenter chaque personne par une pastille en fonction du nombre d'amis qu'il a
    - représenter l'amitié de tout le monde entre eux (ca ca pose problème)

    je pense qu'il est possible de faire une sorte de relaxation sur les contraintes, pour avoir une marge de manoeuvre sur les distances de la matrice de distance, mais ensuite, je sais pas trop comment, l'idée est de pouvoir visualiser directement les "groupes" d'amis, qui devraient être visible par interprétation de la matrice des distances...


    Si quelqu'un connait un algorithme de ce genre, ou sait comment faire, ca serait G E N I A L

  2. #2
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    ce que tu veux représenter c'est le graphe des liens entre un groupe de personnes sur face book ? et tu veux optimiser l'affichage pour qu'on voit bien des sous groupes se départager

    je ne sais pas si tu peux avoir des solutions optimales en temps réel

    ce que tu veux c'est un graphe où
    pour tout x,y, x et y sont d'autant plus proches à l'écran qu'ils ont d'amis en commun

    moi j'oublirais les histoires de matrices et je ferais un algo génétique ou recuit simulé ou un truc du genre

    l'idée c'est: on positionne aléatoirement tous les noeuds, puis on boucle en modifiant aléatoirement une partie du graphe, on regarde si le graphe est mieux ou pas après modification, si oui on garde la modif, sinon on l'annule

    avec quelques petites heuristiques en 1000 tours de boucles tu dois obtenir quelque chose de pas mal du tout

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    je vote comme acx01b: oublier la methode avec les matrices de distances et utiliser des algos plus standards de Clustering (CAG, K-means, ...)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu as une matrice de similarités (1 - (sont-ils amis ou pas)), donc passe par un algorithme classique de réduction de dimension, tel que les Laplacian Eigenmaps (si ta matrice est symétrique ) :
    - Calcule D^(-1/2)W D^(-1/2) (D étant la matrice des sommes par ligne ou par colonne et W ta matrice des poids)
    - Diagonalise cette matrice et récupères les 4 premiers vecteurs propres. L'un sera de poids 1, tu l'élimines (solution évidente au problème).
    - Les 2 ou 3 autres vecteurs propres te donneront une répartition des points dans l'espace 2D ou 3D selon ce que tu veux.

    La solution de passer par la matrice des distances (géodésiques) est possible, mais potentiellement plus longue et plus coûteuse en temps. De plus, si ton graphe n'est pas connexe, ça ne marche pas, mais je te donne l'autre solution :
    - calcule ta matrice de distances (Dijkstra ou Floyd-Warshall)
    - diagonalise ta matrice et récupère les 2 ou 3 plus grands vecteurs propres
    - ton espace 2D ou 3D sera constitué par ces 2 ou trois vecteurs propres.
    C'est un algorithme qui s'appelle Isomap.

    Pour certains renseignements complémentaires, ce sera dans ma thèse, ou tu peux regarder sur ma page perso mes publications en français qui traitent en partie de la visualisation de données dans un espace réduit.

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    euh...

    Moi je vote comme pseudocode et acx01b : voir les algos de clustering ....

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Une fois l'espace réduit, le clustering est bien plus facile et réalisable

Discussions similaires

  1. Construction d'un graphe étoilé à partir d'une matrice
    Par jyboo dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 15/02/2008, 17h38
  2. algorithme de construction de surfaces
    Par wawa.voun dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 14/01/2008, 17h26
  3. [Graphique]Construction d'un graph avec deux coordonnées
    Par tomsabourin79 dans le forum Access
    Réponses: 3
    Dernier message: 05/04/2007, 10h08
  4. cherche algorithme de construction d'un arbre
    Par Invité(e) dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 07/05/2006, 11h04
  5. cherche algorithme de construction d'un arbre
    Par Invité(e) dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 05/05/2006, 12h28

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