如何描述算法,证明和分析算法?
在阅读计算机编程艺术(TAOCP)之前,我没有深入考虑这些问题。我将使用伪代码来描述算法,理解算法并仅估计增长顺序的运行时间。该TAOCP彻底改变了我的脑海里。 TAOCP使用英语加上步骤和goto来描述算法,并使用流程图更轻松地描绘算法。似乎是低级的,但是我发现有一些优点,尤其是流程图,我已经忽略了很多。我们可以在计算遍历该箭头时用关于当前事务状态的断言标记每个箭头,并为该算法提供归纳证明。作者说: 作者的争论是我们真正理解为什么只有当我们达到了我们的思想隐含地填充所有断言的程度时算法才是有效的方法,如图4所示。 我还没有经历过这样的东西。另一个优点是,我们可以计算每个步骤执行的次数。用基尔霍夫的第一定律很容易检查。我没有精确地分析运行时间,因此在估算运行时间时可能会省略一些。±1±1\pm1 分析增长顺序有时是无用的。例如,由于它们都是,因此我们无法区分quicksort和heapsort ,其中是期望的随机变量,因此我们应该分析常数,例如,和,因此我们可以比较和更好。而且,有时我们应该比较其他数量,例如方差。仅对运行时间的增长顺序进行粗略分析是不够的。作为TAOCPE(T(n))=Θ(nlogn)E(T(n))=Θ(nlogn)E(T(n))=\Theta(n\log n)EXEXEXXXXE(T1(n))=A1nlgn+B1n+O(logn)E(T1(n))=A1nlgn+B1n+O(logn)E(T_1(n))=A_1n\lg n+B_1n+O(\log n)E(T2(n))=A2lgn+B2n+O(logn)E(T2(n))=A2lgn+B2n+O(logn)E(T_2(n))=A_2\lg n+B_2n+O(\log n)T1T1T_1T2T2T_2 将算法翻译成汇编语言并计算运行时间,这对我来说太难了,所以我想知道一些技术来更粗略地分析运行时间,这对于C,C ++等高级语言也很有用或伪代码。 我想知道研究工作中主要使用哪种描述风格,以及如何处理这些问题。