[Python] 树 - 二叉堆

利用二叉堆实现优先级队列 队列有一个重要的变体,叫作优先级队列。和队列一样,优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前,优先级最低的元素在最后。因此,当一个元素入队时,它可能直接被移到优先级队列的头部。 我们可以使用排序函数和列表实现优先级队列。但是,就时间复杂度而言,列表的插入操作是 $O(n)$,排序操作是 $O(n\log n)$。 实现优先级队列的

- 阅读全文 -

[Python] 树

树 快速总结: 映射的不同实现间的性能对比: 有序列表 散列表 二叉搜索树 AVL 树 put $O(n)$ $O(1)$ $O(n)$ $O(\log_2{n})$ get $O(\log_2{n})$ $O(1)$ $O(n)$ $O(\log_2{n})$ in $O(\log_2{n})$ $O(1)$ $O(n)$ $O(\log_2{n})$ del $O(

- 阅读全文 -

[Python] 排序

排序是指将集合中的元素按某种顺序排列的过程。 分析排序过程: 首先,排序算法要能比较大小。为了给一个集合排序,需要某种系统化的比较方法,以检查元素的排列是否违反了顺序。在衡量排序过程时,最常用的指标就是总的比较次数。 其次,当元素的排列顺序不正确时,需要交换它们的位置。交换是一个耗时的操作,总的交换次数对于衡量排序算法的总体效率来说也很重要。 快速总结: 冒泡排序、选择排序和插入排序都是 $

- 阅读全文 -

[Python] 搜索

搜索 快速总结: 不论列表是否有序,顺序搜索算法的时间复杂度都是 $O(n)$。 对于有序列表来说,二分搜索算法在最坏情况下的时间复杂度是 $O(\log n)$。 基于散列表的搜索算法可以达到常数阶。 Python 提供了运算符 in,通过它可以方便地检查元素是否在列表中。 >>> 15 in [3, 5, 2, 4, 1] False >>> 3 in

- 阅读全文 -

[Python] 递归

递归三原则 所有的递归算法都要遵守三个重要的原则: 递归算法必须有基本情况; 递归算法必须改变其状态并向基本情况靠近; 递归算法必须递归地调用自己。 计算一列数之和 循环求和函数: def listsum(numList): theSum = 0 for i in numList: theSum = theSum + i return theSum 递归

- 阅读全文 -