标签: trie

如何在Scala中进行快速前缀字符串匹配

我正在使用一些Java代码来执行快速前缀查找,使用java.util.TreeSet,我可以使用scala的TreeSet吗?还是另一种解决方案?

/** A class that uses a TreeSet to do fast prefix matching
 */
class PrefixMatcher {
  private val _set = new java.util.TreeSet[String]

  def add(s: String) = _set.add(s)

  def findMatches(prefix: String): List[String] = {
    val matches = new ListBuffer[String]
    val tailSet = _set.tailSet(prefix)
    for ( tail <- tailSet.toArray ) {
      val tailString = tail.asInstanceOf[String]
      if ( tailString.startsWith(prefix) ) 
        matches += tailString
      else
        return matches.toList    
    }

    matches.toList
  }
}
Run Code Online (Sandbox Code Playgroud)

scala trie string-matching

4
推荐指数
2
解决办法
5725
查看次数

Trie实现 - 将元素插入到trie中

我正在开发一个Trie数据结构,其中每个节点代表一个单词.所以的话st,stack,stackoverflowoverflow会安排为

root
--st
---stack
-----stackoverflow
--overflow
Run Code Online (Sandbox Code Playgroud)

我的Trie在HashTable内部使用,因此所有节点查找将花费恒定时间.以下是我将算法插入到trie中的算法.

  1. 检查trie中的项目是否存在.如果存在,返回,否则转到步骤2.
  2. 迭代中的每个字符key并检查单词是否存在.这样做直到我们得到一个节点,其中新值可以作为子节点添加.如果未找到任何节点,则将添加到根节点下.
  3. 插入后,重新排列插入新节点的节点的兄弟节点.这将遍历所有兄弟节点并与新插入的节点进行比较.如果任何节点以与新节点相同的字符开头,则将从那里移动并添加为新节点的子节点.

我不确定这是实现trie的正确方法.欢迎任何建议或改进.

使用的语言:C++

algorithm trie data-structures

4
推荐指数
1
解决办法
5179
查看次数

尝试和后缀树实现

我研究过Tries和Suffix Trees,并希望实现相同的功能.请分享一些链接,我可以从中了解实施的结构和基本概念.

任何好的例子,如果包括在内,都会是一个加分.

在C中实施

c trie data-structures

4
推荐指数
1
解决办法
1万
查看次数

在Python中将字符串分解为单个单词

我有一个很大的域名列表(大约六千个),我希望看到哪些词对于我们的投资组合的粗略概述是最高的.

我遇到的问题是列表被格式化为域名,例如:

examplecartrading.com

examplepensions.co.uk

exampledeals.org

examplesummeroffers.com

5996

只运行字数会带来垃圾.所以我想最简单的方法是在整个单词之间插入空格然后运行单词计数.

为了我的理智,我宁愿编写这个.

我知道(非常)小python 2.7但是我对接近这个的任何建议持开放态度,代码的例子真的会有所帮助.我被告知使用简单的字符串trie数据结构将是实现此目的的最简单方法,但我不知道如何在python中实现它.

python string trie

4
推荐指数
1
解决办法
2320
查看次数

BST,Hashing,Tries和map之间的区别

我在Tries,hashing,Map(stl)和BST上阅读了一些博客和教程.我很困惑哪一个更好用,哪里.我知道在它们之间做出这样的区别是无稽之谈,因为它们都是依赖于实现的.请您告诉我更具体的内容,请不要忘记提及复杂性(最差,平均和最佳情况).

提前致谢...

hash trie time-complexity binary-search-tree data-structures

4
推荐指数
1
解决办法
2235
查看次数

实现T9文本预测

我在内存中有一个T9字典(trie/hash_map).该词典包含词级对,因此当从词典中选取一个词时,其等级增加,并且词等级对在词列表中上升.

假设有一种方法可以从字典中选择一个单词.该方法也做了一些单词评级例程.

在输入中,我有一串数字(1-9,'*'来改变单词和''),这些是在电话上按下的.

