生成树需要覆盖所有的顶点。
感觉还是得睡八个小时。压力越大越想睡觉,保持精力还是非常重要的。从今天开始 23 - 7 这样子吧。
理想随即情况下,完全二叉堆插入的平均复杂度是 O ( 1 ) O(1) O(1), 删除平均和最坏时间复杂度都是 O ( l o g n ) O(logn) O(logn)
上面这个知识点还是蛮重要的。考了三次了。当然分数就是一分的判断题。
Floyd 建堆的时间复杂度是 O ( n ) O(n) O(n)
感觉光是记忆一个结论还是不够,要知道这个算法的流程比较好一点。然后现在这个阶段也不要拓展,目标就是把真题吃透。把真题涉及的每一个具体的知识点在 ppt 找到对应的内容,然后吃透。这才是比较正确的复习策略。
我梳理了一下 25 年 Floyd 建堆的填空题,感觉也不是那么困难,也没有说刻意为难我们。还是考察的比较基础。关键就是一些基础的东西。然后自己硬看 ppt 感觉效果也是一般,因为自己理解得不深刻,注意不到一些细节,也看不懂老师的弦外之音。所以就是做题然后再看知识点,从终点出发去分析和理解。
Floyd 建堆是从最后一个非叶节点开始往上面递归处理。从 秩为 n 2 − 1 \frac{n}{2}-1 2n−1 这个节点开始处理,每一次都是 i-- 操作。比较父节点和两个孩子节点,如果孩子节点更大,就交换两个节点。大顶堆是父节点的值不小于孩子节点的值,也就是大于等于孩子节点的值。
交换之后需要考察下降之后的节点是否满足是新的子树的父节点,如果不是,还需要交换调整。
要是今年考一个用 O ( n ) O(n) O(n) 时间 Floyd 建堆,考这个过程来一个填空题,就爽了。再来一道判断题。看了一下真题,这么考察还真是有可能的。判断这个完全二叉堆的时间复杂度,理想随机是 O ( 1 ) O(1) O(1), 删除的最坏和平均的时间复杂度是 O ( l o g n ) O(logn) O(logn) ,插入的最坏时间复杂度是 O ( l o g n ) O(logn) O(logn)
胜者树和败者树的比较:败者树在常系数上优于胜者树。重赛过程中,败者树只与其父节点比较,不用交替访问沿途节点及其兄弟,减少了访存时间。与败者树相比,胜者树在重赛过程中需要反复将节点与其兄弟进行比较。败者树插入和删除时间复杂度在常系数意义上优于胜者树。败者树的效率 > 胜者树的效率 > 堆。
实际上 ppt 是原始材料,但是描述的非常简略,还是得理解大佬们整理的笔记,才是复习应试最好的路子。
败者树根节点记录的是败者,不一定是亚军。需要定义一个根节点的"父节点"来记录整场比赛的胜利者。败者树记录的是败者,内部节点是孩子中的败者,但是参与下一次比较的是胜者。就是仍然是淘汰制,只是我们不再像胜者树那样,记录胜者,而是记录败者,最后把根节点的"父节点"记作冠军。
实际上 ppt 里面是对应的删除操作。锦标树排序,空间复杂度 O ( n ) O(n) O(n), 时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
节点必须算外部节点个数。节点必须算外部节点个数。节点必须算外部节点个数。
左式堆是绝对重要的考点。
反复过真题就完事了。没什么非常大的困难呢。一定要上 90 分。加油。
左式堆,首先记住一个结论,就是,假设右侧链长为 k k k, 那么左式堆至少包含 2 k − 1 2^k-1 2k−1 个内部节点, 2 k + 1 − 1 2^{k+1}-1 2k+1−1 个节点。这里所说的节点是包括了外部节点的。
完全可以把所有的时间,就是独自学习的时间全部花费在专业课上面。我认为只要专业课能考 90 分以上,我总分就有机会 360 以上。换句话说,要是专业课没有 90 分以上,过不了单科线,总分也上不去。一定要有信心,我前面也是付出了一定的努力,肯定是没有白费的努力的。现在只需要按部就班多花费时间就可以了。
看网课多暂停做笔记是正确的做法。因为真的不一定跟得上这个节奏。暂停然后慢慢理解和补充就可以了。
NPL 是什么意思:表示到 null 节点,也就是到外部节点的最近距离。也是以 x 为根的最大满子树的高度。 n p l ( N U L L ) = 0 , n p l ( x ) = 1 + m i n ( n p l ( l c ( x ) ) , n p l ( r c ( x ) ) ) npl(NULL)=0,npl(x)=1+min(\ npl(\ lc(x)\ ),npl(\ rc(x)\ )\ ) npl(NULL)=0,npl(x)=1+min( npl( lc(x) ),npl( rc(x) ) )