楽しみのために、最後の単語と最後の単語の次の単語に応じて、(自然言語からの)単語がテキストに表示される条件付き確率を数えたいと思います。つまり、たとえば英語のテキストを大量に取得し、各組み合わせが出現する頻度を数えn(i|jk)
ますn(jk)
(j,k,i
連続する単語はどこにありますか)。
n(i|jk)
素朴なアプローチは、3次元での位置への単語のマッピングを使用して、(の)3D配列を使用することです。位置検索はsを使用して効率的に実行できますがtrie
(少なくともそれが私の最善の推測です)、すでにO(1000)ワードの場合、メモリの制約に遭遇します。しかし、この配列はまばらにしか埋められず、ほとんどのエントリはゼロであるため、大量のメモリを浪費すると思います。したがって、3D配列はありません。
どのようなデータ構造がそのようなユースケースに適していて、単語の出現を数えるときに行うように、多くの小さな更新を効率的に行うことができますか?(多分これを行うための完全に異なる方法がありますか?)
(もちろん、私も数える必要がありますn(jk)
が、それは2Dしかないので、簡単です:)選択する言語はC++だと思います。