给定单词列表 = { w1,w2,w3,w1,w2 }
在长文本中查找上述单词列表的所有排列。
长文本列表 = {这是长文本 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]}并计算总和使用分配的元组的整个列表: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-Algorithm (Z-Boxes),但我无法看到 Z-boxes 或 Z-Array 如何使它变得更好,除非预先知道所有排列。不知道有没有更好的办法?
谢谢大家分享知识。
谢谢,
巴韦什