1.1基础知识

1.1定义抽象数据类型

用c语言实现复数抽象数据类型的定义

typedef struct{
    float realpart; /*实部*/
    float imagpart; /*虚部*/
}Complex;           /*复数抽象类型*/

/*
函数类型 函数名(参数列表){
    语句序列
}函数名
*/

PS:C语言单行注释//,多行注释/**/

1.2算法分析与时间复杂度

算法的特性:

有穷性,确定性,可行性,输入,输出

算法设计的要求:

正确性,可读性,健壮性,高效性

算法时间复杂度案例:

找到嵌套最深层次的语句

eg1

//n阶矩阵相乘
for(i=1;i<n;i++)
	for (j = 1; j <= n; j++) {
		c[i][j] = 0;
		for (k = 1; k <= n; k++)
			c[i][j] = c[i][j] + a[i][k] * b[k][j];
	}

使用了三个for循环,

T(n)=\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{k=1}^{n}{1} =\sum_{i=1}^{n}\sum_{j=1}^{n}{n}=\sum_{i=1}^{n}{n^2}=n^3

\sum_{k=1}^{n}{1}=1+1+1+1+...+1=1*n=n

\sum_{j=1}^{n}{n}=n+n+n+..+n=n*n=n^2

\sum_{i=1}^{n}{n^2}=n^2+n^2+n^2+...+n^2=n*n^2=n^3

!当右边不与左下方自变量一样时,求和符号的上下部分代表有多少个右边的东西相加

!当右边与左下方自变量一样时,求和符号的上下部分代表自变量从1+到左上方的值

eg2

for (i = 1; i <= n; i++) 
	for (j = 1; j <= i; j++) 
		for (k = 1; j <= j; k++) 
			x = x + 1;
		
	

\sum_{i=1}^{n}\sum_{j=1}^{i}\sum_{k=1}^{j}1=\sum_{i=1}^{n}\sum_{j=1}^{i}j= \sum_{i=1}^{n}\frac{i(i+1)}{2}=\frac{1}{2}(\sum_{i=1}^{n}i^2+\sum_{i=1}^{n}i) =\frac{1}{2}(1^2+2^2+3^2+...+i^2)+\frac{1}{2}(\frac{n*(n+1)}{2})=\frac{n(n+1)(n+2)}{6}

\sum_{j=1}^{i}j=1+2+3+...+i=\frac{i(1+i)}{2}

\sum_{i=1}^{n}\frac{i(i+1)}{2}=\frac{1}{2}(1*2+2*3+3*4+...+i*(1+i))这样不方便计算,所以做了拆分,前半部分运用数列求和。

eg3

i = 1
while (i <= n)
    i = i * 2;

循环执行1次,i=2

循环执行2次,i=2^2

循环执行3次,i=2^3

循环执行x次,i=2^x

由于条件i<=n,2^x<=n,x<\log_{2}{n},可以写成\log_{}{n}

算法时间复杂度由低到高:

 1.3算法的空间复杂度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值