关于数据结构和算法复习记录

主要展示一个知识列表和帮助回忆复习的说明,必要时加入一个学习链接。

1.基础

1.时间复杂度和空间复杂度。

O( 1) < O(logn) < O(n) < O(nlogn) < O(n^ 2) < O(n^ 3) < O(2^n) < O(n!) < O(n^n)

2.基础数据机构

1.列表、链表、栈、队列(优先队列)。

都是基础知识,这里除了一些常规的特性比对,还可以考虑到线程安全问题,比如java的Vector。

2.跳跃表。

简单来说就是把有序的数列,提出一些索引,可以跳过一系列数据,快速确定目标数据的范围,在多次提取出索引后,可以大大加快查找速度,时间复杂度从On减为Ologn。

对比二叉树,因为二叉树在处理有序数据时,节点会有偏向,因此降低了查找效率。

3.并查集。

用于优化合并(将复杂度低的树的父节点设置为复杂度高的树的根节点)和查询(两个节点是否有相同的父节点)的树。记录父节点,用路径压缩方式优化。

参考链接:算法学习笔记(1) : 并查集 - 知乎

4.二叉堆

具备完全二叉树特性,且堆中任一父节点都大于等于或小于等于它左右孩子节点的值。分为最大二叉堆和最小二叉堆。

当插入一个新节点时,如新节点小于父节点,则与父节点交换(上浮),直到满足二叉堆条件。

删除节点一般是删除根节点,为恢复完全二叉树特性,删除后用最后一个元素代替跟节点位置,并根据特性,与子节点进行交换(下沉),直到满足二叉堆条件。

进阶:二叉堆排序,堆排序时间复杂度稳定为Onlogn。

对于有n个元素的二叉堆,经过n-1次删除之后就变成了一个有序数组。

5.哈希表

地址转化->哈希化,关于碰撞解决方案:

链地址法:每个数组单元存储的是一个链条,根据哈希化后的下标找到对应位置的数据。

开放地址法:线性探测(找空),二次探测、再哈希法(关键字为参数,再做一次哈希作为步长)

建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表。

6.布隆过滤器

通过标记地址来查询,当均为False可确定不存在,但True未必存在,有一定误差率。

参考链接:5 分钟搞懂布隆过滤器,亿级数据过滤算法你值得拥有! - 知乎

7.树相关

哈夫曼树:最优二叉树,带权路径长度最短的树,权值较大的节点离根更近。

AVL树:二叉平衡树,在插入节点后,进行左旋/右旋以保证二叉树的左右深度差不超过1,以保证稳定的查询效率,但缺点是这个调整十分频繁,导致性能上会有折扣。

B树和B+树:多路平衡查找树,保证树的高度有限,每个结点,至多有m棵子树,至少包含m/2-1个关键字,所有叶子结点都在同一层次上。而B+树将记录内容放在叶子结点上,其他结点只存放关键字。

前缀树:空间换时间,主要用在字符串比较,关键字查询等(敏感词),利用公共前缀降低查询时间开销。

红黑树:一文带你彻底读懂红黑树(附详细图解) - 知乎

线段树:处理区间信息,以及对该区间的修改,支持一些操作。

树状数组(真tm看不懂 先记录下):树状数组简单易懂的详解_FlushHip的博客-CSDN博客

矩阵

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值