不变式和普通断言差在哪
在循环里随手加一句 assert,和写一个不变式的区别是【0】。
每一轮的 best 是什么
数组 {17, 24, 15, 13, 23},把每一轮结束时的 best 都打出来: #include <algorithm> #include <iostream> #include <string>
全负数组上它给出什么
一个常见的写法是 best = 0。拿全是负数的数组跑一遍: #include <algorithm> #include <iostream> #include <string> #include <
把不变式写成一句 assert
在循环体末尾加一句 assert,把「best 是前 i+1 个里最大的」真正验起来,并数一数一共验过几轮。输出「最大值/验过几轮」。 (本题用 g++ -std=c++17 -O0 编译。)
一组一直成立另一组就破
还是 best = 0 那一版。看看不变式在两个数组上分别第几轮开始不成立(一直成立就给 0),输出如 0/1。 (本题用 g++ -std=c++17 -O0 编译。)
交付初始化保持终止
把不变式证明的三步各写成一次检查,三个结论一起输出,如 过/过/过。 (本题用 g++ -std=c++17 -O0 编译。)
数学归纳法的两步是什么
第 1 步:左右两半都已排好 第 2 步:取较小的 13 放下去 第 3 步:取较小的 15 放下去 第 4 步:取较小的 17 放下去 第 5 步:取较小的 23 放下去 第 6 步:右边空了,左边还剩一个 第 7 步:剩下的也要接上,一
递归的基线对应哪一步
一个递归函数里的基线条件,对应归纳法的【0】。
归纳假设可以假设什么
证归纳步的时候,你可以放心假设【0】。
错的那版在有序输入上
下面 msort_bad 漏了合并的最后一句。先拿最顺手的测试用例——已经排好序的数组——试试: #include <algorithm> #include <iostream> #include <strin