조건부 확률을 계산하기 위해 효율적으로 배열, 마지막에 따라 그리고 마지막 단어 옆에. 나는. 나는 엄청난 무리를 짊어 질 것이다. 영어 텍스트는 카운트 얼마나 자주 (j,k,i
이 sucsessive 단어) 각 조합 n(i|jk)
및 n(jk)
나타납니다.저장 및 업데이트 거대한 (스파 스?) 다차원 그냥 재미를 위해 나는 (자연 언어에서) 단어가 텍스트에 표시되는 조건부 확률을 계산하려는
순진 방법은 3 차원 위치에 단어의 매핑을 사용하여, (n(i|jk)
용) 3-D 배열을 사용하는 것이다. 위치 검색은 trie
을 사용하여 효율적으로 수행 할 수 있지만 적어도 O (1000) 단어의 경우 메모리 제약 조건에 부딪 힐 수 있습니다. 하지만이 배열은 희박하게 채워질 것입니다. 대부분의 항목이 0이므로 나는 많은 메모리를 낭비 할 것입니다. 그래서 3-D 어레이는 없습니다. 단어의 모습을 계산 할 때 내가 그들을처럼 작은 업데이트를 많이 할 효율적으로 여전히 사용 사례에 더 적합 할 것이다 어떤 데이터 구조
가 (물론 나는 또한 n(jk)
을 계산해야하는 (아마도?이 일을 완전히 다른 방법이), 그러나 그것은 단지 2-D이기 때문에 즉, 쉽게 :) 선택의 언어는 C++ 것 같아요.
STL 만 사용하는 실제적인 접근법입니다. 처음부터 시작하는 것이 가장 좋은 방법 일 수 있습니다. 나는 맵을 사용하여 (int, int) 튜플을 저장하는 방법을 좋아한다. – fuenfundachtzig
글쎄, 나는 사람들이 다른 대답을하도록 동기를 부여하기 위해 질문을 공개했다. 나는'n (k | ij)'테이블을 저장하는 더 효율적인 방법이 있는지 궁금하다. 나는지도가 꽤 오버 헤드를 가져 오는 것을 상상할 수 있습니까? – fuenfundachtzig
@fuenfundachtzig 표가 희박한 경우지도가 더 효율적입니다 (키가지도에없는 경우 확률이 0이라고 가정 할 수 있음). 그렇지 않은 경우 입력의 사전 식 순서에 대한 모든 가능한 결과 확률을 저장하는 조밀 한 데이터 구조가 가장 효율적입니다 (완전한 공동 분배가 필요한 경우). 공동 분배가 독립적 인 분배로 분해 될 수 있다면, 물론 이러한 독립적 인 분배를 저장하는 것이 더 효율적입니다 (Lewis Product approximations 참조). 이것은 단지지도의 구현입니다. 그래서 : 당신은 대답을 받아 들여야합니다. – user