Je commence ici: http://en.wikipedia.org/wiki/Longest_common_substring_problem
Il y a des liens vers des informations supplémentaires dans les liens externes, y compris les implémentations Perl des deux algorithmes expliqué dans l'article.
Edité à ajouter:
Sur la base de la discussion, je pense encore plus longue pourrait être commune Substring au cœur de ce problème. Même dans l'exemple de Journal que vous référencez dans votre commentaire, la caractéristique de définition de cet ensemble est la sous-chaîne 'Journal'.
Je considérerais d'abord ce qui définit un ensemble comme distinct des autres ensembles. Cela vous donne votre partition pour diviser les données, et ensuite le problème est de mesurer la quantité de points communs existant dans un ensemble. Si la caractéristique de définition est une sous-chaîne commune, alors la plus longue sous-chaîne commune serait un point de départ logique.
Pour automatiser le processus de détection d'ensemble, vous aurez généralement besoin d'une mesure de similarité par paire que vous pouvez utiliser pour mesurer la «différence» entre toutes les paires possibles. Ensuite, vous avez besoin d'un algorithme pour calculer la partition qui entraîne la différence totale la plus faible. Si la mesure de différence n'est pas la plus longue sous-chaîne commune, c'est bien, mais alors vous devez déterminer ce que ce sera. Évidemment, cela doit être quelque chose de concret que vous pouvez mesurer.
Gardez également à l'esprit que les propriétés de votre mesure de différence porteront sur les algorithmes pouvant être utilisés pour créer la partition. Par exemple, supposons que diff (X, Y) donne la mesure de la différence entre X et Y. Alors il serait probablement utile si votre mesure de distance était telle que diff (A, C) < = diff (A, B) + diff (AVANT JC). Et évidemment, diff (A, C) devrait être le même que diff (C, A). En réfléchissant à cela, je commence aussi à me demander si nous pouvions concevoir la «différence» comme une distance entre deux cordes, et, avec une définition rigoureuse de la distance, pourrions-nous alors essayer une sorte de sur les chaînes d'entrée. Juste une pensée.
Qu'est-ce que est la règle qui détermine que [J27Red, Journal] P27 [Rouge, Vert] n'est pas un ensemble? Vous donnez la priorité aux correspondances qui commencent plus tôt dans la chaîne? – djna
Veuillez être plus précis quant à la façon dont vous voulez définir vos ensembles. Par exemple, en plus du commentaire précédent, ce qui détermine que "J27 [Rouge, Vert] P [1,2]" est un ensemble et [ A-Z] [A-Z] [A-Z] [A-Z] [A-Z] [A-Z] [0-9] ou certains ne le sont pas. – DVK
En supposant que tous les fichiers d'une famille donnée commencent par une séquence commune, nous réduisons considérablement la complexité du problème. S'agit-il effectivement d'une supposition que vous souhaitez effectivement utiliser ou simplement d'une coindence que l'ensemble d'exemples est susceptible d'être? – mjv