一.算法
1.概念
算法是对特定问题求解步骤的一种描述。是指令的有限序列,其中每条指令表示一个或多个操作
2.性质
- 有穷性,即对应概念中的有限序列,一个算法必须在执行有限步骤之后结束,并且每一个步骤都在有穷的时间内完成
- 确定性
- 有效性
- 输入,具有零个或多个输入
- 输出,必须要有一个或多个输出
3.目标:正确性,可读性,健壮性,高效率
4.算法的描述:自然语言,程序设计语言,伪代码
5.算法分析
- 时间复杂度T(n)分析
- 空间复杂度分析
1)时间复杂度T(n)
执行算法所需要的计算工作量,用算法所执行的基本运算次数来度量。而算法所执行的基本运算次数是问题规模的函数,即算法的工作量=f(n)。
求时间复杂度:大O表示法,只需保留最高次幂的项,并去掉其系数即可
eg1:求两个n阶矩阵相乘的算法,求其算法的时间复杂度
public static void squareMult(int [][]a,int [][]b,int[][]c,int n){
//求两个n阶矩阵相乘的算法,求其算法的时间复杂度
for (int i=0;i<n;i++){ //n+1
for (int j=0;j<n;j++){ //n(n+1)
c[i][j]=0; //n^2
for (int k=0;k<n;k++){ //n^2(+1)
c[i][j]+=a[i][k]*b[k][j];//n^3 T(n)=)(n^3)
}
}
}
}
eg2:
int k=0;
for (int i=1;i<=n;i++) {
for (int j=1;j<=i;j++)
k++; //n(n+1)/2
}
}
注:考虑最好,最坏,平均时间复杂度
算法的空间复杂度是指:执行这个算法所需要的内存空间。
算法通常由两种基本要素组成:
1.对数据对象的运算和操作(算术运算,逻辑运算,关系运算,数据传输等)。
2**算法的控制结构(**一般都可以用顺序,选择,循环三种基本结构组成)
算法设计基本设计方法主要有:列举,归纳,递归,递推和减半递推技术
数据结构
数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(物理结构)
数据的存储结构在计算机中所占的空间不一定是连续的
数据结构是指相互关联的数据数据元素的集合
根节点,终结点,内部结点
.
数据结构按逻辑关系分为
⒈线性结构⑴有且只有一个根节点⑵每个节点最多只有一个前驱,也最多只有一个后驱⑶在线性结构中插入或删除任一个节点,还应是线性结构,如线性表
2.非线性结构:树和图
线性表顺序存储结构有两个基本特点:线性表中所有数据元素所占的存储空间是连续的;线性表中各数据元素在存储空间中是按照逻辑顺序依次存放的;向其插一个元素需要移动的元素个数平均为n/2;如一维数组
**线性链表:**链式存储结构,存储空间可以不连续,其各数据节点地存储顺序与数据元素之间地逻辑关系可以不一致,其数据元素之间的逻辑关系是由指针栈来确定地,即可用于线性结构,也可用于非线性结构
树与二叉树
二叉树地遍历:先左后右
前序遍历:根节点——左子树——右子树 递归(DLR)
中序遍历:左子树——根节点——右子树 递归(LDR)
后序遍历:左子树——右子树——根节点 递归(LRD)
排序技术:
冒泡排序:n(n-1)/2
堆排序:0
快速排序:n(n-1) /2
简单插入法排序:n(n-1)/2