计算机算法
为了有效地进行解题,不仅需要保证算法 正确,还要考虑算法的质量,选择合适的算 法。人们都希望方法简单,运算步骤少,以 更高效地完成计算,达到预期目的。
二、算法在计算机科学中的应用
1、计算机算法的引入
算法(Algorithm)理论处于计算机科学的 核心地位。想要使用计算机解决问题,就 要设计该问题的算法,要给出解决该问题 所需的一系列解题步骤。
2、算法不等于程序,它不需考虑具体的 机器,算法也不等于计算方法,它比计 算方ห้องสมุดไป่ตู้更具体。
2、算法的特征:
著名计算机科学家Knuth把算法的特征归纳以下5点:
一、有穷性(finiteness)
一个算法必须在有限个步骤之后结束。换句话说,一个算法 必须在有限时间内完成,否则,该算法就失去了实际价值。因 此,在算法中不能出现无限循环。数学中的无穷级数在计算时 只能取有限项。
二、确定性(definiteness)
算法中的每一个步骤都必须有明确的定义,不允许存在多义 性和摸棱两可的解释。如“将X,Y两个数进行加减运算”,是 做加法运算还是做减法运算,没有说清;再如“给变量X增加一 个值”,增加一个值,具体是多少,没有说清。在算法中,这 样含糊不清的步骤不允许出现。
三、能行性(effectiveness) 算法中的每一个步骤都是可以实现的,或可以分解为可执行
计算机算法
一、什么是算法?
百科名片
为解决一个问题而采取的方法和步骤, 就称为“算法”
例: 100
例: 求 n
n 1
方法1:1+2,+3,+4,一直加到100 加99次
方法2:100+(1+99)+(2+98)+…+(49 +51)+50 = 100 + 49×100 +50 加51次
算法的多样性原因
的基本操作。例如在算法中不能出现零做除数、在实数范围内 对一个负数求平方根等情况。 四、输入(input)
算法允许有零个或多个输入量。 五、输出(output)
算法必须有一个或多个输出。
根据以上讨论,我们对算法有了进一步的认识:算法是精确 定义的一系列规则,这些规则指定了一系列的操作,经过有限 步骤产生所求问题的解。
4、一些重要的算法:
A*搜寻算法 Beam Search 二分取中查找算法 Branch and bound
数据压缩 Diffie–Hellman密钥协商 Dijkstra’s 算法 动态规划
欧几里得算法 最大期望(EM)算法 快速傅里叶变 换(FFT)
哈希函数 堆排序 归并排序 RANSAC 算法 RSA加 密演算法
3、算法解决问题的类型
计算机科学领域的问题大致可分为以下三种类型:
一、判定性问题:这类问题给出的是与否的判别。 例如连通性问题,回路问题,查找与排序问题,字 符匹配问题等。
二、最优化问题:这类问题是在所有可能的解中求 出最优解。例如求函数的极值,最短路径问题,最 小生成数问题等。
三、函数计算问题:这类问题是在一定约束条件下 求数值解,例如方程求根,矩阵运算,函数求值等。
计算机软件的重要内容之一是程序,程序是计算机指
令的序列,计算机一步一步地执行这个指令序列,就完 成了希望它所做的事情。程序设计就是按照一定的要求 编排一个合理的指令序列。程序设计主要包含两个方面, 行为特性设计和结构特性设计。结构特性设计是指确定 合适的数据结构,将程序处理的数据在计算机内部表示 和存放。行为特性设计是确定要解决的实际问题的具体 步骤,把全部解题过程完整地描述出来,这一过程就是 算法设计。
并查集Union-find Viterbi algorithm
这就引出来一个很重要的公式:
著名计算机科学家沃思提出一个公式: 数据结构 + 算法 = 程序
一个程序应包括两个方面的内容: • 对数据的描述:数据结构(data structure) • 对操作的描述:算法(algorithm)
以上的公式表明:
1、算法与数据结构是密切相关的,算法 的设计要与数据结构相适应。