目录
算法和算法分析
算法
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
一个算法具有下列5个重要的特性:
(1)有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,而且每一步都可以在有穷时间内完成。
(2)确定性:算法中的每一条指令必须有确切的含义,读者理解时不会产生二义性。
(3)可行性:一个算法是能行的。
(4)输入:一个算法有零个或多个输入,这些输入取自与某个特定的对象的集合。
(5)输出:一个算法有一个或多个输出,这些输出是同输入有着某些特定的关系的量。
算法设计的要求
(1)正确性。算法应该满足具体问题的需求。
(2)可读性。
(3)健壮性。当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
(4)效率与低存储量需求。效率是指算法的执行时间;存储量需求指算法执行过程中所需要的最大存储空间。效率与低存储量需求这两者都与问题的规模有关。
算法效率的度量
算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序的执行时间通常有两种方法。
(1)事后统计的方法。
(2)事前分析估算的方法。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作:
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。
显然,被称做问题的基本操作的原操作应是其重复执行次数和算法的执行时间成正比的原操作,多数情况情况下它是最深层循环内的语句中的原操作,它的执行次数和包含它的语句的频度相同。语句的频度指的是该语句重复执行的次数。
算法的存储空间需求
类似于算法的空间复杂度,本书中以空间复杂度作为算法所需存储空间的度量,记作:
其中n为问题的规模(或大小)。
文章为本人学习笔记,知识点整理参考严蔚敏《数据结构》(C语言版)。如有错误,欢迎大家指正!