问题:

  1. 有没有算法快速解析字符串?
  2. 哪个数据结构会好?

UPD:

完整问题文本(问题D)

Hash_map实现

Trie实施

c++ trie string-parsing data-structures t9

4
推荐指数
1
解决办法
6644
查看次数

java中的任何trie实现(使用maven repo)

从这个问题来看,似乎有一个Patricia Trie实现,但它没有maven repo.在任何情况下,我都找不到Gauva/Google Collections中的trie.有没有人知道java中的任何Trie实现库,它有一个maven repo?

注意:它基本上是为前端的自动完成功能创建后端.任何其他有助于实现这一目标的东西都应该足够好.

java trie maven

4
推荐指数
1
解决办法
2254
查看次数

用二元trie对整数进行排序?

由于每个整数都可以表示为一系列长度的位,因此您似乎可以按以下方式对一堆整数进行排序:

  1. 将每个整数插入二进制trie(trie,其中每个节点有两个子节点,一个标记为0,另一个标记为1).
  2. 使用标准算法按排序顺序列出特里结构中的所有单词,按排序顺序列出所有整数.

这种排序算法是否曾在实践中使用过?

sorting algorithm binary trie data-structures

4
推荐指数
1
解决办法
1089
查看次数

Trie实现地图

我今天正在解决一个问题.但我被困了.我知道trie是如何工作的,但问题是我知道如何使用静态数组和类来实现它.今天在网上冲浪我读到有一种方法可以使用stl :: map实现尝试.我今天试过,但我还是不知道如何在int上插入元素.这个结构.

编辑1:我正在尝试解决这个问题:spoj.com/problems/TAP2012D我想知道如何使用edit2将单词添加到trie中:我知道地图是如何工作的,我只是不知道如何使用地图作品.我想要一个了解尝试的人.

这是我到目前为止所做的

const int ALPH_SIZE = 26;
using namespace std;

struct trie{
    map<char,int> M;
    int x,y;
    trie();
};

trie T[1000000];


trie::trie()
{
    x=y=0;
}
int maximo;


void addtrie(string palabra)
{
    int tam=palabra.size();
    int pos=0;
    for(int i=0;i<tam;i++)
    {
        if(T[pos].M.find(palabra[i])==T[pos].M.end())
        {
            T[pos].M[palabra[i]]=new trie();
            T[pos].M[palabra[i]]=
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

c++ dictionary trie data-structures

4
推荐指数
1
解决办法
3017
查看次数

让kwargs从封闭范围中获取

Python似乎是从类方法的封闭范围推断出一些kwargs,我不确定为什么.我正在实施一个Trie:

class TrieNode(object):
  def __init__(self, value = None, children = {}):
    self.children = children
    self.value = value

  def __getitem__(self, key):
    if key == "":
        return self.value
    return self.children[key[0]].__getitem__(key[1:])

  def __setitem__(self, key, value):
    if key == "":
        self.value = value
        return
    if key[0] not in self.children:
        self.children[key[0]] = TrieNode()
    self.children[key[0]].__setitem__(key[1:], value)
Run Code Online (Sandbox Code Playgroud)

在倒数第二行,我创建了一个新的TrieNode,可能是一个空的儿童字典.但是,当我检查结果数据结构时,树中的所有TrieNode都使用相同的子字典.即,如果我们这样做:

>>>test = TrieNode()
>>>test["pickle"] = 5
>>>test.children.keys()
['c', 'e', 'i', 'k', 'l', 'p']
Run Code Online (Sandbox Code Playgroud)

测试的子项应该只包含指向新TrieNode的"p".另一方面,如果我们进入该代码的倒数第二行并将其替换为:

        self.children[key[0]] = TrieNode(children = {})
Run Code Online (Sandbox Code Playgroud)

然后它按预期工作.不知怎的,然后,self.children字典被隐式地作为一个kwarg传递给TrieNode(),但为什么呢?

python dictionary trie

4
推荐指数
1
解决办法
74
查看次数