python分治算法_Python学习笔记分治算法Leah,python,leah

分治算法

分治系列主要用于排序,在n次遍历中,使用恰当的算法或者数据结构避开o(n)的内部遍历,巧妙利用数据之间的关系避免重复运算,达到o(nlogn)的复杂度,二分法就是一个经典例子。

其他:线段树 堆 离散化 树状数组 平衡树

堆(heap)

又被称作优先队列,按照元素优先级取出

二叉堆满足两点:

父节点key总是不小于或不大于任何一个子节点的key,前者称作最大堆,后者称作最小堆。

每个节点的左右子树都是二叉堆

功能

3. 存储成数组,从上到下,从左到右存储。i节点的左右子节点是2i+1,2i+2。

4. 插入:将新插入的节点放在最后,和父节点比较,如果比父节点小,则交换,知道不比父节点小或成为根 o(logn)

5. 删除:只能删除根节点,然后把最后一个节点当成新的根,围绕根进行上下交换 o(logn)

6. 建立堆:从倒数第二层开始遍历,相当于从最下面的父节点开始遍历,保证每一个子树都是一个堆 o(n)

python实现

7.堆是一个list,这里记为heap

import heapq

建最小堆(索引从零开始):

heapq.heapify(heap)

heapq.heappush(heap, item)

heapq.heappop(heap)

heapq.heappushpop(heap,item)上两个组合起来可以加速,逻辑上先放入再弹出

heapq.heapreplace(heap, item)同为组合,逻辑上先弹出再放入

先放入保证了弹出的那个值比item小

高级用法(暂时没写原理和复杂度)

heapq.merge(*iterables, key=None, reverse=False)把多个有序输入合并排序,输出迭代器

heapq.nlargest(n, iterable, key=None)返回数据集中前n个最大元素组成的列表

heapq.nsmallest(n, iterable, key=None)返回数据集中前n个最小元素组成的列表

e2b0c4b6750675a6108db2e592cb7d93.png

线段树与离散化

平衡树

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值