最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用)

  转载最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用) 收藏
 
接触堆数据结构是在排序里面讲的,空间复杂度O(1),时间复杂度O(NlogN),但是在实践中还是不如快速排序(好像快速排序可以更好的利用硬件特性)。堆的意义就在于:最快的找到最大/最小值,在堆结构中插入一个值重新构造堆结构,取走最大/最下值后重新构造堆结构 其时间复杂度为O(logN),而其他方法最少为O(N).堆实践中用途不在于排序,其主要用在调度算法中,比如优先级调度,每次取优先级最高的,时间驱动,取时间最小/等待最长的 等等 ,分为最大堆/最小堆。

哈希表主要可以在O(1)时间内对查找对象定位,但是事实上,如果输入集合不确定的情况下,可能出现大量的冲突,虽然有很多好的哈希函数,但是随着随机输入,大量冲突还是不可避免,可能出现最差情况。所以,哈希表如果用在输入集合确定(即以后只会做查询操作)的情况下,选择合适的函数函数和解决冲突的方法(perfect hash)可以在O(1)时间内完成查找(有证明,看不懂)。

二叉树支持动态的插入和查找,保证操作在O(height)时间,这就是完成了哈希表不便完成的工作,动态性。但是二叉树有可能出现worst-case,如果输入序列已经排序,则时间复杂度为O(N)

平衡二叉树/红黑树就是为了将查找的时间复杂度保证在O(logN)范围内。

所以如果输入结合确定,所需要的就是查询,则可以考虑使用哈希表,如果输入集合不确定,则考虑使用平衡二叉树/红黑树,保证达到最大效

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/javatalk/archive/2007/05/15/1609555.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
哈希表二叉树红黑树是常见的数据结构,它们各有优缺点,适用于不同的场景。 哈希表的优点: 1. 平均时间复杂度为 O(1),查找、插入、删除的效率非常高。 2. 能够灵活地处理不同的键值类型和哈希函数。 3. 适用于存储大量数据且需要快速查找、插入和删除的场景。 哈希表的缺点: 1. 最坏时间复杂度为 O(n),需要进行冲突处理。 2. 需要消耗大量的内存空间,尤其是在哈希表装载因子较大时。 3. 哈希函数的设计和调整比较复杂,需要考虑多种因素。 二叉树的优点: 1. 可以通过中序遍历得到有序序列,非常适合实现排序算法和搜索算法。 2. 在最坏情况下,时间复杂度为 O(log n),比哈希表的最坏情况 O(n) 更加可控。 3. 适用于存储有序数据和需要对数据进行排序和搜索的场景。 二叉树的缺点: 1. 在最坏情况下,时间复杂度会退化为 O(n),例如在二叉搜索树中插入有序数据。 2. 需要消耗大量的内存空间,尤其是在树的高度较大时。 3. 对于平衡二叉树,插入和删除操作较为复杂。 红黑树的优点: 1. 保证平衡性,插入和删除操作的时间复杂度为 O(log n)。 2. 可以通过中序遍历得到有序序列。 3. 适用于需要平衡性和效率的场景。 红黑树的缺点: 1. 实现比较复杂,难以理解和调试。 2. 对于较小的数据集,红黑树的性能可能不如其他数据结构,例如 AVL 树。 3. 适用于静态数据集,动态插入和删除操作频繁的场景,可能需要使用其他数据结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值