一、算法概述
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。此外,一个算法还具有5个重要特性:有穷性、确定性、可行性、输入、输出。
二、算法设计
通常求解一个问题可能会有多种算法可供选择,选择的主要标准首先是算法的正确性和可靠性、简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。
算法设计是一件非常困难的工作,通常设计一个“好”的算法应考虑达到以下目标:正确性、可读性、健壮性、效率与低存储量需求。
经常采用的算法设计技术主要有:迭代法、穷举搜索法、递推法、贪心法、回溯法、分治法和动态规划法等。
三、算法效率的度量
算法执行时间需要通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序的执行时间通常有两种方法:事后统计法、事前分析估算法。
一个算法是由控制结构(顺序、分支和循环3种)和原操作(指基本数据类型的操作)构成的,则算法时间取决于两者的综合效果。
一般情况下,算法中基本操作重复执行的次数是问题规模 n 的某个函数 f(n),算法的时间度量记作: T(n) =O( f(n) )
它表示随着问题规模 n 的增大,算法执行时间的增长率和 f(n) 的增长率相同,称作算法的渐进时间复杂度(Asymptotic Time Complexity),简称时间复杂度。
四、算法的存储空间需求
类似于算法的时间复杂度,算法所需的存储空间用空间复杂度(Space Complexity)来度量,记作 S(n) = O( f(n) ) 其中n为问题规模。一个上机执行的程序除了需要存储空间来寄存本身所用指令、常数、变量和输入数据外,也需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的额外空间,否则应同时考虑输入本身所需空间(和输入数据的表示形式有关)。