数据结构与算法(6)——集合&数&堆&图

简介: 集合&树&堆&图

集合(set)

无序,不重复

1,2,3,3,2->{1,2,3}{2,3,1}{3,2,1} 无序

作用:检查某个元素是否存在,是否有重复元素

元素->哈希函数->哈希值
解决哈希冲突->链表
类型 时间复杂度
搜索 无冲突:O(1) 有冲突:O(K)
插入 无冲突:O(1) 有冲突:O(K)
删除 无冲突:O(1) 有冲突:O(K)
访问

集合常用操作:创建集合、添加元素、查询元素、删除元素、长度

力扣练习题:217 705

python集合的用法

#1.创建集合
s=set()

#2.添加元素 O(1)
s.add(10)
s.add(2)

#3.搜索元素 O(1)
2 in s

#4.删除元素 O(1)
s.remove(2)

#5.长度 O(1)
len(s)

存在父子关系

节点、根节点(第一个开始的节点)、叶子节点(没有孩子的节点)

image-20221004140348550

普通二叉树:每个节点最多两个孩子

满二叉树:除了叶子节点,每个节点都有左右两个孩子(所有叶子节点在同一层上)

完全二叉树:从树的根节点,从上到下,从左到右依次填满节点形成的二叉树。

二叉树的遍历

前序遍历:根节点->左子树->右子树

中序遍历:左子树->根节点->右子树

后序遍历:左子树->右子树->根节点

image-20221004141722856

练习题:力扣144 94 145

必须是完全二叉树

每个节点>= (最大堆)or <=(最小堆)孩子节点

image-20221004142559179

最大堆:最大值->堆顶元素

最小堆:最小值->堆顶元素

类型 时间复杂度
访问
搜索 O(1)(只查看堆顶元素)
添加 O(logN)
删除 O(logN)

堆的常用操作:创建堆(最大堆,最小堆),添加元素、获取堆顶元素、删除堆顶元素、堆的长度、堆的遍历

练习题:力扣215 692

image-20221004144245802

image-20221004144256471


python中堆的常用操作

import heapq

class Test:
    def test(self):
        #1.创建最小堆
        minheap=[]
        heapq.heapify(minheap)
        
        #2.添加元素
        heapq.heappush(minheap,10)
        heapq.heappush(minheap,8)
        heapq.heappush(minheap,9)
        heapq.heappush(minheap,2)
        heapq.heappush(minheap,1)
        heapq.heappush(minheap,11)
        print(minheap)
        #[1,2,9,10,8,11]
        
        #查看堆顶元素
        minheap[0]
        
        #删除堆顶元素
        heapq.heappop(minheap)
        
        #查看堆是否有元素
        len(minheap)
        
        #遍历堆
        while len(minheap)!=0:
            #一直pop堆顶元素
            print(heapq.heappop(minheap))
           

注:python无法直接创建最大堆,可以创建负的最小堆然后取相反数


定点、边、邻居节点、度(每个边是一个度)

无向图,有向图,权重图(一般求权重图的最短路径)

最短路径算法:贝尔曼-福特算法、Dijkstra算法、DFS、BFS

相关文章
|
1月前
|
存储 算法 Java
散列表的数据结构以及对象在JVM堆中的存储过程
本文介绍了散列表的基本概念及其在JVM中的应用,详细讲解了散列表的结构、对象存储过程、Hashtable的扩容机制及与HashMap的区别。通过实例和图解,帮助读者理解散列表的工作原理和优化策略。
39 1
散列表的数据结构以及对象在JVM堆中的存储过程
|
5天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
24 5
|
1月前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
71 16
|
2月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
75 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
2月前
|
存储 JavaScript 前端开发
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
92 1
|
2月前
|
算法 安全 Java
【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
19 1
|
2月前
|
存储 算法 调度
数据结构--二叉树的顺序实现(堆实现)
数据结构--二叉树的顺序实现(堆实现)
|
2月前
|
存储 算法
探索数据结构:分支的世界之二叉树与堆
探索数据结构:分支的世界之二叉树与堆
|
2月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
36 0
|
2月前
|
存储 算法
【数据结构】二叉树——顺序结构——堆及其实现
【数据结构】二叉树——顺序结构——堆及其实现