zoukankan      html  css  js  c++  java
  • 算法之-堆的简单介绍

    一、堆的分类

    大根堆:一棵完全二叉树,满足任一节点都比其孩子节点大
    小根堆:一棵完全二叉树,满足任一节点都比其孩子节点小

    二、堆的向下调整性质

    前提:节点的左右子树都是堆,但是自身不是堆

    三、堆排序-----内置模块

    优先队列:一些元素的集合,POP操作每次执行都会从优先队列中弹出最大(或最小)的元素。
    堆——优先队列

    Python内置模块——heapq
    heapify(x)  #将list类型转化为heap, 在线性时间内, 重新排列列表
    heappush(heap, item)
    heappop(heap)

    利用heapq模块实现堆排序

    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    import heapq
    import random
    def heapqsort(li):
        h = []
        for v in li:
            heapq.heappush(h,v)   #向h列表里面添加要进行排序的列表
        return [heapq.heappop(h) for i in range(len(h))]  #返回排序好的结果
    
    li = list(range(10))
    random.shuffle(li)
    print(li)   #[6, 0, 4, 1, 8, 5, 3, 7, 2, 9]
    s = heapqsort(li)
    print(s)   #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 相关阅读:
    [HEOI2014]南园满地堆轻絮
    [HEOI2016/TJOI2016]树
    初赛知识点
    [10.4模拟赛]T2
    [ZJOI2012]灾难
    [SDOI2010]古代猪文
    [9.26模拟赛]T1
    [9.26模拟赛]T3
    [9.26模拟赛]T2
    [9.19模拟赛]最小粒子数
  • 原文地址:https://www.cnblogs.com/morgana/p/8495620.html
Copyright © 2011-2022 走看看