python实现最小堆

最小堆特点:

  • 类似一颗完全二叉树
  • 二叉树中所有的父节点的值都小于其子节点;
  • 根节点的值必定是所有节点中最小的。

父节点值不大于子节点且根节点值最小称为最小堆,反之称为最大堆。最大堆和最小堆没有本质上的区别。如下图是一个典型的最小堆:
在这里插入图片描述
方法一:
从根节点(index = 0)遍历到最后一个拥有子节点的节点(index = N//2 -1),将父节点与其子节点值作比较,必要时进行交换即可。完成一次上述过程后就能完成最底层节点的归位了。元素个数为N的二叉树层数为ceil(log2n),因此一共执行floor(log2n)次上述过程就能实现最小堆的建堆了。

如下例:
在这里插入图片描述

import math
def heap(li):
    n=len(li)
    for i in range(0,int(math.log(n,2))):
        for j in range(0,n//2):
            if 2*j+2<n and li[2*j+2]<li[2*j+1]:
                k=2*j+2
            else:
                k=2*j+1
            if li[k]<li[j]:
                li[k],
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值