C 分治法求最大最小值

2021-10-04 21:28:12 字數 951 閱讀 7002

可以用分治法解決的問題一定包含了諸多的子問題,這些子問題的解題方式及問題形式都與大問題一樣,並且都是可解的。所以我們利用分治法解決問題一定要先找他的最小的子問題,然後解決它,由於分治法的本質其實就是遞迴問題,所以我們最終可以解決原有問題。下面給出乙個陣列,求出其中的最大值和最小值。

#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...