本文章是我在重新学习算法的时候的笔记。如果有幸帮助到了你那再好不过了~如果有错误欢迎指正!文章内容是根据《漫画算法小灰的算法之旅》学习得来的!
概述
什么是算法?
根据我的理解,算法就是对于一个问题的解决方法,当然这个解决方法是越高效越好。
什么是数据结构?
数据结构是算法的基石,它是用来组织、管理、存储数据的。针对相同的问题,不同的数据结构可能会产生不同效果。
数据结构的组成方式有:
线性结构:数组、链表以及队列、栈、哈希表等等。
树:二叉树等等
图:图的结构更加复杂。
时间复杂度,空间复杂度
前面说算法越高效越好,那么怎样衡量高效与否呢?那就是时间空间复杂度。
①时间复杂度
在说时间复杂度之前首先要提的就是基本操作执行次数,因为时间复杂度就是把程序的执行时间函数T(n)简化为一个数量级
先看书上的一个例子
void eat1(int n){
for(int i=0;i<n;i++){
System.out.println("等待一分钟");
System.out.println("等待一分钟");
System.out.println("吃一厘米面包一分钟");
}
}
由上可知每吃一厘米的面包需要三分钟。该程序执行n次,则T(n)=3n;线性
void eat2(int n){
for(int i=n;i>1;i/=2){
System.out.println("等待一分钟");
System.out.println("等待一分钟");
System.out.println("等待一分钟");
System.out.println("等待一分钟");
System.out.println("吃剩余面包的一半");
}
}
由上可知,每次吃一半,即除以二,每次吃面包需要五分钟。T(n)=5logn(以2为底)。对数
还有常数、指数型等等
时间复杂度,针对第一种情况就是O(n),第二种O(logn),常数就是O(1)等等。
评判时间复杂度根据程序执行时间从小到大排列为 : 常对幂指阶
即当算法的时间复杂度为常数时,算法越高效。
②空间复杂度
常量空间:O(1)存储空间大小固定,且没有开辟新的存储空间。,
线性空间:O(n),例如线性数组,并且集合大小和输入规模n成正比。
还有二维空间,递归空间等。