即时搜索算法

时间:2011-02-15 04:43:06

标签: algorithm search

什么类型的算法能够最快地搜索被搜索的内容?我意识到这已经非常接近于询问Google即时搜索是如何工作的,但我不是算法专家,而且我对它们越来越感兴趣了。这样的搜索使用后缀树或类似的东西吗?我想我只是对查询小字符串感兴趣,而不是像谷歌那样对大量爬行数据进行查询。

非常感谢任何输入!

3 个答案:

答案 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);