【问题标题】:Instant search algorithm即时搜索算法
【发布时间】:2011-02-15 04:43:05
【问题描述】:

什么类型的算法最适合搜索正在搜索的内容?我意识到这已经非常接近于询问 Google 即时搜索是如何工作的,但我不是算法专家,而且我对它们越来越感兴趣。像这样的搜索是使用后缀树或类似的东西完成的吗?我想我只是对查询小字符串感兴趣,而不是像 Google 那样查询大量抓取的数据。

非常感谢您的任何意见!

【问题讨论】:

  • 您可能还喜欢阅读 Google 的 Map-reduce 论文。 labs.google.com/papers/mapreduce.html 也可以是反向索引 en.wikipedia.org/wiki/Reverse_index
  • 每个答案和此评论的所有精彩读物...该死的我想我让自己更多地成为一个答案论坛...我会阅读更多内容并尝试选择一个我喜欢的最多。这种东西一直让我很困惑,现在我终于明白了。

标签: algorithm search


【解决方案1】:

对于这些类型的查询,您可以将数据存储在 Trie 或某种 Trie 树中。

【讨论】:

    【解决方案2】:

    如果只是为了尝试少量字符串,那么standard search algorithms 是一个不错的起点。一次搜索每个字符并找到两个字符集之间的公共字符集,最好使用动态编程技术来完成,一个这样的例子是找到Longest common subsequence

    【讨论】:

      【解决方案3】:

      树很好,但你不需要把你的数组放在一个多维数组中。 这是我在 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:我想我找到了最大步数:(感谢 Maxima)

      Log(0.5)-Log(array_length))/Log(2) -1); 
      

      【讨论】:

        猜你喜欢
        • 2011-05-15
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        相关资源
        最近更新 更多