xiazeye
《计算机程序设计艺术 第一卷》-1.2 数学知识准备
这章介绍了这本书用到的数学知识和符号。
1.2.1 数学归纳法
采用逻辑的链条结构,在链条的第一个节点为真的时候,且证明了p(n)为真时 p(n+1)也为真,则整个逻辑链为真。
书上的算法I1 也只是用程序打印了这个思路,并没有真的证明。证明的有效性依然是人(或者是依靠逻辑的有效性)来保证的。
在前面一章Basic Concepts 中,算法 E介绍了一种用递归求最大公约数的算法。(Euclid\'s algorithm)
在这章中这更近一步了,Extended Euclid\'s algorithm 可以在算出最大公约数(gcd,greatest common divisor)的同时,导出两个整数a和b,使得 贝祖等式 am+bn = gcd(m,n) 成立。
并介绍了一种画出流程图,在流程的每一步添加Assert的方法。当每个步骤成立的时候,意味着每个Assert断言都成立。 更加意味着,当第n次执行被证明正确的时候,第n+1次执行也是正确的。
 
这种证明算法正确性的方法还有一个更为重要的方面:它反映了我们理解算法的方式。
我们在看一些定理的时候,常常很迷糊,但是看到例子的时候似乎就理解了。这其实是因为这些例子帮助我们在头脑中形成了各种断言。
我们真正的理解一个算法是有效的,只有当我们的思想已经隐式的填充了所有的断言,就如上图所示。这也意味着当一个人向另外一个人讲述算法的时候,这些不能被自动推理出来的断言应该被陈述出来。在提E算法的时候,就应该提到断言A6。
注意:上面的步骤只能证明了当算法能够中断的时候,它是正确的。
习题13提供了证明能够中断的方法。
其实只需要在A3,A5,A6的地方,让T = T+1,则可以构造出T<=3n,因为在A3的断言中,有一个statement是: r < d ,而d的最大值就是n,所以每一次迭代r的最大值是d-1,而r等于0的时候,程序就中断了,所以A3最大执行次数是n,所以 T \leq 3n ,得证。
 
 

分类:

技术点:

相关文章:

  • 2021-08-08
  • 2022-12-23
  • 2021-12-23
  • 2022-01-23
  • 2021-12-20
  • 2021-12-11
猜你喜欢
  • 2022-03-01
  • 2022-12-23
  • 2021-05-24
  • 2021-04-25
  • 2022-12-23
  • 2021-07-05
  • 2021-05-25
相关资源
相似解决方案