《大话数据结构》第二章学习笔记

一. 两种算法的比较

求1+2+3+4+...+100的结果

算法一:

#include

int main()
{
	int i;
	int sum = 0;
	for(i = 1; i <= 100; i++) 
	{
		sum = sum + i;
	}
	printf("%d\n", sum);
	return 0;
}

算法二:

sum = 1 + 2 + 3 + ... + 100

sum = 100 + 99 + 98 + ... + 1

2sum = 101 + 101 + 101 + ... + 101 (共100个101)

所以 sum = 2sum / 2 = 5050

#include

int main()
{
	int i;
	int n =100;
	int sum = 0;
	sum = (1 + n) * n / 2;
	printf("%d\n", sum);
	return 0;
}


二. 算法的特性

五个基本特性:输入输出,有穷性,确定性,可行性。


三. 算法的设计要求

正确性,可读性,健壮性,时间效率高和存储量地


四 . 算法效率的度量方法

1). 事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。

2) 事前分析估算方法:在计算机程序变编制前,依据统计方法对算法进行估算。

一个程序运行的时间,依赖于算法的好坏和问题的输入规模

输入规模和操作数量的关系:f(n) = 1或n或n^2等。


五. 函数的渐进增长 :给定2个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)增长渐进快于g(n)。

判断 一个算法的效率时,函数中的常数项和其他次要项常常可以忽略,而更应该关注主项的阶数。


六. 算法时间复杂度

O(1)叫常数阶, O(n)叫线性阶, O(n^2)叫平方阶,O(logn)叫对数阶

书上对时间复杂度的解释非常好,也非常好理解,看书。

常用的时间复杂度所消耗的时间从小到大依次是;  O(1) < O(logn) < O(n) < O(nlogn) < O(n^2)


七. 最坏情况与平均情况

最坏情况运行时间是一种保证,那就是运行时间将不会再坏了,在应用中,这是一种最重要的需求,通常,除非特别指定,我们说的运行时间都是最坏情况下的运行时间。



你可能感兴趣的:(数据结构)