目录
一、什么是数据结构?
用来组织和存储数据的结构的集合。(Map、数组就属于数据结构)
二、什么是算法?
根据一定的条件,对一些数据进行计算,得到想要的结果。(比如冒泡排序算法,对数据进行从小到大排序)
三、数据结构分类:
(1)逻辑结构
(1)集合结构
(2)线性结构(一对一)
(3)树形结构(一对多)
(4)图形结构(多对多)
(2)物理结构(存储结构)
物理结构:逻辑结构在计算机中真正的表示方式(存储方式)
(1)顺序存储结构
(2)链式存储结构
四、算法时间复杂度分析。
(1)算法效率的度量方法
(1)事后统计方法
缺点:受硬件条件影响,测试数据设计困难。
(2)事前分析方法
事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算。
程序运行时间主要取决于以下几个因素:
算法采用的策略和方法;
问题的输入规模 如 int n=100;for(int i=0;i<n;i++)输入规模是n即100,执行次数是2n+1
编译产生的代码质量;
机器执行指令的速度。
(2)T(n)=O(f(n))
f(n)是执行次数,n是输入规模。
(3)比较算法随着输入规模的增长时,有以下规则:
(1)算法函数中的常数可以忽略。
如:f(n)=n+1,可以省略1。
(2)算法函数中最高次幂的常数因子可以忽略。
如:f(n)=2n**3+1,可以省略2。(根据规则1,+1也是省略的)
(3)算法函数中最高次幂越小,算法效率越高。
如:f(n)=n**x+1,x越小效率越高。
(4)大O记法(时间复杂度的记法)。
(5)常见的大O阶。
理解:时间复杂度似乎只是研究执行次数函数的趋势变化。
(1)线性阶(单循环)O(n)
(2)平方阶(双循环)O(n**2)
(3)立方阶(三循环)O(n**3)
(4)对数阶(底数可以省略,不影响趋势)O(logn)
(5)常数阶(没有重复执行的代码)O(1)
注意:调用函数的时候时间复杂度是相乘的或相加(相加后保留最高阶项,常数因子省略)。比如循环中,又调用循环,则O(n**2)
五、算法空间复杂度分析。
空间复杂度:描述算法对内存的占用情况。
java内存的使用一般是八个字节的倍数。
引用类型变量需要16个字节,创建一个对象需要16个字节。数组需要24个(自身16个,长度4个,补充4个)
六、算法的复杂度上界和下界。
上界:代表最大值。
下界:代表最小值。