2017-10-04 4 views
0

J'ai un problème très intéressant.Faire correspondre un ensemble de chaînes à une chaîne pour maximiser le nombre de correspondances possibles

J'ai un ensemble de chaînes et je voudrais savoir comment faire correspondre une combinaison de ces chaînes dans une autre chaîne avec une fonction de maximisation.

Un exemple serait. Dire que j'ai l'ensemble:

['aabbcaa', 'bbc'] 

et j'ai la chaîne

'fgabbcdaabbcaaef' 

et les correspondances possibles pour cela sont:

fga[bbc]daadaa[bbc]aaef 

ou

fga[bbc]daad[aabbcaa]ef 

Maintenant, étant donné une simple fonction de maximisation, je dirais t Le chapeau fga[bbc]daad[aabbcaa]ef est le gagnant en raison du nombre total de caractères correspondants. Une fonction de maximisation différente pourrait donner plus de poids aux mots plus gros remplacés au lieu des caractères totaux.

J'aimerais savoir si quelqu'un pourrait me signaler quelques algos sur la façon de le faire. Ce que je suis perplexe est après que je trouve un ensemble de correspondances potentielles je ne suis pas sûr de savoir comment maximiser l'ensemble des mots à choisir de manière efficace.

Le dictionnaire, les mots du dictionnaire et le mot qui a été comparé pourraient être de n'importe quelle taille.

J'apprécierais toute aide que je pourrais obtenir avec ceci. Je vous remercie!

Répondre

0

J'ai trouvé la réponse et ça marche bien. Le pseudo-code est:

  • Parcourez l'ensemble et trouvez partout les chaînes définies dans la chaîne cible. Stockez start_index, end_index et attribuez un score à cette chaîne pour la correspondance. J'utilise actuellement la longueur de la chaîne.
  • Ensuite, en utilisant toutes les correspondances trouvées, exécutez par la « pondérée Intervalle de planification » algorithme pour trouver l'ensemble optimal des matches
  • https://courses.cs.washington.edu/courses/cse521/13wi/slides/06dp-sched.pdf