首页 > 编程语言 >C++堆——heap与二叉树和python

C++堆——heap与二叉树和python

时间:2023-12-13 15:25:39浏览次数:38  
标签: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/17899108.html

相关文章

  • Python 初学之华为OD机试题:求最大数字
    题目描述给定一个由纯数字组成以宇符串表示的数值,现要求字符串中的每个数字最多只能出现2次,超过的需要进行删除;删除某个重复的数字后,其它数字相对位置保持不变。如"34533”,数字3重复超过2次,需要册除其中一个3,删除第一个3后获得最大数值"4533"。请返回经过删除操作后的最大的数值......
  • pythonDay22
    【序列化与反序列化】(定义) (使用) (案例) (猴子补丁) 【xml模块】(格式) (案例) 【importconfigparser模块】 写的不好,后续修改 【subprocess模块,执行系统命令】 ......
  • 【Python爬虫】Python爬虫入门教程&注意事项
    ​一、引言        随着互联网的快速发展,网络数据已经成为人们获取信息的重要来源。而爬虫技术作为获取网络数据的重要手段,越来越受到人们的关注。在众多编程语言中,Python因其易学易用、库丰富、社区活跃等优势,成为爬虫开发的首选。本文将带你走进Python爬虫的世界,让你......
  • Python——第五章:logging模块
    filename:文件名format:数据的格式化输出。最终在日志文件中的样子时间-名称-级别-模块:错误信息datefmt:时间的格式level:错误的级别权重,当错误的级别权重大于等于leval的时候才会写入文件importlogginglogging.basicConfig(filename='x1.txt',format='%(asc......
  • 【Python小随笔】 Grpc协议的使用
    定义接口//test.protosyntax="proto3";optioncc_generic_services=true;serviceGreeter{//第一个接口rpcOne(OneRequest)returns(OneResponse){}//第二个接口rpcTwo(TwoRequest)returns(TwoResponse){}}//第1个接口请求值messageOn......
  • Python——第五章:shutil模块
    复制文件把dir1的文件a.txt移动到dir2内importshutilshutil.move("dir1/a.txt","dir2")复制两个文件句柄f1=open("dir2/a.txt",mode="rb")#准备读f1f2=open("dir1/b.txt",mode="wb")#准备写f2shutil.copyfileobj(f1,......
  • python N 字形变换 多种解法
    解法一:使用二维数组defconvert(s,numRows):ifnumRows==1ornumRows>=len(s):returnsrows=['']*numRowsindex,step=0,1forcharins:rows[index]+=charifindex==0:......
  • 随机模拟——蒙特卡洛算法的Python实现
    蒙特卡洛方法是一类基于随机抽样的数值计算技术,通过模拟随机事件的概率过程,从而近似计算复杂问题的数学期望或积分。其核心思想是通过大量的随机抽样来逼近问题的解,从而在随机性中获得问题的统计特性。蒙特卡洛方法广泛应用于概率统计、物理学、金融工程、生物学等领域。在蒙特卡......
  • python——小游戏(ball,bird)
      ball #-*-coding:utf-8-*-"""CreatedonWedDec1309:19:382023@author:kabuqinuo"""importsys#导入sys模块importpygame#导入pygame模块pygame.init()#初始化pygamesize=width,height=640,480#设置窗......
  • 线索二叉树记录
                                       中序遍历:   BADCE 将树型结构转换为线性结构,每个结点都有直接前驱和直接后继。              ......