我正在尝试学习Divide和征服策略的概念。如何使用分而治之的方法编写一个伪代码来确定给定数组中的所有元素是否相等。我想从一个初始调用allEqual(a,0,a.length-1)开始。
答案 0 :(得分:1)
你可以这样做:
start=0, end = a.length-1, middle= (start+end)/2
allEqual(a, start, middle)
allEqual(a, middle+1, end)
Base case
答案 1 :(得分:0)
我觉得最好考虑分裂和征服这样:
对于非常小的问题(1或2个元素),我如何在纸上解决问题?
明显的问题是:如果你有一个元素,则返回该元素。
我把我的大问题分成了两半。我解决了两半(我现在并不关心如何)。这有助于我解决原来的问题吗?
两个解决方案都将返回一个元素。检查两个返回的元素是否相等:如果是,则整个数组包含相同的值。否则,它没有。
我是否过度简化了某些事情,我如何在实践中照顾它?
我们返回具有一个元素的子阵列在该位置的值,但是如果求解两个子问题的结果不同,我们会返回什么?
在这种情况下,你可以返回一个不属于你输入的值(也许是-1?),或者设置一个全局标志来告诉你是否发生了这种情况,在这种情况下,最终答案将是{ {1}}无论其他递归调用发生什么。