与えられた単語リスト = { w1,w2,w3,w1,w2 }
長いテキストで上記の単語リストの順列をすべて検索します。
long text list = {これは長いテキスト w1 w2 w3 w4 およびw1 w2 w1 w2 w3です。これは、すべての単語 w1,w2,w2,w2,w2 が含まれているわけではないため、順列を持たないさらに別の長いテキストですが、これはスペースで区切られた順列w2 w2 w3 w1 w1 } です
この問題を解決する最も効率的なアルゴリズムは何ですか?
最初にリスト内の各一意の単語にタプル (一意の #、一意の素数 #) を割り当てて {w1 = [101, 5], w2 = [103, 7], w3 = [205, 11] }、合計を計算することを考えました割り当てられたタプルを使用したリスト全体の of : w1 [101 *5] + w2 [ 103 * 7] + w3 [ 205 * 11] + w1 [101 *5] + + w2 [ 103 * 7] = 4707
pudo コードは次のとおりです。
targetSum = 4707;
long sum = 0;
for (int i = 0; i < Text.size(); i++){
look up (unique #, unique prime #)
sum + = ((unique # * unique prime) ;
if( i > list.size() ){
sum = sum – (look up (unique #, unique prime # for index
( i – list.size()) and subtract tuple sum)
}
if(targetSum = = sum ){
// this is possible match so hashMap lookup verify again that this reagion is actual match.
}
}
これにはより良いロジックやアルゴリズムがありますか?
アップデート :
パターン マッチング Z アルゴリズム (Z ボックス) についてさらに読んでいましたが、すべての順列が事前にわかっていない限り、Z ボックスまたは Z 配列がどのように改善されるかわかりません。もっと良い方法があるかどうかわかりませんか?
知識を共有していただきありがとうございます。
ありがとう、
バベシュ