[Python] 四舍五入
通过使用 Python 内置的 decimal 模块,实现对小数保留位数进行精确控制的方法。 四舍六入五成双(银行家舍入规则) import decimal for i in range(100): s = f'1.{i:02}5' a = float(s) b = int(a * 100 + 0.5) / 100 c = decimal.Decimal(s)
通过使用 Python 内置的 decimal 模块,实现对小数保留位数进行精确控制的方法。 四舍六入五成双(银行家舍入规则) import decimal for i in range(100): s = f'1.{i:02}5' a = float(s) b = int(a * 100 + 0.5) / 100 c = decimal.Decimal(s)
计算相位或相位差时,使得结果包含在区间$\bf[-\pi,\pi]$内: import numpy as np phi = np.angle(np.exp(1j*phi))
平衡二叉搜索树 我们知道,当二叉搜索树不平衡时,get 和 put 等操作的性能可能降到 $O(n)$。下面将介绍一种特殊的二叉搜索树,它能自动维持平衡。这种树叫作 AVL 树,以其发明者 G. M. Adelson-Velskii 和 E. M. Landis 的姓氏命名。 AVL 树实现映射抽象数据类型的方式与普通的二叉搜索树一样,唯一的差别就是性能。实现 AVL 树时,要记录每个节点的平衡因
二叉搜索树 我们需要学习如何利用二叉树结构提供高效的搜索。 搜索树的操作 搜索树的接口类似于 Python 字典。 Map() 新建一个空的映射。 put(key, val) 往映射中加入一个新的键–值对。如果键已经存在,就用新值替换旧值。 get(key) 返回 key 对应的值。如果 key 不存在,则返回 None。 del 通过 del map[key]这样的语句从映射中删除键–值对。
利用二叉堆实现优先级队列 队列有一个重要的变体,叫作优先级队列。和队列一样,优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前,优先级最低的元素在最后。因此,当一个元素入队时,它可能直接被移到优先级队列的头部。 我们可以使用排序函数和列表实现优先级队列。但是,就时间复杂度而言,列表的插入操作是 $O(n)$,排序操作是 $O(n\log n)$。 实现优先级队列的