解决涉及min的非标准递归关系?

时间:2012-11-12 14:11:49

标签: math big-o complexity-theory recurrence

鉴于以下递归关系:

  

T(n)= T(n-x)+ T(x)+ O(min({x,n-x}))

     

T(1)= 1

其中x可以按任意比例划分我们的问题(它可能因呼叫而异 - 不是n的常数函数),是否有可能得到比O更好的约束(n 2 )在一般情况下?

(我问这是因为我研究了一种具有复杂性的算法,这是这种递归关系的私有情况,我不得不使用一些关于算法的额外事实来证明O(n log n)的复杂性。但是,我认为它可能是一个普通的数学问题,可以在我在这里介绍的更一般的情况下解决)

1 个答案:

答案 0 :(得分:0)

链接的问题提供了解决此问题的一种方法,但是在最坏的情况下,还有另一种方法可以更直接地为您提供O(n log n)解决方案。

你可以将你的递归关系看作是一个将大小为n的数组切成小块的过程。在每一步中,您将两个中较小的一块涂成不同的颜色。当所有数组元素被切割成各自独立的部分时停止,然后询问绘制数组元素的总次数。为了理解为什么这反映了你的过程,你在每一层做的工作都是基于较小部分的大小,所以你可以把绘制较小部分的工作想象成最小术语的贡献。最终,一切都达到了最低限度。

我们可以将任何单个元素的绘制次数上限为lg n。要看到这一点,请注意,无论何时绘制一块,它都不能超过您开始使用的数组的一半。因此,如果第一次绘制某个部分,它必须是大小最多为n / 2的数组。如果它第二次被绘制,那么它所在的数组的大小必须至多为n / 4,以及更多通常,如果它被绘制了k次,那么它所在的阵列的大小最多为n / 2 i 。选择i = lg n使这个尺寸为1,所以每件最多涂抹lg n次。由于总数为n个,因此一件作品的总次数最多为n lg n。因此,您的递归求解为O(n log n)。

在每次将阵列完美地切成两半的情况下,您可以证明此边界很紧。第一次切割是n / 2工作,接下来的两次做n / 4工作,接下来的四次做n / 8工作,等等。对所有切割进行求和得到Θ(n log n)总工作量。

希望这有帮助!