回答
分而治之是一种算法技术,它通过将问题分解为更小的部分,解决每个部分中的问题,并将结果组合在一起形成全面答案来解决问题。当问题变得十分简单时,可以直接解决。
在这种情况下,请考虑如果将数组分成两半会发生什么情况。如果你知道每一半的最小值,你能找出整体的最小值吗?当数组中只剩下一个元素时,数组中的最小值是多少?如果你回答这个问题,你可以直接想出一个递归的分而治之的算法来解决这个问题。
希望这会有所帮助!
我知道划分的含义和征服...但确实线阵列一些有序类型的元件的[1..N](即,x
@ user1253637-啊,对不起!我误解了你的问题。是的,这意味着它是一个未排序的元素数组。你不知道这些元素是(字符串,整数,小部件等),但任何两个元素是相当的,所以是有意义的发现最小。你可能想澄清你的问题,因为看起来每个人都在误解你所问的内容。 :-) – templatetypedef 2012-04-20 20:07:35
这意味着未排序的名单,但像x <操作Y定义,这样你就可以比较两个元素。 – Nicholas 2012-04-20 20:07:51
如果数组的内容是随机的,这意味着你有,直到你找到你要找的人来搜索每一个元素。数组越长,搜索时间越长。这被称为“linear search”。
如果数组的内容已经以某种顺序排列,则可以利用此顺序优化搜索(并缩短搜索时间)。例如,电话簿中的姓名按字母顺序排序。您可以在中间打开电话簿:如果您要查找的名称“低于”中间的名称,则继续在本书左侧进行搜索。如果它更高,然后搜索右半部分。这被称为“binary search”,或“分而治之”。
可以量化给定搜索算法的效率或低效率。这就是所谓的“Asymptotic”,或“Big O-Notation”:
Class Search algorithm ----- ---------------- Data structure Array Worst case performance O(log n) Best case performance O(1) Average case performance O(log n) Worst case space complexity O(1)
分而治之的策略以解决问题:
它闯入本身是较小的情况下,子问题同类型 问题的
递归解决这些子问题
个
适当地组合自己的答案
一个很好的例子是合并排序!
为这个问题建议合并排序很奇怪。寻找最小的元素是O(n)线性扫描;合并排序是O(n log n)。 – 2012-04-20 20:12:11
@TedHopp是的,但合并排序是否分而治之 – Kevin 2012-04-21 01:40:22
通常,“分而治之”是指划分的问题成更小的(通常更简单)的问题,分别解决每一个,然后以某种方式结合的解决方案。
在您的具体示例中,您应该以某种方式将数组分成较小的数组(例如,,将它除以一半),找出每个较小阵列中的最小值,然后选择这些子问题的最小解决方案作为整体问题的解决方案。每个子问题都可以使用相同的分而治之的方法来解决,限制的情况是一个足够小的数组(例如1或2),您可以直接解决问题。
U可以与下面的算法去。在链路
getSmallest(int a[])
{
int n=a.length;
if(n==1)
return a[0];
else
{
x=remove first element from a;
create another array b with a size smaller by 1 than array a
if(x<getSmallest(b))
return x;
else
return the smallest returned by the recursive call
}
}
- 1. 查找最大使用除法和征服法的算法
- 2. 划分和征服算法数值
- 3. Dijkstra算法多边找到最小值
- 4. 找到一组数组中最高总和的算法
- 5. 算法 - 找到两个数组的总和之间的最小减法
- 6. 算法:对于数组中的每个元素,找出在其左侧的最大价值和小于本身
- 7. 划分并征服算法来查找数组的最大元素
- 8. 征服CSS,算法
- 9. 如何查找数据的算法平均值(最大值和最小值)
- 10. 在排序数组中找到小于x的最大值
- 11. 算法在递增,递减,递增和递减数组中查找最大值和最小值
- 12. 用数组找到和,最小值,最大值
- 13. 查找第二个最小值 - 算法
- 14. 在二维数组中寻找最大值的快速算法
- 15. 查找数组中最小值和最大值的更快方法
- 16. 递归算法来寻找数组中的最小元素
- 17. 如何找到一个数组的最大值和最小值
- 18. 从函数中寻找最小值的启发式算法
- 19. 找到与最小特征值对应的特征向量
- 20. 找到添加算法/在数组中删除的元素
- 21. 找到最佳组合的算法
- 22. 从包含对象的数组中找到最小值的最佳方法
- 23. 算法是否存在以找到二维数组中非相交值的最小总和?
- 24. 最小分组算法
- 25. 查找数组中的最小值和第二小值Java
- 26. 迭代划分和征服算法
- 27. 在数组中找到总和的算法?
- 28. Python:我如何在子数组元素中找到最小值和最大值?
- 29. 查找数据集中最常见的数值组合的最佳算法
- 30. 如何在数组中找到最大和最小数字c
这意味着你应该实现一个“分而治之”的算法(可能是递归的) - 一个将问题分解成越来越小的部分,直到找到解决方案([参考](http: //en.wikipedia.org/wiki/Divide_and_conquer_algorithm))。数组定义'a [1..n]'只是说有一个数组中有* n *个元素可排序。 – 2012-04-20 20:03:34