-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathNode.lua
More file actions
65 lines (54 loc) · 1.2 KB
/
Node.lua
File metadata and controls
65 lines (54 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
-- 说明: Trie上的一个节点
require("PreLoad")
local Node = class("TrieNode")
function Node:ctor(char)
self._isWord = false
self._children = nil -- 是k,v结构 childChar = ChildNode
self.char = char
self._failNode = nil -- 失败指针
end
function Node:AddChild(char)
if not self._children then
self._children = {}
end
local child = Node.New(char)
self._children[char] = child
return child
end
function Node:GetChild(char)
if self._children then
return self._children[char]
end
end
function Node:GetChildren()
return self._children
end
function Node:MarkAsWord(b)
self._isWord = b
end
-- 是否为单词
function Node:IsWord()
return self._isWord
end
-- 下面是新增的AC自动机接口
-- 设置失败指针,lua没有内联优化,后面考虑属性public
function Node:SetFailNode(node)
self._failNode = node
end
-- 获取失败指针,如上,考虑属性public
function Node:GetFailNode()
return self._failNode
end
-- BFS广度优先构建失败指针
function Node:BuildFailNode(root)
if self == root then
self:SetFailNode(nil)
for _,v in pairs(self._children) do
v:SetFailNode(root)
end
end
for k,v in pairs(table_name) do
print(k,v)
end
end
return Node