高级数据结构

优秀的算法往往取决于你采用哪种数据结构。

常用的高级数据结构:
优先队列(Priority Queue)
图(Graph)
前缀树(Trie)
线段树(Segment Tree)
树状数组(Fenwick Tree/Binary Indexed Tree)

在分析问题的时候回归本质,很多题目都能迎刃而解了。

优先队列

与普通队列的区别:
保证每次取出的元素是队列中优先级最高的
优先级别可自定义

最常用的场景:
从杂乱无章的数据中按照一定的顺序(或者优先级)筛选数据。
例如:
任意给定一个数组,要求找出前k大的数。
最直接的办法就是先对这个数组进行排序,然后依次输出前k大的数。复杂度为O(nlogn)
如果借用优先队列就能将复杂度优化为O(k+nlogk)。
当数据量很大,而k相对较小时,用优先队列能显著地降低算法复杂度。其本质在于,要找出前k大的数,我们并不需要对所有的数进行排序。

优先队列的本质:
二叉堆的结构,堆在英文里叫Binary Heap
利用一个数据结构来实现完全二叉树。
即,优先队列的本质是一个数组,数组里的所有元素既有可能是其他元素的父节点,也有可能是其他元素的子节点。而且每个父节点只能有两个子节点。

优先队列的特性:
数组里的第一个元素array[0]拥有最高的优先级
给定一个下标i,那么对于元素array[i]而言

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值