Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何通过归纳法证明程序做了什么?_Math_Proof_Postfix Notation_Induction - Fatal编程技术网

Math 如何通过归纳法证明程序做了什么?

Math 如何通过归纳法证明程序做了什么?,math,proof,postfix-notation,induction,Math,Proof,Postfix Notation,Induction,我有一个计算机程序,它读取用后缀表示法编写的操作数和运算符的字符数组。然后程序扫描阵列,使用堆栈计算结果,如图所示: get next char in array until there are no more if char is operand push operand into stack if char is operator a = pop from stack b = pop from stack perform operation using a

我有一个计算机程序,它读取用后缀表示法编写的操作数和运算符的字符数组。然后程序扫描阵列,使用堆栈计算结果,如图所示:

get next char in array until there are no more
if char is operand
    push operand into stack
if char is operator 
    a = pop from stack
    b = pop from stack
    perform operation using a and b as arguments
    push result
result = pop from stack

我如何通过归纳证明这个程序正确地计算任何后缀表达式?(摘自Java中的练习4.16算法(Sedgewick 2003))

我不确定需要针对哪些表达式来证明算法。但如果它们看起来像典型的RPN表达式,则需要建立如下内容:

1) algoritm works for 2 operands (and one operator) and algorithm works for 3 operands (and 2 operators) ==> that would be your base case 2) if algorithm works for n operands (and n-1 operators) then it would have to work for n+1 operands. ==> that would be the inductive part of the proof 1) 算法适用于2个操作数(和一个运算符) 及 算法适用于3个操作数(和2个运算符) ==>这就是你的基本情况 2) if算法适用于n个操作数(和n-1个运算符) 那么它必须对n+1个操作数起作用。 ==>这将是证据的归纳部分 祝你好运;-)

对于数学证明,以及它们有时令人困惑的名称,要鼓起勇气。在归纳证明的情况下,人们仍然期望通过演绎逻辑“弄明白”某件事(某个事实或某个规则),但这些事实和规则加在一起就构成了更广泛的真理,购买归纳法;也就是说:因为基本情况是成立的,并且因为有人证明,如果X对于“n”的情况是成立的,那么X对于“n+1”的情况也是成立的,那么我们不需要尝试每一种情况,它可能是一个大数字,甚至是无穷大的)

回到基于堆栈的表达式计算器。。。最后一个提示(加上塞格法尔船长的精彩解释,你会觉得信息太多了…)

RPN表达式如下所示: -它们的运算符比操作数少一个 -当堆栈少于2个操作数时,它们从不提供运算符 在它里面(如果他们没有;这将相当于一个不平衡的 普通表达式中的括号情况,即无效表达式)。 假设表达式是有效的(因此不会过早提供太多运算符),操作数/运算符输入算法的顺序无关紧要;它们总是使系统处于稳定状态: -堆栈上有一个额外的操作数(但知道最终会有一个额外的操作数)或 -堆栈上的操作数减少了一个(但要知道接下来的操作数也减少了一个)


所以顺序无关紧要。

我不确定需要用哪些表达式来证明算法。但如果它们看起来像典型的RPN表达式,则需要建立如下内容:

1) algoritm works for 2 operands (and one operator) and algorithm works for 3 operands (and 2 operators) ==> that would be your base case 2) if algorithm works for n operands (and n-1 operators) then it would have to work for n+1 operands. ==> that would be the inductive part of the proof 1) 算法适用于2个操作数(和一个运算符) 及 算法适用于3个操作数(和2个运算符) ==>这就是你的基本情况 2) if算法适用于n个操作数(和n-1个运算符) 那么它必须对n+1个操作数起作用。 ==>这将是证据的归纳部分 祝你好运;-)

对于数学证明,以及它们有时令人困惑的名称,要鼓起勇气。在归纳证明的情况下,人们仍然期望通过演绎逻辑“弄明白”某件事(某个事实或某个规则),但这些事实和规则加在一起就构成了更广泛的真理,购买归纳法;也就是说:因为基本情况是成立的,并且因为有人证明,如果X对于“n”的情况是成立的,那么X对于“n+1”的情况也是成立的,那么我们不需要尝试每一种情况,它可能是一个大数字,甚至是无穷大的)

回到基于堆栈的表达式计算器。。。最后一个提示(加上塞格法尔船长的精彩解释,你会觉得信息太多了…)

RPN表达式如下所示: -它们的运算符比操作数少一个 -当堆栈少于2个操作数时,它们从不提供运算符 在它里面(如果他们没有;这将相当于一个不平衡的 普通表达式中的括号情况,即无效表达式)。 假设表达式是有效的(因此不会过早提供太多运算符),操作数/运算符输入算法的顺序无关紧要;它们总是使系统处于稳定状态: -堆栈上有一个额外的操作数(但知道最终会有一个额外的操作数)或 -堆栈上的操作数减少了一个(但要知道接下来的操作数也减少了一个)


所以顺序不重要。

你知道归纳法是什么吗?您是否大致了解该算法的工作原理?(即使你还不能证明这一点?)

你的归纳假设应该说,在处理第N个字符之后,堆栈是“正确的”。完整RPN表达式的“正确”堆栈只有一个元素(答案)。对于部分RPN表达式,堆栈有几个元素

然后,您的证明是将此算法(减去result=pop from stack line)视为将部分RPN表达式转换为堆栈的解析器,并证明它将它们转换为正确的堆栈


查看您对RPN表达式的定义并从中反向操作可能会有所帮助。

您知道归纳法是什么吗?您是否大致了解该算法的工作原理?(即使你还不能证明这一点?)

你的归纳假设应该说,在处理第N个字符之后,堆栈是“正确的”。完整RPN表达式的“正确”堆栈只有一个元素(答案)。对于部分RPN表达式,堆栈有几个元素

然后,您的证明是将此算法(减去result=pop from stack line)视为将部分RPN表达式转换为堆栈的解析器,并证明它将它们转换为正确的堆栈


查看您对RPN表达式的定义并从中反向操作可能会有所帮助。

这与标准归纳法有何不同?证明基本情况,然后假设大小n-1的情况为真,意味着c