Je suis en train de travailler sur un projet statistique qui consiste à itérer de toutes les manières possibles pour partitionner une collection de chaînes et exécuter un calcul simple sur chacune d'elles. Plus précisément, chaque sous-chaîne possible a une probabilité qui lui est associée, et j'essaie d'obtenir la somme à travers toutes les partitions du produit de la probabilité de sous-chaîne dans la partition. Par exemple, si la chaîne est 'abc', alors il y aurait des probabilités pour 'a', 'b', 'c', 'ab', 'bc' et 'abc'. Il y a quatre partitions possibles de la chaîne: 'abc', 'ab | c', 'a | bc' et 'a | b | c'. L'algorithme doit trouver le produit des probabilités des composants pour chaque partitionnement, puis additionner les quatre nombres résultants.Existe-t-il des algorithmes intelligemment efficaces pour effectuer un calcul sur l'espace des partitions d'une chaîne?
Actuellement, j'ai écrit un itérateur python qui utilise des représentations binaires d'entiers pour les partitions (par exemple 00, 01, 10, 11 pour l'exemple ci-dessus) et parcourt simplement les entiers. Malheureusement, cela est extrêmement lent pour les chaînes de plus de 20 caractères.
Quelqu'un peut-il penser à une manière intelligente d'effectuer cette opération sans simplement parcourir chaque partition une à la fois? Je suis coincé là-dessus depuis des jours maintenant.
En réponse à certains commentaires ici quelques informations supplémentaires:
La chaîne peut être à peu près tout, par exemple « foobar (foo2) » - notre alphabet est alphanumérique minuscule, plus tous les trois types d'accolades (« (», "[", "{"), tirets et espaces
Le but est d'obtenir la vraisemblance de la chaîne donnée par les vraisemblances de 'mot' individuels Donc L (S = 'abc') = P ('abc') + P ('ab') P ('c') + P ('a') P ('bc') + P ('a') P ('b') P ('c') (Ici "P ('abc ') "indique la probabilité du' mot '' abc ', tandis que' L (S = 'abc') 'est la probabilité statistique d'observer la chaîne' abc ').
Voulez-vous dire ceci: p ('ab | c') = p ('ab') * p ('c')? – balpha
Un personnage peut-il apparaître plusieurs fois dans une chaîne? – mbeckish
Combien de caractères y a-t-il dans votre alphabet? – mbeckish