一、 数据结构和算法关系
为什么要学数据结构和算法?
通常,计算机解决问题的步骤如下:
在数学模型中,计算机处理的对象之间通常存在着一种最简单的线性关系,这类数学模型就是线性的数据结构。著名计算机科学家沃斯(Nikiklaus Wirth)提出一个公式:程序=数据结构+算法。数据结构就是编程的思维,编程的灵魂,算法的精髓所在,没有了数据结构,程序就好像一个空核,是低效率的。算法与数据结构是紧密联系不可分割,必须在一起才能最终解决问题。算法是程序设计的的灵魂。
二、 两种算法的比较
在此之前大家都已经学过C语言了,不管学的好不好,也可以写点小程序。现在写一个求1+2+3+……+100结果的程序,大多数人会马上写出下面的C语言代码(或者其他语言的代码):
inti,sum =0,n =100;for(i =1;i < = n;i++)
{
sum = sum + i;
}
printf("%d",sum);
这是最简单的计算机程序之一,它就是一种算法。问题在于,这样是不是真的很好?是不是最高效?
以高斯的童年故事为例,老师要求学生计算1+2+3+……+100的结果,高斯很快就得出了答案,老师非常惊讶,高斯解释道:
sum = 1+ 2+ 3+……+ 99+100
sum =100+ 99+ 98+……+ 2+ 1
2*sum =101+101+101+……+101+101
所以sum=5050
用程序来实现如下:s
inti,sum =0,n =100;
sum = (1+ n ) * n /2;
printf("%d",sum);
他用的方法相当于另一种求等差数列的算法,不仅仅可以用于1加到100,就是加到一千,一万,一亿(需要更改整型变量类型为长整型,否则会溢出),也就是瞬间之事。但如果用刚才的程序,显然计算机要循环一千、一万、一亿次的加法运算。如果让计算机按沃斯的算法,那么速度可想而知。
三、 算法定义
算法就是解决问题的方法和步骤