数据结构概述_00

数据结构概述

算法的定义

算法 (Algorithm ) 是解决特定问题的步骤的描述。在计算机中算法是一 个有穷规则(或语句、指令)的有序集合。
它确定了解决某一问题的一个运算序列。对于问题的初始输入,通过算法有限步的运行,产生一个或多个输出。

例 :求两正整数m、n的最大公因子的算法如下:
① 输入m,n;
② m/n(整除),余数→r (0≤r≤n);
③ 若r=0,则当前n=结果,输出n,算法停止;否则,转④;
④ n→m,r->n; 转②。
如初始输入 m=10,n=4,则m,n,r 在算法中的变化如下:
m n r
10 4 2
4 2 0(停止)
即10和4 的最大公因子为2。

算法与程序

算法是解决问题的思想方法
程序是计算机语言的具体实现

#include <stdio.h>
int main()
{
	int m, n, j;
	char flag = ‘Y’;
  	while (flag == ‘y’ || flag == ’Y’)
	{
		printf(“\n”);
		scanf(“input = % d % d”, &m, &n); //输入两个整数m,n//

		if (m > 0 && n > 0 )
		{
			j = maxog(m, n) ; //求m,n的最大公因子//
			printf (“output = % d\n”, j);
		} //输出结果//

		printf (“continue ? (y / n)”);
		flag = getchar(); //输入’y’或’Y’继续,否则停止//
	}
	return 0;
}

算法与数据结构

算法设计: 取决于选定的逻辑结构
算法实现 : 依赖于采用的存储结构

瑞士科学家沃思(N.Wirth)的著名公式:数据结构 + 算法 = 程序

算法特性

(1)有穷性
(2)确定性
(3)可行性
(4)输入
(5)输出

算法分析

• 算法分析
• 解决一个问题可以有多种不同的算法,在算法正确的前提下,评价算法好坏的方法 :
• 正确性,可读性,健壮性,时间效率高和储存量低
• 消耗时间的多少 :
• 消耗存储空间的多少 :
• 容易理解、容易编程和调试、容易维护。

算法效率的度量 —算法时间复杂度

• 算法效率——用依据该算法编制的程序在计算机上执行所消耗的时间来度量。
• 问题的规模 :输入数据量的大小,用n来表示。
• 算法的时间复杂度 :算法消耗时间,它是问题规模的函数 T(n)

算法时间复杂度 —事后统计法

• 事后统计法:
• 通过编写测试程序和设计测试数据,测试程序的运行时间,从而确定算法效率的高低。
• 事后统计法的缺陷:
– (1)依赖于特定的计算机硬件和软件
– (2)需要花费大量尽力设计测试程序和测试数据。

算法时间复杂度 —事前估计方法

• 事前估计的方法:
• 根据统计学的方法,对算法效率进行估算。
• 程序在计算机运行所消耗的时间取决于:
– (1)算法的设计
– (2)算法的输入规模
– (3)编译器对代码的优化
– (4)计算机执行指令的速度

算法效率的度量 —事前估计方法

-(1)引用了“O”: O”表示一个数量级的概念。
根据算法中语句执行的最大次数(频度)来估算一个算法执行时间的数量级。
-(2)时间复杂度:算法中基本操作重复执行的次数是问题规模n的某个函数f(n),T(n)=O(f(n))
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。
-(3)语句的频度:是该语句重复执行的次数。

例:求1到n的累加和。
• 算法一:

– int i,sum=0,n=100;
– for(i=1;i<=n;i++)
– sum=sum+i;

• 算法二:

– int sum=0,n=100;
– sum =(1+n)* n/2;

计算大O的方法:
• (1)根据语句频度,写出表达式。
• (2)常数部分变为1
• (3)只保留最高阶项目,其余项的舍去
• (4)如果最高阶项有乘数且不为1,表达式除与最高阶相乘的数

常见时间复杂度

• T(n)的量级通常有:
• O©——常数级,不论问题规模多大,T(n)一致,因而是理想的T(n)量级;
• O(n)——线性级;O(n 2 ),O(n 3 )——平方、立方级;
• O(log 2 n),O(n*log 2 n) —— 对数、线性对数级;
• O(2 n )——指数级,时间复杂度最差

算法空间复杂度

算法的空间复杂度就是计算算法所需要的存储空间的大小。
S(n)= O(f(n))

版权声明

内容摘取华清创客学院培训资料,感谢华清创客学院的指导和帮助。

猜你喜欢

转载自blog.csdn.net/Set_Mode/article/details/89631991