重复关系
一种
- 数字理论 -<一种href="//www.parkandroid.com/wiki/fibonacci-series/" class="wiki_link" title="斐波纳契序列" target="_blank">斐波纳契序列
- 组合- - -<一种href="//www.parkandroid.com/wiki/distinct-objects-into-identical-bins/" class="wiki_link" title="将对象分配到容器中" target="_blank">将对象分配到容器中
- 微积分 -<一种href="//www.parkandroid.com/wiki/eulers-method/" class="wiki_link" title="欧拉的方法" target="_blank">欧拉的方法
- 还有很多.
当解决问题解决的详尽方法时,使用重复关系太大而无法实际艰巨。虽然一次通过使用先前的术语在序列中计算术语并不理想的是,但这种方法可以比穷举案例的替代方案更有效。
有时,递归关系可以通过用序列的下标而不是之前的项来定义序列的项来“解决”。这给了一个<一种href="//www.parkandroid.com/wiki/closed-form-expressions/" class="wiki_link" title="闭合形式表达式" target="_blank">闭合形式表达式对于序列中的每个术语,并消除了对序列中术语解决的迭代过程的需要。有几种方法可以实现这一目标:
即使不可能解决这种形式的解决方案,还可以使用复发关系,因为它可用于开发计算机<一种href="//www.parkandroid.com/wiki/algorithm/" class="wiki_link" title="算法" target="_blank">算法.当序列中的项被存储时,<一种href="//www.parkandroid.com/wiki/problem-solving-dynamic-programming/" class="wiki_link" title="动态编程" target="_blank">动态编程允许一个人有效地计算序列中的新术语。再次关系也适用<一种href="//www.parkandroid.com/wiki/recursive-backtracking/" class="wiki_link" title="递归回溯" target="_blank">递归回溯,其中递归被用来优化算法。
建立递归关系
基于问题的简单版本,使用重复关系将复杂问题降低到迭代过程。可以使用这种方法的示例问题是
这
河内塔拼图由三个垂直钉和几个各种尺寸的磁盘组成。每个磁盘都有一个洞,让钉子过度。
拼图的规则如下:
拼图以一个挂钩放置在其中一个挂钩上的所有磁盘开始。它们是最大的最小,底部到顶部的顺序。
拼图的目标是将所有磁盘移动到另一个佩格上。
一次只能移动一个磁盘,磁盘总是放置在钉子上。
磁盘可以仅移动到空挂钩或更大的磁盘上。
让
被定义为解决难题所需的最小移动数量 磁盘。
图像信用:ævararnfjörəbjarmason,<一种target="_blank" rel="nofollow" href="https://commons.wikimedia.org/wiki/File:Tower_of_Hanoi.jpeg">Wikimedia Commons.
它没有立即清楚递归解决方案将为此问题工作。然而,有几个关于这个问题的事情,使其成为一种良好的候选人,以便通过复发关系解决。
识别以重新发生关系解决的候选问题:
- 问题可以减少到更简单的情况。通过删除一些磁盘,可以简化河内拼图的塔。
- 有一个数值,
,识别每种情况。对于河内拍摄塔,这种数值是磁盘的数量。 - 随着数值标识符的增加,问题的复杂性增加了。随着河内问题塔中的磁盘数量增加,找到解决方案变得更加困难。
本练习的目标将是发展复发关系
第1步:定义基本情况
河内拼图塔的最简单版本只包含一个磁盘。
就复发关系而言,
. ,因为它只需要
Move的意思是把所有的磁盘移到另一个钉子上。
基本情况通常很简单。但是,有必要发展更复杂的案例。尽管本练习的目标是提出等式
第2步:开发更复杂的案件
以下是河内塔塔的解决方案
.
从上面可以看到
. 下面是一个解决河内塔的解决方案
.
从上面可以看到
. 您可以根据需要继续开发更复杂的案例。这个过程的目标是了解问题的工作原理,并开始思考如何设置复发关系。
虽然在上面的例子中分析了两个案例,但有时可能需要开发更多的案例,以便更好地理解问题。通过上面的两个案例,人们可能会开始看到这些案例是如何相互关联的。
第三步:写出递归关系
想想案件如何彼此相关。
和
,移动磁盘一次是一个简单的事情,然后拼图完成。 和
,必须在移动较大的磁盘之前移动较小的磁盘。然后,将较小的磁盘放置在较大的磁盘上以完成拼图。 和
,较小的磁盘必须在最大磁盘移动之前移动。然后,将较小的磁盘放置在较大的磁盘上以完成拼图。 可以开始看到这些解决方案的结构中的模式。移动较小的磁盘,然后移动最大的磁盘,然后将较小的磁盘移动回最大的磁盘以完成拼图。
按照
那
做
移动以使较小的磁盘关闭最大的磁盘。 做
移动以移动最大的磁盘。 做
移动使较小的磁盘回到最大的磁盘。 总的来说,移动的次数
磁盘
可以通过将其与已知值匹配来确认上面写入的复发关系
河内塔塔的再次发生关系是一个例子<一种href="//www.parkandroid.com/wiki/linear-recurrence-relations/" class="wiki_link" title="线性再现关系" target="_blank">线性再现关系.可以使用给定链接中讨论的技术将其放入一个封闭形式的解决方案中。
复发关系的应用
使用生成功能来解决复发关系
主要文章:<一种href="//www.parkandroid.com/wiki/generating-functions-solving-recurrence-relations/" class="wiki_link" title="使用生成功能来解决复发关系" target="_blank">使用生成功能来解决复发关系
解决重复关系的一种方法是使用生成功能。
一种
斐波那契数列的生成函数是什么?
Fibonacci序列的生成功能是
在哪里
是 斐波那契数。使用这里演示的技术,可以证明这个生成函数有一个封闭形式的表达式
使用生成功能
编写封闭的表达式表达式 .
回想起重复关系
:
已经确定的是
,但值得的价值 也需要。让 ,并注意递归关系仍然成立。 定义生成功能:
回顾
.划分方程的两侧 , 这使
现在替代复发关系
方程:
提供了
,以上系列融合为<一种href="//www.parkandroid.com/wiki/geometric-progressions/" class="wiki_link" title="无限几何进展" target="_blank">无限几何进展:
替换此表达式给出
解决
那
既然已经找到了生成函数的封闭式表达式,目标转移以找到闭合表单表达式
. 由于生成函数等于一个有理表达式,分母上有二项式因子,一个好的出发点是这样做<一种href="//www.parkandroid.com/wiki/partial-fractions-linear-factors/" class="wiki_link" title="部分分数分解" target="_blank">部分分数分解:
召回无限几何进步。对于下一步,使用该标识将两个Rational表达式恢复为Power系列形式:
替代这些身份给出
从这里开始,显然是发电功能的系数
该系列 是(谁)给的
求和因素的方法
主要文章:<一种href="//www.parkandroid.com/wiki/recurrence-relations-method-of-summation-factors/" class="wiki_link" title="求和因素的方法" target="_blank">求和因素的方法
还有另一种解决形式复发关系的方法
这种方法可以用于河内塔问题,下面的例子中再解决一次。
表明复发关系的封闭形式
那 是 .
求和的因素
和 和 是
1和2出现在哪里
每个人。将其乘以复发关系给出
让
.然后 和 .所以,
它遵循封闭的形式
是
请注意,上面的求和是有限几何系列。但由于
,封闭的形式 因此