2024.7.20 数据结构之旅 那么接下来,是笔者每日学习之后的总结,以此来巩固复习,
本次目标 入门 + 中等的数据结构学习,come on
前置知识点: C语言的 (指针、结构、库函数、内存管理等)
数据结构定义:
用于计算机存储、组织数据的方式,在内存中数据存储
我们的存储方式,有 数组、链表、树、哈希表等
首先,数据结构分为从 时间 和 空间的角度来出发 ,
时间复杂度 看的是算法运行效率的快慢,而空间复杂度 看一个算法运行需要的额外空间
那么随着时代发展,空间角度慢慢不被人所注意,Because: 这里有个摩尔定律,摩尔说:我们电脑上的晶体管 每3年翻两倍(每18个月翻1倍)
摩尔定律:我们电脑上的晶体管 每3年翻两倍(每18个月翻1倍)
我们买电脑 通常都问几个CPU,CPU是几核几G的啊...... 这就是说 从空间复杂度上出发的
所以基本不用担心空间角度,更新换代快 我们注重在时间上
时间复杂度概念
把它看成一个函数、f(x)
由于我们的环境不同,导致运行的时间也会不同
这里环境指(我们计算机配置不同,你1000块钱电脑,我1万电脑)我 算的更快
时间没法算怎么办?
我们算 算法的执行次数
100万数据,和 1亿数据 谁算的快?
时间复杂度的函数式
F(N) = N*N + 2*N + 10
n=10 n=100 n=1000 我们此时,N越大,后两项对结果的影响越小
因此,我们不计算精确的执行次数,只计算大概的执行次数,
这里用大O的渐进表示法 (估算值) 保留对结果影响最大的
时间复杂度: O(N^2) 当我们看到O,就要立马意识到这是一个大概的范围
大O的渐进表示法
我们说,推导大O阶的方法
1. 常数用1替代 O(100) 错 O(1)
2. 只保留最高阶 O(M+N)
3. 最高阶的系数去掉不要,只要未知数 O(2N+10) 错 O(N)
O(M+N) 一般清空下,时间复杂度用N,但是其他的表示也行
M远大于N 表示 O(M)
N远大于M 表示 O(N)
M等于N 表示 O(M) O(N) 则选一个表示
for(int k=0;k<100;++k) 时间复杂度 O(1) 表示常数次,不是一次
变化型
hello world
假设查找h 最好情况 运行的最小次数(下界) 1
假设查找w 平均情况 运行的平均次数 我们一般说N/2
假设查找d 最坏情况 运行的最大次数(上界) N
我们时间复杂度,往往做的是一个99%悲观的预期,也就是说看最坏的情况
你要提交工期,5天干完,和10天干完,肯定说10天啊 0.0