`
Hooopo
  • 浏览: 335365 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Autocompete with Trie

    博客分类:
  • Ruby
阅读更多
像微薄里面用户输入一个@会从服务器取出匹配的用户login name什么的。这种场景用前缀树比较节省空间并且效率高。fast trie——A super fast, efficiently stored Trie for Ruby。据作者说速度是灰常的快。。
地址:https://github.com/tyler/trie
gem install fast_trie


require 'trie'

TRIE = Trie.new

#初始化数据
User.all.each do |user|
  TRIE.add(user.login_name, 0)
end

#js调用autocomplete
def autocomplete
    children = sort_by_weight(TRIE.children(params[:prefix]))

    respond_to do |format|
      format.js { render(:string => JSON.dump(children)) }
    end
  end

根据用户的输入行为给某个key增加权重(用于搜索排序):
def incr_weight(login_name, n = 1)
  weight = TRIE.get(login_name) || 0
  TRIE.add(login_name, weight + n)
end

#根据权重给结果排序
def sort_by_weight(login_name_list)
  login_name_list.sort_by{|login_name|  TRIE.get(login_name)}
end


这东西的性能不错啊 这是测试数据,看样子比那个redis的autocomplete要简单高效呀:
引用
Performance Characteristics

Here are some quick benchmarks on my 2.4ghz Intel Core 2 Duo MacBook Pro:

For keys that are 5 characters long:
31,344 adds/second
1,827,408 searches/second
38,453 prefixes searches/second

For keys that are 10 characters long:
30,653 adds/second
1,802,649 searches/second
13,553 prefix searches/second

For keys that are 20 characters long:
30,488 adds/second
1,851,461 searches/second
5,855 prefix searches/second

For keys that are 40 characters long:
30,710 adds/second
1,838,380 searches/second
2,762 prefix searches/second


不过好像不能被序列化。这样在多进程部署的时候有点麻烦呀。再研究一下。。
3
1
分享到:
评论
1 楼 Hooopo 2011-04-20  

相关推荐

    trie-0.1.1.tar

    Trie数据结构详解与应用 Trie,又称为前缀树或字典树,是一种用于存储字符串的树形数据结构。它的主要特点是通过关联字符来构建树的节点,从而实现快速的字符串查找、插入和删除操作。Trie在信息技术、搜索引擎优化...

    11 TrieTree.rar

    《严蔚敏数据结构与算法:TrieTree详解》 在计算机科学中,数据结构是组织、管理和存储数据的方式,而算法则是解决特定问题的精确步骤。数据结构的选择直接影响到程序的效率和可读性。在众多的数据结构中,TrieTree...

    Algorithm-trie.zip

    Trie,也被称为前缀树或字典树,是一种用于存储键值对的数据结构,尤其适用于字符串数据。在C语言中实现Trie,可以提供快速的字符串查找服务,尤其是在处理大量字符串且需要查找是否存在某个字符串或者字符串前缀时...

    trie数组的算法实现

    - libdatrie 提供了 C 语言接口,包括 trie_load() 函数加载词典,trie_insert() 插入新词,trie_search() 查找单词,以及 trie_delete() 删除单词等方法。 - 库还支持 Trie 的序列化和反序列化,便于在内存和磁盘...

    trie树的实现(C)

    trie.c中定义了trie树的操作函数; trie.h为相应的头文件; test.c用于测试相关的函数。 在trie.c中,关于查找定义了两个函数,一个是find(),一个是search(),二者的区别是,前者仅判断一个字符串是否在树中出现,...

    Trie 树实现的源码

    ### Trie树实现详解 #### 一、Trie树简介 Trie树,也称为前缀树或字典树,是一种用于存储字符串数据结构。它利用字符串间的公共前缀来减少所需的存储空间,使得查找字符串更加高效。Trie树在很多应用中都有广泛的...

    Trie树入门,很容易上手

    "Trie树入门,很容易上手" Trie树是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构。理解起来比较简单,但是简单的东西也得付出...

    从trie树谈到后缀树

    【Trie树】 Trie树,又称为字典树,是一种特殊的树形数据结构,主要用于高效地存储和检索字符串。它的设计目的是通过利用字符串的公共前缀来减少字符串比较的次数,从而提高查询效率。Trie树的核心特点是: 1. 根...

    hat-trie, 一种有效的trie实现.zip

    hat-trie, 一种有效的trie实现 hat 这是Askitis和Sinha的hat trie数据结构的ANSI实现,它是一个非常高效的( 空间和时间) 现代变体。这里实现的版本将字节数组映射到单词( 。例如,无符号的longs ),它可以以用来存储...

    用Trie树实现词频统计和单词查询

    一个简单的C语言程序:用Trie树实现词频统计和单词查询

    PyPI 官网下载 | marisa_trie-0.7.6-cp38-cp38-win32.whl

    《PyPI官网下载marisa_trie-0.7.6-cp38-cp38-win32.whl:深入理解Python库与安装》 在Python编程领域,PyPI(Python Package Index)是最重要的资源库,它为全球的开发者提供了一个集中地,用于发布和下载各种...

    DoubleArrayTrie(双数组Trie树)

    **DoubleArrayTrie(双数组Trie树)详解** DoubleArrayTrie(简称DAT),是一种高效的数据结构,常用于字符串的查找和匹配,特别是在分词检索、数据挖掘以及搜索引擎等领域有着广泛的应用。它是由日本学者高津陵...

    实现Trie_java_

    Trie,又称为字典树或前缀树,是一种用于存储关联数组的数据结构,它允许我们高效地进行字符串的查找、插入和删除操作。在Java中实现Trie数据结构,可以帮助我们快速处理大量字符串数据,例如在搜索引擎中进行关键词...

    Acm Trie树

    ### ACM Trie树详解 #### 一、Trie树的基本概念 **Trie树**,又称为**字典树**或**前缀树**,是一种用于高效存储和检索字符串的树形数据结构。它通过利用字符串之间的公共前缀来减少查询时间,从而提高搜索效率。...

    HASH(Trie)-.rar_HashTree.h_TRIE_hash树_trie树_字典树

    **哈希 Trie 树(HashTrie)与字典树(Trie树)详解** 哈希 Trie 树,也称为 HashTrie 或者是哈希化的 Trie 树,是一种结合了哈希表和 Trie 数据结构特点的数据结构。它在 Trie 树的基础上引入了哈希函数,提高了...

    实现trie树的C/C++模板

    ### 实现Trie树的C/C++模板 在计算机科学领域,Trie树(又称前缀树或字典树)是一种用于存储具有共同前缀的字符串的高效数据结构。它广泛应用于各种场景,如自动补全、拼写检查以及IP路由表等。本文将详细介绍如何...

    Python实现Trie树

    用Python实现Trie树的应用,并可以对英汉词典进行导入和检索、添加和删除,最终可以将导入的英汉词典保存到本地磁盘。内附两个.py文件,分别是tree.py和d_gui.py,tree.py是类和方法,d_gui.py是图形界面;一个.txt...

    Trie树 linux32 SDK V3.0

    2、Trie树SDK中的API支持以下功能 1)插入节点 2)精确删除节点 3)正向模糊匹配 4)反向模糊匹配 5)精确查询节点 6)获取头(尾)节点 7)删除头(尾)节点 8)排序 9)支持多级树 10)支持强大的查询节点功能 ...

    双数组Trie优化算法及其应用研究

    ### 双数组Trie优化算法及其应用研究 #### 摘要 本文主要探讨了双数组Trie树(Double-Array Trie)算法的一种优化方法,并详细分析了其在实际应用中的表现,特别是在词典管理和自动分词领域。双数组Trie树作为一种...

Global site tag (gtag.js) - Google Analytics