2012-01-18 7 views
0

Nous avons graphe social qui est ensuite brisé en grappes de haute cohésion. Quelque chose appelé Truss par Jonathan Cohen [1].Nommer les grappes dans le graphe

Maintenant que j'ai ces groupes, je voudrais trouver des noms pour eux. Le nom de cluster doit autoriser des modifications non significatives de la taille du cluster sans modifier le nom.

Par exemple: Supposons que nous avons groupe M:

M : {A, B, C, D, E, F} 

et supposons que « algorithme nommant » nom généré « m » pour elle.

Après un certain temps, le sommet A a quitté le groupe, alors que le sommet J a rejoint:

M : {B, C, D, E, F, J} 

nom généré est nouvellement «m ».

fonction souhaitée:

m' == m  for insignificant cluster changes 

[1] http://www.cslu.ogi.edu/~zak/cs506-pslc/trusses.pdf

Répondre

1

Sur la base de votre exemple, je suppose que vous voulez dire "changements insignifiants à la composition du groupe", et non à la "taille de cluster".

Si votre fonction de nommage f() ne peut pas utiliser les informations sur le nom existant pour le cluster donné, vous devez autoriser que parfois il le renommer malgré le petit changement. En effet, supposons que f()jamais renomme un cluster quand il change juste un peu. En commençant par le cluster A, vous pouvez accéder à n'importe quel autre cluster B en ajoutant ou en supprimant un seul élément à la fois. Par construction, la fonction retournera le même nom pour A et B. Puisque A, B étaient arbitraires, f() retournera le même nom pour toutes les grappes possibles - clairement inutile.

Donc, vous avez deux alternatives:

(1) la fonction dénomination repose sur le nom existant d'un cluster, ou

(2) la fonction de nommage parfois (rarement) renomme un cluster après une très petit changement.

Si vous allez avec l'alternative (1), c'est trivial. Vous pouvez simplement assigner des noms de façon aléatoire, puis les garder inchangés chaque fois que le cluster est mis à jour tant qu'il n'est pas trop différent (cependant vous définissez différent). Étant donné que c'est simple, je suppose que ce n'est pas ce que vous voulez.

Si vous optez pour l'alternative (2), vous devrez utiliser certaines informations sur les objets sous-jacents du cluster. Si tout ce que vous avez sont des liens vers divers objets sans structure interne, cela ne peut pas être fait, car la fonction n'aurait rien à voir avec la taille de la grappe. Donc, disons que vous avez des informations sur les objets.

Par exemple, vous pouvez avoir leurs noms. Appelez la première k lettres du nom de chaque objet préfixe de l'objet. Comptez tous les différents préfixes dans votre cluster, et trouvez les n les plus courants. Commandez ces préfixes n par ordre alphabétique, et ajoutez-les les uns aux autres dans cet ordre.Pour un choix raisonnable de k, n (qui devrait dépendre du nombre de vos clusters et des longueurs de nom d'objet typiques), vous obtiendrez le résultat que vous recherchez - à condition que vous ayez suffisamment d'objets dans chaque cluster. Par exemple, si les objets ont des noms humains, essayez k = 2; et si vous avez des centaines de groupes, peut-être essayer n = 2.

Bien sûr, peut être grandement améliorée par des noms remappage pour obtenir une distribution plus uniforme, la manipulation des cas où deux préfixes ont des fréquences similaires, etc.

Questions connexes