diff --git a/4 Tree/4-字典树Trie/README.md b/4 Tree/4-字典树Trie/README.md index cda44ef..6968f78 100644 --- a/4 Tree/4-字典树Trie/README.md +++ b/4 Tree/4-字典树Trie/README.md @@ -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树将消耗大量内存 +* 用链表存储,查询时需要遍历链表,查询效率有所降低 diff --git a/4 Tree/huffman tree/赫夫曼编码.md b/4 Tree/huffman tree/赫夫曼编码.md index 274e410..624b6a5 100644 --- a/4 Tree/huffman tree/赫夫曼编码.md +++ b/4 Tree/huffman tree/赫夫曼编码.md @@ -1,6 +1,8 @@ # 赫夫曼编码 Huffman -这是一个经典的压缩算法。通过`字符出现的频率`,`优先级`,`二叉树`进行的压缩算法。 +Huffman在1952年根据香农(Shannon)在1948年和范若(Fano)在1949年阐述的这种编码思想提出了一种不定长编码的方法,也称霍夫曼(Huffman)编码。 + +这是一个经典的压缩算法。通过`字符出现的频率`,`优先级`,`二叉树` 进行的压缩算法。 对一个字符串,计算每个字符出现的次数,把这些字符放到优先队列(priority queue) 这这个priority queue转出二叉树 diff --git a/8 Algorithms Analysis/动态规划.md b/8 Algorithms Analysis/动态规划.md index e5797cf..b7d41f0 100644 --- a/8 Algorithms Analysis/动态规划.md +++ b/8 Algorithms Analysis/动态规划.md @@ -55,6 +55,11 @@ DP通常基于一个递推公式及一个(或多个)初始状态,当前子问 若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。 +### DP VS 回溯法 + + +动态规划的暴力求解阶段就是回溯算法。只是有的问题具有重叠子问题性质,可以用 dp table 或者备忘录优化,将递归树大幅剪枝,这就变成了动态规划;而有些问题没有重叠子问题,也就是[回溯算法](回溯法.md)问题了,复杂度非常高是不可避免的 + ## DP 解题模板 diff --git a/8 Algorithms Analysis/回溯法.md b/8 Algorithms Analysis/回溯法.md index 9599935..f4a12fd 100644 --- a/8 Algorithms Analysis/回溯法.md +++ b/8 Algorithms Analysis/回溯法.md @@ -13,6 +13,14 @@ 回溯法求解问题时,一般是一边建树,一边遍历该树;且采用非递归方法。 +#### 案例 + +* 迷宫问题 +* 全排列 + + + + ## 代码框架 ``` @@ -48,9 +56,5 @@ def backtrack(路径, 选择列表): -#### 其它案例 - -* 迷宫问题 -* 全排列