由买买提看人间百态

topics

全部话题 - 话题: trienode
(共0页)
y****z
发帖数: 52
1
来自主题: JobHunting版 - google 电面fast phone book loopup
你这个方法就是用两个HASHMAP 一个记录已经存在的 一个记录未存在的
所以这三个functions都是O(1) 空间O(N)
我想了一下 用trie最好
Class TrieNode{
boolean visited;
TrieNode[] children;
public TrieNode(){
visited=false;
children=new TrieNode[10];
}
}
插入的时候把该节点标记为visited
顺便记录父节点 然后扫描父节点下的所有子节点 如果都是visited就把父节点也标记
为visited
查找不说了
第三个方法的话就变成寻找一个visited=false的叶子就好了(假设号码10位数)
如果一个节点的visited=false 那么必然存在available的子节点
static class TrieNode{
boolean visited;
TrieNode[] children;

public TrieNode(){
visited=fal... 阅读全帖
a****r
发帖数: 87
2
C++ R-way trie implementation. Coursera princeton algorithm II 讲的很详细。
const int N = 26;
struct TrieNode{
int val;
vector link;
TrieNode(int x=-1): val(x), link(N){}
};
class Trie{
public:
Trie(){
root = new TrieNode;
}

void put(string &key, int val){
put(root, key, val, 0);
}

int get(string &key){
TrieNode *t = get(root, key, 0);
if(t) return t->val;
else return -1;
}

void remove(string &key){... 阅读全帖
a****r
发帖数: 87
3
C++ R-way trie implementation. Coursera princeton algorithm II 讲的很详细。
const int N = 26;
struct TrieNode{
int val;
vector link;
TrieNode(int x=-1): val(x), link(N){}
};
class Trie{
public:
Trie(){
root = new TrieNode;
}

void put(string &key, int val){
put(root, key, val, 0);
}

int get(string &key){
TrieNode *t = get(root, key, 0);
if(t) return t->val;
else return -1;
}

void remove(string &key){... 阅读全帖
b******i
发帖数: 914
4
来自主题: JobHunting版 - FB面试题一道 求解
贴个code,不过只test了几种case
/*
给一个list of string 和一个string s, 返回s是不是在list当中, s里可以包含一
个*代表一个任意字符。
*/
#include
#include
#include
using namespace std;
struct TrieNode {
TrieNode():is_word(false),children(26,nullptr) {}
bool is_word;
vector children;
};
class Solution {
public:
bool string_in_list(vector strings, string s) {
if(s.length() == 0 || strings.size() == 0)
return false;

// construct trie
... 阅读全帖
Q*****a
发帖数: 33
5
来自主题: JobHunting版 - airBnb电面面经
实现了4种方法
1: 直接遍历完整计算edit distance. 285 clocks.
2: 直接遍历,计算edit distance到 >k 就返回. 149 clocks.
3: Trie+shortcut edit distance. Build trie: 606 clocks, process: 6 clocks.
http://stevehanov.ca/blog/index.php?id=114
4: Generate delete k transformation. Build dict: 17033 clocks. process: 0
clocks.
但这里不仅需要生成delete k的pattern, 还需要生成所有delete 1..k-1的pattern,
否则不能handle如(chrome brome)的case
http://blog.faroo.com/2012/06/07/improved-edit-distance-based-s
#include "common.h"
class Trie {
public:
class TrieNo... 阅读全帖
Q*****a
发帖数: 33
6
来自主题: JobHunting版 - airBnb电面面经
实现了4种方法
1: 直接遍历完整计算edit distance. 285 clocks.
2: 直接遍历,计算edit distance到 >k 就返回. 149 clocks.
3: Trie+shortcut edit distance. Build trie: 606 clocks, process: 6 clocks.
http://stevehanov.ca/blog/index.php?id=114
4: Generate delete k transformation. Build dict: 17033 clocks. process: 0
clocks.
但这里不仅需要生成delete k的pattern, 还需要生成所有delete 1..k-1的pattern,
否则不能handle如(chrome brome)的case
http://blog.faroo.com/2012/06/07/improved-edit-distance-based-s
#include "common.h"
class Trie {
public:
class TrieNo... 阅读全帖
l******s
发帖数: 3045
7
来自主题: JobHunting版 - 问一道面试设计题
有笔误,应该是创建SortedSet时指定一个排序方法。比如下面:
SortedSet ss = new SortedSet(Comparer.Create((
a, b) => a.CallTimes == b.CallTimes ? a.PhoneName.CompareTo(b.PhoneName) : b.
CallTimes.CompareTo(a.CallTimes)));
我用的是C#,Java也有类似的创建自定义的排序的Compare的方法。
g***9
发帖数: 159
8
来自主题: JobHunting版 - 攒人品,分享Pinterest面经
第二题公共前缀并不是leetcode原题吧...
请教大牛 rolling hash 的解法 .. ?
自己写了一个Trie的python版本:
import sys
CHAR_COUNT = 26
class Entry(object):
def __init__(self, count=0, next=None):
self.cnt = count
self.nxt = next
#def
#class
class TrieNode(object):
def __init__(self):
self.entrylist = []
for i in xrange(CHAR_COUNT):
self.entrylist.append(Entry())
#for
#def
#class

root = TrieNode()
def InsertTrieNodes(root, curstr):
n = len(curstr)
prefix = []

curnode = root
valid = Tru... 阅读全帖
l******s
发帖数: 3045
9
来自主题: JobHunting版 - 问一道面试设计题
TrieNode上加个call times field,然后用搜索结果放到SortedSet里就可以
,创建TrieNode时指定一个排序的方法,按照call times排即可。时间复杂度O(nlgn)
,n是Trie搜索的结果长度。
I******k
发帖数: 378
10
来自主题: JobHunting版 - suffix tree 和 trie
这两个可以用同样的数据结构实现吧, 感觉suffix tree就是trie的一种特殊情况,从
不同的位置开始到字符串末尾得到的substr建起来的trie. 最简单的实现下面这种就可
以了吧:
struct trieNode
{
trieNode *child[26]; // suppose only contain a-z
char *str; // characters in this node
};
各位有什么看法?
b******7
发帖数: 92
11
来自主题: JobHunting版 - 讨论几道google题(附个人答案)
4)
设两人概率分别为p1,1-p1
则p1 = 1/6 + 5/6 * (1-p1) ==> p1 = 6/11, 1-p1 = 5/11
5)
判断顺子:将7张牌按数字排序,然后遍历找是否有连续的5个数字
判断同花:将7张牌按花色排序,然后找是否有连续的5个花色
判断同花顺:将同花中的最多连续的花色按数字排序,找连续5个数字
6)
构建trie,trie节点中加一个计数变量,统计多少个url包含该trie节点,然后按层遍
历+减枝找到最长的prefix
struct TrieNode{
char c;
vector childs;
int count;
};
s********u
发帖数: 1109
12
我觉得,在实际使用中,可以就写个node,就是自带一个bool值,一个char值,和一个
vector。其他的函数,可以写成global或者solution类里面。否则你既要写
node,还要写trie类。
比如boggle game那个题,明显就是不用trie自己的search比较好,因为每次只需要
search一个char就行了。用trie自己的,就要search一个string。
struct TrieNode {
char mContent;
bool mMarker;
vector mChildren;
Node(char *c) { mContent = c; mMarker = false; }
};
s********u
发帖数: 1109
13
我觉得,在实际使用中,可以就写个node,就是自带一个bool值,一个char值,和一个
vector。其他的函数,可以写成global或者solution类里面。否则你既要写
node,还要写trie类。
比如boggle game那个题,明显就是不用trie自己的search比较好,因为每次只需要
search一个char就行了。用trie自己的,就要search一个string。
struct TrieNode {
char mContent;
bool mMarker;
vector mChildren;
Node(char *c) { mContent = c; mMarker = false; }
};
e********3
发帖数: 229
14
来自主题: JobHunting版 - 问一道面试设计题

不懂.
比如你输入a, 那你要搜索a下面所有trienode,然后再把搜索结果进行排序吧?
"创建TrieNode时指定一个排序的方法,按照call times排即可"
这是什么意思
l******0
发帖数: 244
15
来自主题: Java版 - Recusion is fucking magic!!
public List listAllWordsinTrie(){

List words = new ArrayList();

if(root == null){
return words;
}
StringBuilder prefix = new StringBuilder();
allWordsHelper(root.children,prefix,words);
return words;
}

// depth first search
private void allWordsHelper(List children, StringBuilder
prefix, List words){

for(int i= 0; i ... 阅读全帖
A*****i
发帖数: 3587
16
来自主题: JobHunting版 - 谁能写个trie的框架?
知道一种数据结构,算法你自己完成吧
typedef struct node{
node * next;
int word[26];
}trieNode;
y*****e
发帖数: 712
17
来自主题: JobHunting版 - 攒人品,报F家面经
lz, 我刚才写了写trie这题,感觉代码量不小啊,得写trienode再写trie class里的
match words, 你这轮2题,难道15分钟这题就得写出来?无bug? 这要求也太高了吧

发帖数: 1
18
来自主题: JobHunting版 - design search engine typeahead的问题
如果用trie的结构的话,如果trie太大,cache放不下,要怎样放到disk里呢?
是否要用key value store database,每个trienode设置一个ID当做key,然后child
nodes的ID存在value里?
(共0页)