高级数据结构
文章平均质量分 51
李缘钦
这个作者很懒,什么都没留下…
展开
-
《高级数据结构》-leetcode刷题课
《高级数据结构》-leetcode刷题课刷题建议8:字符串转整型13:罗马数字转整数14:最长公共前缀28:strSTR()利用sunday算法实现单模匹配36:有效的数独58:最后一个单词的长度125:验证回文串165:比较版本号205:同构字符串242:有效的字母异构词290:单词规律344:反转字符串345:反转字符串的元音字母383:赎金信刷题建议《高级数据结构》课程结束了,leetcode才是算法人员的第二春(坚持刷题,坚持数据结构与算法思维》,至少坚持每天一个题目leetcode的简单题原创 2021-05-23 05:52:08 · 173 阅读 · 0 评论 -
《高级数据结构》-哈夫曼树与哈夫曼编码
哈夫曼树基于哈夫曼编码,其中哈夫曼编码在变长编码中的平均编码长度最短。其中对于编码解码问题,需要注意解码过程中的前缀重叠问题。而且变长编码需要根据特定的场景进行设定规则,因为不同的环境(英语单词,e除出现的概率最高),不同字符出现的频率不同。通过推导哈夫曼编码最优,可以得出 熵的概念等价于 平均编码长度。从而引出交叉熵,走向机器学习。原创 2021-04-01 21:51:53 · 201 阅读 · 0 评论 -
《高级数据结构》-红黑树
红黑树(RBT)是一种平衡二叉排序树,本质上也是通过调整树高实现平衡。相较于AVL树,红黑树树高控制条件更加松散,对于动态的添加或者删除操作,可以只改变颜色,从而减少旋转的次数。其中学习红黑树时要注意:1. 牢记5个平衡条件;2. 如何通过确定性的节点得出统一的解决方案;插入调整(主要解决双红问题),从爷爷节点看,分为,叔叔节点是红色/黑色,又细分(LL,LR,RL,RR);删除调整(双重黑问题),从父节点看;兄弟【红色】-> 兄弟【黑色】(细分,侄子节点全黑/一个红(LL,LR,RL, RR)原创 2021-04-01 15:50:42 · 99 阅读 · 0 评论 -
《高级数据结构》-AVL树
AVL树基于二叉排序树,由于二叉排序树受插入序列顺序影响,可能退化成链表,AVL通过平衡条件和平衡调整,提高了下线(Nlog(N)级别)。其中插入或是删除,导致的失衡情况分别为LL,LR,RR,RL(注意判断不同子树的高度之间关系),通过左旋和右旋即可恢复平衡,其中要注意找到回溯过程中的第一个失衡节点进行调整。在结构定义方面,增加树高字段。在结构操作方面,需要在插入和删除时,进行平衡调整和树高更新。编程技巧方面注意采用虚拟头结点(Node __NIL; #define NIL (&__NIL))原创 2021-03-30 08:35:32 · 91 阅读 · 0 评论 -
《高级数据结构》-二叉排序树
二叉排序树指根节点的左子树的值小于根节点,右子树所有的值都大于根节点,常用于排名相关的问题,比如找第k位元素,或者前k为元素(用堆也可以);结构定义需要维护size字段,用于记录每棵子树的节点数量;结构操作核心为删除操作,度为0可直接删除;度为1时,父节点需要过继度为1的子节点;度为2时,需要通过前驱节点或者后驱结点变成度(0或1),再删除。但是插入顺序会影响二叉排序树的平均查找效率,为了实现平衡,课采用AVL树,或SB树。原创 2021-03-29 18:55:12 · 143 阅读 · 0 评论