在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。
树时一种基础的数据结构,BinaryTree是其中最简单的非平衡二叉树,只定义了一种父-子关系 更常用的是有结构的树:AVL树、红黑树、TRIE树,各种堆 树往往要比python内置的dict类慢一些,python的dict采用和hash表,详见《Python源码剖析》阅读笔记:第五章-dict对象
背包问题,除了01背包、部分背包、实数背包,更多的延展和学习可以参见当年DD大神的背包九讲 现做学习笔记如下
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为:
大家所熟知的01背包中要求输入是一个实数,两个整数,即背包容量和物品体积都是整数,而物品价值可以是实数,这时可以对这个整数部分即体积进行枚举,实现动态规划,即将前i个物品装入容量为j的背包所能的最大价dp[i][j]=max(dp[i-1][j],dp[i-1][j-v(i)]+w(i)),这个方法至少有两个局限,
学动规的过程中,分清动规、贪心、递归、递推是一个漫长的过程,而且正如初学动规时队长所说,动规的问题也许难点并不在动规本身,而更难的是如何判断一个问题是动规问题。今天小有所得,遂记之。
哈夫曼编码是用于数据文件压缩的一个非常有效的编码方法。其压缩率通常在20%到90%之间。哈夫曼算法使用一个字符在一个文件中出现的频率表来建立一个用0,1串表示各字符的最有表示方法,试图以最少的01串表示出现频率最高的字符,以较长的01串表示出现频率较低的字符,以降低整个文件的存储空间。