回答
分而治之是一種算法技術,它通過將問題分解爲更小的部分,解決每個部分中的問題,並將結果組合在一起形成全面答案來解決問題。當問題變得十分簡單時,可以直接解決。
在這種情況下,請考慮如果將數組分成兩半會發生什麼情況。如果你知道每一半的最小值,你能找出整體的最小值嗎?當數組中只剩下一個元素時,數組中的最小值是多少?如果你回答這個問題,你可以直接想出一個遞歸的分而治之的算法來解決這個問題。
希望這會有所幫助!
我知道劃分的含義和征服...但確實線陣列一些有序類型的元件的[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