算法

Cnic.org,开放的网络天书!


算法是指完成一个任务所需要的具体步骤和方法的描述。

不同的算法可能用不同的时间、空间或效率来完成同样的任务。如果一个算法有缺陷,或不适合于这个问题,执行这个算法将不会解决问题。 一个算法的优劣可以用空间复杂度与时间复杂度来衡量。时间复杂度是指完成该算法所需要的时间,空间复杂度是指完成该算法所需要占用的空间(内存大小)。

目录

算法的诞生

“算法”一词最早来自公元9世纪波斯数学家比阿勒·霍瓦里松的一本影响深远的著作《代数对话录》。20世纪的英国数学家图灵提出了著名的图灵论点,并抽象出了一台机器,这台机器被我们称之为图灵机。图灵的思想对算法的发展起到了重要的作用。

形式化算法

算法是计算机处理信息的本质,因为计算机程序本质上是一个算法,告诉计算机确切的步骤来执行一个指定的任务,如计算职工的薪水或打印学生的成绩单。

一般地,当算法在处理信息时,数据会从输入设备读取,写入输出设备,可能保存起来以供以后使用。

实现算法

例子

这是算法的一个简单的例子。

我们有一串随机数列。我们的目的是找到这个数列中最大的数。如果将数列中的每一个数字看成是一颗豆子的大小,可以将下面的算法形象地称为“捡豆子”:

  1. 首先将第一颗豆子(数列中的第一个数字)放入口袋中。
  2. 从第二颗豆子开始检查,直到最后一颗豆子。如果正在检查的豆子比口袋中的还大,则将它捡起放入口袋中,同时丢掉原先的豆子。
  3. 最后口袋中的豆子就是所有的豆子中最大的一颗。

下面是一个形式算法,用近似于编程语言伪代码表示

给定:一个数列“list",以及数列的长度"length(list)" 
largest = list[1]
for counter = 2 to length(list):
  if list[counter] > largest:
    largest = list[counter]
print largest

符号说明:

  • = 用于表示赋值。即:右边的值被赋予给左边的变量。
  • List[counter]用于表示数列中的第counter项。例如:如果counter的值是5,那么List[counter]表示数列中的第5项。
  • <= 用于表示“小于或等于”。

算法设计和分析的基本方法

算法的分类

个人工具
天书
中文维客年会
网络天书
pagerank 5/10