首页 > 编程语言 >Python_数据结构的应用heap

Python_数据结构的应用heap

时间:2023-12-11 15:23:58浏览次数:34  
标签:heapq Python Tree -- 二叉树 heap 数据结构 节点

数据结构

栈   --> stack
队列 --> queue
树   --> tree 
堆   --> heap 
散列 --> hash
图   --> graph 图结构一般包括顶点和边  邻接矩阵  DAG,Directed Acyclic Graph即「有向无环图」

树(Tree)是一种非线性的数据结构,
   由n个节点组成,其中每个节点都有零个或多个子节点。
   树结构中包括一个根节点,该节点没有父节点,以及其他节点,每个节点最多只有一个父节点
  根节点  父节点 子节点 叶子节点
    兄弟节点  祖先节点
每个元素称为结点(node) root subtree		

概念

 Height
 层次 高度 深度
    层次: 根节点层次为1,每向下一层,层次就加1
    高度: 节点的高度是该节点到叶子节点的最长路径
	深度: 从根节点到该节点的距离称为节点的深度
 
 度 Degree
     度: 节点下面子节点的数量称为节点的度(分支的数量),所有节点的度中最大的度称为树的度

二叉树

 二叉树是一种特殊的树,二叉树中每个节点的度都不能大于2
   满二叉树
   完全二叉树
 二叉树的代码实现 
 二叉树的遍历  
    前序遍历 -根-左-右
	中序遍历 -左-根-右
	后序遍历 -左-右-根
 层序遍历:遍历规则:从根节点开始,按照从上到下、从左到右的顺序逐层访问节点	
   
 二叉树中能够实现: 快速插入、删除 查找   
 二叉查找树(Binary Search Tree,BST),又叫做二叉排序树、二叉搜索树  
 红黑树(Red-Black Tree)也是是一种自平衡的二叉搜索树,与AVL树不同的是它在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black	  
 数据结构中的堆 heap 
     堆(Heap)是一种基于二叉树结构的数据结构。与内存中的堆不同,此处的堆是指堆数据结构

相互之间的转换

 树转换为二叉树 
 森林转换成二叉树

 哈夫曼树(Huffman Tree)  用于信息编码
 最小生成树(Minimum Spanning Tree)
 线段树(Segment Tree)

应用

 数据库中非常核心的一个部分,就是索引结构的设计——这几乎决定了数据库的应用领域
    B 树也属于一种自然平衡树。内部通过分裂机制,能够保持数据的有序
    B+树的节点中也包含了多个信息
    日志结构化合并树(Log Structured Merge Tree)

查看是什么

## pip install binarytree
 from binarytree import tree, bst, heap
 from binarytree import Node  
#非满二叉树相对于满二叉树“缺失”的节点索引号是跳空的。 
 
## treelib 

## Python heapq模块是Python标准库的一部分
  Python heapq模块可以用于在大型数据集中查找最大或最小的元素,它可以在O(log n)时间内完成查找操作。
 heapq 的全写是heap queue,是堆队列的意思。这里的堆和队列都是数据结构
  import heapq
  nums = [14, 20, 5, 28, 1, 21, 16, 22, 17, 28]
  heapq.nsmallest(3, nums)
  heapq.nlargest(3, nums)
 ## 自定义排序 自己定义一个获取关键字的函数,传递给heapq,这样才可以完成排序
 # 额外传递了一个参数key,我们传入的是一个匿名函数
 cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])

##  heapq.heapify方法,输入一个数组,返回的结果是根据这个数组生成的堆(等价于优先队列)	
   heapify(x):将常规列表x转换为堆队列

提供的功能有哪些

 numpy只提供了argpartition 和 partition,

实现以及分析复杂度

 操作的复杂度--时间复杂度和空间复杂度	 

python 迁移学习C++

 STL:the C++ Standard Template Library,C++ 标准模板库	

参考

