【极客时间】数据结构与算法总结

【极客时间】数据结构与算法总结:

02|

数据结构是为算法服务的,算法要作用在特定的数据结构之上。

20个最常用的最基础的数据结构与算法:

10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树

10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法

03|

大O时间复杂度表示法,表示代码执行时间随数据规模增长的变化趋势,也叫做渐进时间复杂度。

时间复杂度分析:

1.只关注循环执行次数最多的一段代码,我们通常忽略掉公式中的常量、低阶、系数。只需要记录一个最大阶的量级。

2.加法法则:总复杂度等于量级最大的那段代码的复杂度。

T1(n)=O(f(n)),T2(n)=O(g(n))

T(n)=T1(n)+T2(n)=max(O(f(n)),O(g(n)))=O(max(f(n),g(n)))

3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积。

T1(n)=O(f(n)),T2(n)=O(g(n))

T(n)=T1(n)*T2(n)=max(O(f(n))*O(g(n)))=O(max(f(n)*g(n)))

几种常见的时间复杂度:

多项式量级:

常量阶 O(1)

只要算法中不存在循环语句、递归语句

对数阶 O(logn)

线性阶 O(n)

线性对数阶 O(nlogn)

归并排序、快速排序的时间复杂度

平方阶 O(n 2 ^2 ),立方阶以及k次方阶

非多项式量级(拥有这个时间复杂度的算法问题是NP问题):

指数阶O(2 n ^n )

阶乘阶 O(n!)

空间复杂度分析:

表示算法的存储空间与数据规模之间的增长关系。

越高阶复杂度的算法,执行效率越低,从低阶到高阶可以是:

在这里插入图片描述

(图来自于极客时间。)

04|

复杂度分析:

最好情况时间复杂度

最坏情况时间复杂度

平均情况时间复杂度

均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度。个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上,基本上均摊结果就等于低级别复杂度。

对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系,这个时候,我们就可以将这一组操作放在一块分析,看能否将较高时间复杂度那次操作的耗时,平摊到其他那些时间复杂度比较低的操作上。

在能够运用均摊时间复杂度分析的场合,一般均摊时间复杂度就等于最好情况时间复杂度

加权平均时间复杂度/期望时间复杂度:把每种情况发生的概率也考虑进去

05|

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

线性表:数组、链表、队列、栈等

非线性表(数据之间并不是简单的前后关系):二叉树、堆、图

连续的内存空间和相同类型的数据:

因为这个,才有了数组的特性“随机访问”

寻址公式:

一维数组:

a[i]_address=base_address+i*data_type_size

二维数组:

对于m*n的数组,

a[i][j]_address=base_address+(i*n+j)*data_type_size

数组和链表的区别:

数组支持随机访问,根据下标随机访问的时间复杂度O(1)

在某些特殊场景下,并不一定非要追求数组中数据的连续性,所以可以将多次删除操作集中在一起执行,可以提高删除效率。

可以先记录下已经删除的数据。每次的删除操作并不是真正地搬移数据,只是记录数据已经被删除。当数组没有更多空间存储数据时,再触发一次真正地删除操作,这样做可以大大减少删除操作导致地数据搬移。

应用:JVM标记清除垃圾回收算法的核心思想。

JVM标记清除算法:

大多数主流虚拟机采用可达性分析算法来判断对象是否存活,在标记阶段,会遍历所有GC ROOTS,将所有GC ROOTS可达的对象标记为存活。只有当标记工作完成后,清理工作才会开始。

不足:1.效率问题。标记和清理效率都不高,但是当知道只有少量垃圾产生时会很高效。

2.空间问题。会产生不连续的内存空间碎片。

容器与数组的选择:

ArrayList:可以将很多数组操作的细节封装起来,并且支持动态扩容(每次存储空间不够的时候,它都会将空间自动扩容1.5倍大小)

扩容操作涉及内存申请和数据搬移,是比较耗时,所以最好在创建ArrayList的时候事先指定数据大小。

Java ArrayList无法存储基本类型,比如int,long,需要封装为Integer、Long类。关注性能则可以使用数组。

业务开发直接使用容器。

猜你喜欢

转载自blog.csdn.net/nicezheng_1995/article/details/82960830