update tree
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
# 字典树trie
|
||||
|
||||
## trie基本
|
||||
|
||||
`字典树`,英文名`Trie树`,Trie一词来自retrieve,发音为/tri:/ “tree”,也有人读为/traɪ/ “try”,
|
||||
又称`单词查找树` 或 `前缀树`,Trie树,是一种树形结构(多叉树)。
|
||||
@@ -81,9 +80,12 @@ trie树把每个关键字保存在一条路径上,而不是一个节点中
|
||||
|
||||
## trie树存储结构和基本操作
|
||||
|
||||
最简单实现 ---- 26个字母表 a-z (没有考虑数字,大小写,其他字符如=-*/)
|
||||
子树用数组存储,浪费空间;如果系统中存在大量字符串,且这些字符串基本没有公共前缀,trie树将消耗大量内存
|
||||
如果用链表存储,查询时需要遍历链表,查询效率有所降低
|
||||
最简单实现 ---- 26个字母表 `a-z` (没有考虑数字,大小写,其他字符如 `=-*/`)
|
||||
|
||||
trie 树存储结构
|
||||
|
||||
* 用数组存储,浪费空间;如果系统中存在大量字符串,且这些字符串基本没有公共前缀,trie树将消耗大量内存
|
||||
* 用链表存储,查询时需要遍历链表,查询效率有所降低
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# 赫夫曼编码 Huffman
|
||||
|
||||
这是一个经典的压缩算法。通过`字符出现的频率`,`优先级`,`二叉树`进行的压缩算法。
|
||||
Huffman在1952年根据香农(Shannon)在1948年和范若(Fano)在1949年阐述的这种编码思想提出了一种不定长编码的方法,也称霍夫曼(Huffman)编码。
|
||||
|
||||
这是一个经典的压缩算法。通过`字符出现的频率`,`优先级`,`二叉树` 进行的压缩算法。
|
||||
|
||||
对一个字符串,计算每个字符出现的次数,把这些字符放到优先队列(priority queue)
|
||||
这这个priority queue转出二叉树
|
||||
|
||||
@@ -55,6 +55,11 @@ DP通常基于一个递推公式及一个(或多个)初始状态,当前子问
|
||||
若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。
|
||||
|
||||
|
||||
### DP VS 回溯法
|
||||
|
||||
|
||||
动态规划的暴力求解阶段就是回溯算法。只是有的问题具有重叠子问题性质,可以用 dp table 或者备忘录优化,将递归树大幅剪枝,这就变成了动态规划;而有些问题没有重叠子问题,也就是[回溯算法](回溯法.md)问题了,复杂度非常高是不可避免的
|
||||
|
||||
|
||||
## DP 解题模板
|
||||
|
||||
|
||||
@@ -13,6 +13,14 @@
|
||||
回溯法求解问题时,一般是一边建树,一边遍历该树;且采用非递归方法。
|
||||
|
||||
|
||||
#### 案例
|
||||
|
||||
* 迷宫问题
|
||||
* 全排列
|
||||
|
||||
|
||||
|
||||
|
||||
## 代码框架
|
||||
|
||||
```
|
||||
@@ -48,9 +56,5 @@ def backtrack(路径, 选择列表):
|
||||
|
||||
|
||||
|
||||
#### 其它案例
|
||||
|
||||
* 迷宫问题
|
||||
* 全排列
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user