可以用分治法解決的問題一定包含了諸多的子問題,這些子問題的解題方式及問題形式都與大問題一樣,並且都是可解的。所以我們利用分治法解決問題一定要先找他的最小的子問題,然後解決它,由於分治法的本質其實就是遞迴問題,所以我們最終可以解決原有問題。下面給出乙個陣列,求出其中的最大值和最小值。
#include
using
namespace std;
void
divide_and_conquer
(int a,
int begin,
int end,
int*max_value,
int*min_value)
else
}int mid =
(begin + end)/2
;int min1,min2,max1,max2;
//左側的最大最小值
divide_and_conquer
(a,begin,mid,
&max1,
&min1)
;//右測的最大最小值
divide_and_conquer
(a,mid+
1,end,
&max2,
&min2)
;*max_value = max1 > max2 ? max1 : max2;
*min_value = min1 < min2 ? min1 :min2;
}int
main()
;int m_x =0;
int m_i =0;
divide_and_conquer
(a,0,9
,&m_x,
&m_i)
; cout<<
"最大值為:"
"最小值為:"
}
分治法查詢陣列最大最小值
大致說明下程式流程,呼叫find函式後,將判斷是否為最小子結構,如果不是則將它2分繼續判斷,如果是最小子結構,則把最小子結構的元素與全域性最大最小值做比較.這裡假設資料元素個數為8時,該程式走的流程應該是 0 7分解為0 3 0 3分解為0 1滿足最小子結構做完比較後return 繼續0 3分解的2...
分治法求陣列最大最小值
常規的做法是遍歷一次,分別求出最大值和最小值,但我這裡要說的是分治法 divide and couquer 將陣列分成左右兩部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然後綜合起來求總體的最大值及最小值。這是個遞迴過程,對於劃分後的左右兩部分,同樣重複這個過程,直到劃分區間...
分治法 找最大值與最小值
在20級新生刷題組中我遇到了用分治法求最大值與最小值的演算法題,初看一臉懵,深入 初步的了解中突然發現跟二分法 一次劃分 有著驚人的相似,好吧qaq,其實二分法就是屬於分治法的一種。首先,分治法顧名思義,即為分而治之,把乙個整理的多個資料,分成多塊的少個資料來處理。我們來演示 輸入五個數 9 5 7...