什么是算法?为什么要对算法进行研究?相对于计算机中使用的其它技术来说,算法的作用是什么?
算法:简单来说,所谓算法(algorithm)就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出。亦即,算法就是一系列的计算步骤,用来将输入数据转换成输出结构。
我们还可以将算法看作是一种工具,用于解决一个具有良好规格说明的计算问题。有关该问题的表述可以用通用的语言,来规定所需的输入/输出关系。与之对应的算法则描述了一个特定的计算过程,用于实现这一输入/输出关系。
在计算机科学中,排序是一种基本的操作(很多程序都将它用作一种中间步骤),因此,迄今为止,科研人员提出了多种非常好的排序算法。对于一向特定的应用来说,如何选择最佳的排序算法要考虑多方面的因素,其中最主要的是考虑待排序的数据项数、这些数据项已排好序的程度、对数据项取值的可能限制、打算采用的存储设备的类型(内存、磁盘、磁带)等。
算法可以解决那些类型的问题?
(略)。。。。。。
数据结构
数据结构是存储和组织数据的一种方式,以便于对数据进行访问和修改。没有哪一种数据结构可以适用于所有的用途和目的,因而,了解几种数据结构的长处和局限性是相当重要的。
衡量算法效率的常用标准时速度,即一个算法得到最后结果所需要的时间,除此之外,算法的吞吐量也可作为效率的标准。
是否拥有扎实的算法知识和技术基础,是区分真正熟练的程序员与新手的一项重要特征。利用当代计算技术,无需了解很多算法方面的东西,也可完成一些任务。但是,有了良好地算法基础和背景的话,可以做的事要多得多了。
练习
1、给出一个实际应用的例子,它在应用这一层次上要求有算法性的内容,讨论其中所涉及算法的功能。
2、假设我们要比较在同一台计算机上插入排序和合并排序的实现。对于规模为n的输入,插入排序运行8*n*n步,而合并排序运行64*n*lgn步。当n取怎样的值时,插入排序的性能要优于合并排序?
3、对于一个运行时间为100*n*n的算法,要使其在同一台机器上,比一个运行时间为2的n次方的算法运行得更快,n的最小取值是多少?