不变原则据/h1>
一般来说,一个据S.trong>不变的据/strong>是,给定的执行过程中保持恒定的量据一种href="//www.parkandroid.com/wiki/algorithm/" class="wiki_link" title="算法" target="_blank">算法据/a>.换句话说,没有允许的操作改变了不变的值。不变的原则是在一个算法的分析的最终结果(或者可能的最终结果)是非常有用的,因为我们可以丢弃具有用于不变是不可能达到一个不同的值的任何潜在结果。据/p>
正式的定义据/h2>
考虑一组状态据S.pan class="katex">
基本的例子据/h2>
许多问题给出了开始状态和转换规则,然后询问某个结果是否可以实现(或者等价地,询问哪些结果可以实现)。例如,据/p>
爱丽丝把数字1、2、3、4、5和6写在黑板上。这些数字的Bob选择二,删除他们两个,并写下他们的总和在黑板上。例如,如果选择了鲍勃的数字3和4中,黑板将包含数字1,2,5,6,和7鲍勃继续,直到只有一个留在电路板上数。什么是数字的可能值?据/h3>
在这个问题中,不变的是数字的总和在黑板上,据S.pan class="katex"> .如果鲍勃选择删除数字据S.pan class="katex"> 和据S.pan class="katex"> ,他会写据S.pan class="katex">
虽然不变的是能够准确地确定据E.m>将据/em>发生在以前的问题中,他们通常只能确定什么据S.trong>不能据/strong>发生。例如,如果问题略有更改如下:据/p>
爱丽丝把数字1、2、3、4、5和6写在黑板上。Bob从这些数字中选择两个,把它们都擦掉,然后写下它们的值据S.trong>积极差异据/strong>在黑板上。例如,如果鲍勃选择了数字3和4,则黑板将包含数字1,1,2,5和6.鲍勃继续,直到电路板上只剩下一个数字。什么是数字的可能值?据/p>
然后,许多不同的结果是可能的。然而,不变量仍然在排除可能有用:据/p>
如果是鲍勃选的数字据S.pan class="katex"> 和据S.pan class="katex"> ,在那里据S.pan class="katex">
注意,这个不变量并没有说明是否所有奇数的最终结果都是可能的;它只是说,不可能有偶数的结果。据/p>
Monovariants据/h2>
一种据S.trong>单变据/strong>与不变性相似,但不是在转换下剩下不变,单级,在转换下增加或减少。它们在显示算法终止时非常有用;例如,如果特定单型单算法是算法的每个步骤下降的正整数,则该算法必须最终终止,因为减少整数不能永远保持积极。据/p>
以更正式的语言,一个据E.m>单变据/em>关于据S.pan class="katex"> 是一个功能据S.pan class="katex">
解决问题的技术据/h2>
作为一般规则,当有几个不同的操作可能时,不变量是有用的,特别是当一个问题询问一个特定的结果是否可能时。特别地,不变量在分析时特别有用据一种href="//www.parkandroid.com/wiki/combinatorial-games-definition/" class="wiki_link" title="组合游戏" target="_blank">组合游戏据/a>,其中的潜在过渡是由合法的移动给出的,并询问的结果是游戏的赢家。据/p>
Alice和Bob有一个大的巧克力,在形状据S.pan class="katex">
在更高级的问题中,不变量的使用不会以这样明显的方式设置。在这种情况下,通常需要以某种方式将问题转化为过渡性问题。许多据一种href="//www.parkandroid.com/wiki/coloring-definition/" class="wiki_link" title="着色" target="_blank">着色据/a>问题属于这一类。例如,问是否可以用多米诺骨牌平铺某个形状的问题可以被认为是过渡问题,其中开始状态是整个形状,过渡集是移除两个相邻的方块,而结束状态是一个空棋盘。据/p>
从标准棋盘上去掉两个相对的角。有可能用多米诺骨牌来铺结果板吗?据/h3>
假设被移除的角落是白色正方形。在每次过渡时,我们都删除了一个白方和一个黑色方块,所以据S.pan class="katex">
许多问题还将以非明显的方式使用单体塑料,通常通过要求证明某些安排是可能的。这些问题通常通过以随机排列开始解决,描述了一种改善每个步骤的情况的算法,并且显示算法借助单型方式终止。据/p>
在锡金尼亚的议会中,每个成员都有据S.trong>最多三个敌人据/strong>.证明房子可以分成两个房子,让每个成员都有据S.trong>最多一个敌人据/strong>在他自己的家里。(恩格尔《问题解决策略》第2页)据/h3>
最初,构件分离成以任何方式在两个房屋。让据S.pan class="katex"> 将所有的敌人在自己的房子总和每个成员都有。现在假设有一个人据S.pan class="katex"> 他在自己家里至少有两个敌人。那他在另一栋房子里最多只有一个敌人,所以如果据S.pan class="katex"> 开关的房子,据S.pan class="katex"> 将减少。自从据S.pan class="katex"> 必然是一个非负整数,它不能永远降低,因此在某些点结束本处理。这意味着我们不能再找到谁在自己的房子,而这恰恰是要求分配有至少两个敌人的人。据S.pan class="katex">
另一个涉及不变量的问题是被要求证明某些东西据S.trong>全部据/strong>可能的输入,例如平面中的点。尝试在这些问题中尝试的常见策略正在挑选随机点,并检查当点移动时的变化。据/p>
正如前两个问题所示,所有数的和(可能是某个常数的模)是一个常见的不变量。更一般地,加权求和通常是有用的,例如据S.pan class="katex">