我必須在C++中實現一個max
函數的分而治之算法,該函數返回數組中的最大值。我理解算法並已經設計了這個函數,但是我遇到了數組索引問題。查找「分而治之」算法的數組索引?
僞代碼,這裏是我的功能:
def max(array, startIndex, endIndex)
// if there is only one element, return it
if startIdx = endIdx
return array[startIdx];
leftHigh = max(array, startIdx, endIdx/2);
rightHigh = max(array, endIdx/2 + 1, endIdx);
return maximum of leftHigh and rightHigh;
不過,我在使用這些值的遞歸調用參數的問題。以下段落展示了當我通過算法思考時發現的內容:
最簡單的情況是由4個元素組成的數組。第一次撥打電話max
將使用索引參數0, 3
,並使用參數0, 1
和2, 3
撥打電話。第一次遞歸調用將導致0, 0
和1, 1
的呼叫將正確終止。但是,第二次遞歸調用將導致調用2, 1
和2, 3
。第一個最終會導致超出數組邊界,第二個結果會導致無限循環,因爲這些參數已經被使用。
我已經嘗試搞砸它,例如使用(startIdx, endIdx/2 -1)
爲第一界限和(endIdx/2, endIdx)
爲第二界限,這固定遞歸調用的第二個分支,但弄亂了第一個。
有沒有辦法找到這些指數導致正確的行爲?我很感激幫助。
A和B之間的中點不是B/2。不知怎的,它必須依靠A. – 2015-03-03 04:53:43