我想知道分治技术是否总是将问题划分为相同类型的子问题?所谓的相同类型是指可以使用递归函数来实现。分治技术是否总是可以通过递归实现?
谢谢!
谢谢!
"总是"这个词很可怕,但我无法想象一种分治情况下你不能使用递归的场景。按定义,分治会创建与初始问题相同形式的子问题-这些子问题不断被分解,直到达到某个基本情况,并且分割次数与输入大小相关。递归是这类问题的自然选择。
更多有用信息请参见维基百科文章
分治算法的定义是可以通过递归来解决的。因此答案是肯定的。
递归是一种编程方法,其中您通过自身定义函数。该函数通常使用稍微修改的参数调用自身(以便收敛)。
假设P
是一个大小为n
的问题,S
是解决方案。在这种情况下,如果P
足够大,可以将其分成子问题,例如P1
,P2
,P3
,P4
,...,Pk
;假设有k个子问题,每个子问题都有k个解决方案,如S1
,S2
,S3
,...,Sk
;现在,如果我们将每个子问题的解决方案组合在一起,就可以得到S的结果。在分治策略中,无论主要问题是什么,所有子问题都必须相同。例如,如果P
是排序,则P1
,P2
和Pn
也必须进行排序。因此,这是一种具有递归性质的方法。因此,分治法将是递归的。