什么类型的算法能够最快地搜索被搜索的内容?我意识到这已经非常接近于询问Google即时搜索是如何工作的,但我不是算法专家,而且我对它们越来越感兴趣了。这样的搜索使用后缀树或类似的东西吗?我想我只是对查询小字符串感兴趣,而不是像谷歌那样对大量爬行数据进行查询。
非常感谢任何输入!
答案 0 :(得分:2)
对于这些类型的查询,您可以将数据存储在Trie或某种Trie树中。
答案 1 :(得分:1)
如果只是尝试使用一小组字符串,那么standard search algorithms就是一个很好的起点。一次搜索每个字符并在两组之间找到一组通用字符,最好使用动态编程技术完成,其中一个例子是查找Longest common subsequence。
答案 2 :(得分:1)
树很好,但您不需要将数组放在多维数组中。 这是我用JS中的大数组做的方法。
您需要对数组进行排序。
跳转到数组的中间位置。 环: 如果数组项目小于tosearch,则跳到上半部分的中间; 否则,如果数组项目比tosearch更大,则跳到下半部分的中间; 否则你找到了它。等
var maxstep=Math.abs((Math.log(0.5)-Math.log(array.length))/Math.log(2)-1);
function searchinterval(tosearch,array){
var len=array.length,
pos=range=len/2,
index=Math.round(pos),
maxstep=.49999;
for(var i=0;i<=maxstep;i++){
range/=2;
if(tosearch<array[index]){
pos-=range;
}
else if(tosearch>array[index]){
pos+=range;
}
else{
return index;
//you found it
}
index=Math.round(pos);
}
return false;
}
如果数组中不存在tosearch,则此功能很慢。表示阵列长度为200的七个循环我不确定最大步数或步长。
PS:想想我发现了最多的步骤:(感谢千里马)
Log(0.5)-Log(array_length))/Log(2) -1);