저는 문자열 모음을 분할하고 각각에 대해 간단한 계산을 실행하는 모든 가능한 방법을 반복하는 통계 프로젝트에 참여하고 있습니다. 특히, 가능한 각 하위 문자열에는 확률이 연관되어 있으므로 파티션의 하위 문자열 확률을 곱하여 합계를 구하려고합니다.문자열의 분할 영역에 대해 계산을 수행하는 현명한 효율적인 알고리즘이 있습니까?
예를 들어 문자열이 'abc'이면 'a', 'b', 'c', 'ab', bc '및'abc '에 대한 확률이 있습니다. 문자열에는 'abc', 'ab | c', 'a | bc'및 'a | b | c'의 네 가지 가능한 분할이 있습니다. 알고리즘은 각 분할에 대한 구성 요소 확률의 곱을 찾은 다음 4 개의 결과 수를 합산해야합니다.
현재 파티션 (예 : 위의 예에서는 00, 01, 10, 11)에 대한 정수의 2 진 표현을 사용하는 파이썬 반복기를 작성하고 단순히 정수를 실행합니다. 불행하게도 이것은 20 자 정도의 문자열보다 훨씬 느립니다.
누구나 단순히 한 번에 하나씩 모든 파티션을 실행하지 않고이 작업을 수행하는 영리한 방법을 생각할 수 있습니까? 나는 지금이 일에 붙어있어. 일부 의견에 응답
여기에 좀 더 정보입니다 :
이 문자열 그냥 아무것도 할 수있다, 예를 들면 "는 foobar (에서는 foo2)"- 우리의 알파벳 소문자 문자 및 숫자를 더한 중괄호의 세 가지 유형 ("(",
목표는 개별 단어 '우도'가 주어진 문자열의 가능성을 얻는 것입니다. 따라서 L (S = 'abc') = P ('abc') + P ('ab') P ('c') + P ('a') P ('b' L (S = 'abc')는 문자열 'abc'을 관찰 할 통계적 우도입니다.)
p ('ab | c') = p ('ab') * p ('c')? – balpha
문자열에 문자가 두 번 이상 표시 될 수 있습니까? – mbeckish
알파벳에 몇 개의 문자가 있습니까? – mbeckish