前缀树

前缀树的点的数据结构:

pass:记录创建前缀树时,该节点被经过多少次

end:记录该节点是多少个字符串的结尾

nexts:记录有多少条路从该节点出发

查询该字符串加入过几次:

查询加入的字符串中,有几个是以pre这个字符串为前缀的:

删除某个字符串:

贪心算法:

例题1:

按照时间结束早的会议先安排

字典序:将两个字符串按照字典(并非数据结构,为现实中的字典)的顺序排列

给定一个字符串数组,使其按照某种顺序拼接后使其字典序最小,使用的贪心策略为:两个字符串a,b,若ab结合字典序小于等于ba结合则a放前,否则b放前

例题2:

使用哈夫曼编码

哈夫曼编码:

如上图,给定一个数组,将所有树压入,小根堆,1)弹出两个数,结合存入cur中,2)将结合后的数压入小根堆,重复1)2)直至小根堆中只剩一个数为止,便可得到最小代价

代码实现:

例题3:

N皇后问题:

时间复杂度为O(N^N),可以进行常数级别上的优化(使用位运算来加速)

优化后