什么是算法
程序 = 算法 + 数据结构
例子:猜数字
什么是数据结构
存放数据的结构
数组、栈、队列、链表、树、图、堆。。。
优缺点:增删改查各有利弊
什么是时间复杂度
时间复杂度是个函数描述该算法的运行时间,代表算法输入值的字符串的长度的函数,时间复杂度常用大O表述,不包括这个函数的低阶项和首项系数。
例子:
int n=10
for(int i=0;i<=n;i++){
....
}
如果n增加,循环次数也会随着变化,所以复杂度是O(n)
int n=10
for(int i=0;i<=n;i++){
for(int j =1;j<=2;j++){
....
}
}
此时循环次数为2n,不考虑系数,所以复杂度为O(n)
int n=10
for(int i=0;i<=n;i++){
for(int j =1;j<=n;j++){
....
}
}
此时循环次数为n2,不考虑系数,所以复杂度为O(n2)
常见的时间复杂度
O(1) :HashMap
O(logn):二叉树
O(n):for循环
O(nlogn):for循环嵌套二叉树
O(n2):for循环嵌套for循环
什么是空间复杂度
执行当前算法需要占用多少内存空间,我们通常用空间复杂度来描述
是一个算法在运行过程中临时占用存储空间大小的度量
int[] m=new int[n]
for(int i=0;i<=n;i++){
...
}
上面这段结果我们要创建n个int,所以复杂度为O(n)
什么是线性表
线性表就是数据排成一条线一样的结构,比如说数组、栈、队列、链表。。
非线性:树、图、堆。。
我们来看看增删改查的复杂度:
同理删除的时间复杂度为O(n)
查找分为按照下表找复杂度为O(1)
如果通过for遍历value查找则时间复杂度为O(n)