数据结构第二讲--了解算法

算法

数据结构+算法=程序设计
举个例子:求1+2…+100
用C解

#include<stdio.h>
int  main() {
	 int i, sum = 0;
	 for (i = 1; i <= 100; i++) {
		 sum+=i;
	 }
	 printf("%d", sum);
}

输出结果:
5050

java解

public class  Test {
	public static void main(String[] args) {
		int sum = 0;
		for (int i = 1; i <= 100; i++) {
			sum += i;
		}
		System.out.println(sum);
	}
}

输出结果:5050

1、什么是算法呢?

算法是由若干条指令所组成的有穷序列,其中每条指令表示计算机的一个或多个操作。

2、算法的特性

(1)有穷性
(2)确定性:每条指令都有确定含义,不会出现二义性。
(3)可行性
(4)输入:有0个或多个输入
(5)输出:至少有一个或多个输出

3、算法设计的要求

(1)正确性
(2)可读性
(3)健壮性:当有非法数据时,算法应做出相应的处理。
(4)高效性
(5)低存储量

4、算法的效率(重点)

//第一种算法
 int i, sum = 0,n=100;                            //执行1次
	 for (i = 1; i <= n; i++) {                     //执行n+1次
		 sum+=i;                                      // 执行n次
	 }
 //第二种算法
 int sum=0,n=100;                              //执行1次
 sum=(1+n)*n/2;                                //执行1次

分析:
第一种算法执行了 1+(n+1)+n=2n+2次
第二种算法执行了1+1=2次

时间复杂度
一个算法所需要的执行时间就是该算法中所有语句执行次数之和。当n逐渐增大时T(n)的极限情况,一般简称为时间复杂度。

大写字母O表示数量级,如:3n+4的数量级与n的数量级相等。如:T(n)=3n^2+ 5 n+4,其中 3n^2+5n+4的数量级与 n^2的数量级相同,所以 T(n)=O(n^2)。
当T(n)为多项式时,可只取其最高次幂项并省略其系数,其他的次幂项及系数均略去不写。一般地,对于足够大的n,常用的时间复杂度的大小次序如下 :
O(1)<O(log2(n))<O(n)<O(nlog2(n))<O(n^2) < O(n^3) <O(2^n)
算法的时间复杂度的数量级越大,表示该算法效率越低。(就像比赛中的跑步,时间越少,跑的很好,能拿到冠军)

在这里插入图片描述

java解

public class Test {
	public static void main(String[] args) {
		long  startTime=System.nanoTime();
		int i, j, x = 0, sum = 0, n = 100;
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= n; j++) {
				x++;
				sum += i;
			}
		}
		long  endTime=System.nanoTime();
		System.out.println(endTime-startTime+"ns");
		System.out.println(sum);
	}
}

输出结果:
在这里插入图片描述

public class  Test {
	public static void main(String[] args) {
		long  startTime=System.nanoTime();
		int sum=0,n=10000;
		sum=(1+n)*n/2;
		long endTime=System.nanoTime();
		System.out.println(endTime-startTime+"ns");
		System.out.println(sum);
	}
}

输出结果:
在这里插入图片描述
通过比较,显而易见,一个好的算法用的时间少,高效性。

空间复杂性
一个算法的空间复杂度是指程序运行开始到结束所需要的存储空间。

包括算法本身所占有的空间
输入/输出数据占有的存储空间
算法在运行过程中的工作单元和实现算法的所需辅助空间。

算法的所需存储的量度记作:S(n)=O(f(n))

在进行时间复杂度分析时,如果所占空间依赖于特定的输入,一般都是按照最差情况来分析。

发布了45 篇原创文章 · 获赞 38 · 访问量 2152

猜你喜欢

转载自blog.csdn.net/qq_44830627/article/details/104910831