图解!24张图彻底弄懂九大常见数据结构 https://cloud.tencent.com/developer/article/1634155
https://blog.csdn.net/qq_19707521/article/details/128393983 Pytorch/Paddle topk 与 Numpy argpartition 函数应用 	

标签:heapq,Python,Tree,--,二叉树,heap,数据结构,节点
From: https://www.cnblogs.com/ytwang/p/17894504.html

相关文章

  • python数据类型元组、列表、集合、字典相互嵌套
    系统Windows10专业工作站版22H2软件python-3.9.6-amd64.exe拓展库:jupyter==1.0.0notebook==7.0.61.元组嵌套1.1元组嵌套元组try:tuple0=((1,2,3),(1,2,3),(1,2,3))print(tuple0,type(tuple0))except:print('error')((1,2,3),(1,2,3),(1,2,......
  • map(python中的字典)
    //创建一个空的map,键是字符串类型,值是整数类型myMap:=make(map[string]int)//创建有值的map//初始化并赋值myMap:=map[string]int{"apple":1,"banana":2,"orange":3,}//添加修改元素myMap["grape"]=4//添加元素myMa......
  • 【python基础之函数】--- 函数入门
    title:【python基础之函数】---函数入门date:2023-12-0818:50:06updated:2023-12-1114:30:00description:cover:https://home.cnblogs.com/u/dream-ze/函数的基本使用目前为止,借助之前的学习内容,是已经能开发一些功能简单的小程序了但随着程序功能......
  • 在自动化测试时,Python常用的几个加密算法,你有用到吗
    本文分享自华为云社区《『加密算法』|自动化测试时基于Python常用的几个加密算法实现,你有用到吗?》,作者:虫无涯。写在前边这几天做自动化测试,遇到一个问题,那就是接口的请求的密码是加密的;产品的要求是不能使用其他特殊手段,他给提供加密算法,需要在接口请求的时候,使用加密算法处......
  • Python语言合并列表元素常用的方法!
    众所周知,列表是Python中常见的数据类型,它可以存储多个元素。但由于某种需求,我们有时候需要将多个元素进行合并,那么Python语言如何合并列表中的元素?以下是常用方法介绍。1、使用+运算符在Python中,可以使用+运算符将两个列表的元素合并成一个新的列表。例如,假设有两个列......
  • python 怎么组织代码?
    参考:https://www.liaoxuefeng.com/wiki/1016959663602400/10174541450141761.为什么不能把代码写到一个.py中?实际开发中,我们不可能把所有的代码都写到一个.py文件中,看起来太累了,并且难以修改,修改后难免要考虑会不会影响别的。解决方法:把很多函数分组,分别放到不同的文件里,......
  • [Python急救站]文件管理工具
    对于一个程序员,有时候文件太多,忘记放哪里了,那有没有一个可以帮你定位到文件的文件管理工具呢,抱着这样的想法,我做了以下这个代码,可以快速定位找到文件所在位置。importosimporttkinterastkimporttimeimportsubprocess#函数用于搜索文件defsearch_files():file......
  • Linux学习36- python3.9出现ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+
    遇到问题python3.9上安装requests库,requests包引入了urllib3,而新版本v2.x的urllib3需要OpenSSL1.1.1+以上版本所以就出现了报错File"/root/python39/lib/python3.9/site-packages/_pytest/assertion/rewrite.py",line186,inexec_moduleexec(co,module.__dict__......
  • Linux学习35- python3.9出现ModuleNotFoundError: No module named '_ctypes'的解决
    遇到问题pip安装第三方库的时候报错ModuleNotFoundError:Nomodulenamed'_ctypes'File"/usr/local/python3/lib/python3.9/ctypes/__init__.py",line7,in<module>from_ctypesimportUnion,Structure,ArrayModuleNotFoundError:Nomodulen......
  • 10行Python代码能做出哪些酷炫的事情?
    Python凭借其简洁的代码,赢得了许多开发者的喜爱。因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作。下面我们来看看,我们用不超过10行代码能实现些什么有趣的功能。一、生成二维码二维码又称二维条码,常见的二维码为QR......