循环不变式主要用来理解算法的真确性;
有三个必须证明的性质:
初始化:循环的第一次迭代之前,它为真,
保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真,
终止:在循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法是真确的。
分析一个算法时,需要一个实现技术的代价,包括描述所用资源及其代价的模型。
RAM模型:
均匀的空间耗费:是指计算中曾经使用过的寄存器的总数。均匀的时间耗费是指自始自终被执行的指令和转移的总条数。
对数耗费:此时空间耗费指计算中普通寄存器存过的自然数的最大长度之和。时间耗费则指被执行的每条指令的时间耗费之和。而一条指令的时间耗费则被认为与被运算的自然数的长度成正比的。对于RAM,还可以定义巡回(虚拟的并行时间)。它是计算中周相的总数,而一个周相则是 RAM工作的一个阶段,在此阶段中,没有任何一个普通寄存器先被写入然后又被读出。
通常把一个程序的运行时间描述成其输入规模的函数。
输入规模的最佳概念依赖于研究的问题。
代价可以抽象为运行时间的增长量级或增长率。
分治法:
(1)分解原问题为若干子问题,这些子问题是原问题的规模较小的实例;
(2)解决这些子问题,递归地求解各子问题。然而若子问题的规模足够小,则直接求解。
(3)合并这些子问题的解成原问题的解。