时间复杂度和空间复杂度

内存中管理数据--数据结构--快/小/带电存储

硬盘中管理数据--数据库/文件--慢/大/不带电存储

顺序表优点:1.下标的随机访问(排序,二分查找)

                   2.cpu高速缓存命中率高(cpu读取数据会将一段长度的内存放入缓存区,每次向后一段固定长度,直到数据全部在缓存区内为止)(顺序表内存密度较高(顺序表存储的数据在内存上是连续的))

           缺点:1.前面部分插入删除效率低下(需要挪动数据)

                   2.扩容(效率损失,空间浪费)

链表的优点:1.任意位置插入删除效率都很高

                   2.按需申请释放,不存在空间浪费

           缺点:1.不支持下标的随机访问

                   2.cpu高速缓存命中率低(链表在内存上的存储是不连续的)

算法复杂度:

1.时间复杂度

算法的时间复杂度是一个函数(公式),定量描述了该算法运行的时间

一个算法执行所消耗的时间,从理论上来讲是无法算出来的,它受限于机器,只有将程序在机器上运行,才能知道,不同机器运行的时间也不同,因此不方便用时间来界定时间复杂度,为了统一标准,所以才有了时间复杂度这个分析分析方式

一个算法所花费的时间与语句的执行次数成正比,算法中的基本操作的执行次数就是算法的时间复杂度

时间复杂度是带N的未知数函数表达式,从函数表达式中取1项或几项代表它的量级,就是大O的渐进表示法

大O的渐进表示法,只是算个大概,即该程序属于哪个量级

常见的量级:

O(1)(1并不是一次,而是替代一个任意常数)

O(N)

O(N^2)

O(N^3)

O(N*logN)(默认不写底数,底数为2)

O(logN)

当算法有不同情况分类时(eg.数据查找),取次数最多

2.空间复杂度

空间复杂度类似于时间复杂度,估算因为算法的需要额外开辟的空间的大小,并用渐进表示法

但是空间可以重复利用,时间是累加的

你可能感兴趣的:(算法,数据结构)