《演算法導論》學習筆記之最大子陣列問題

2021-07-31 01:53:34 字數 1196 閱讀 4773

求解陣列的最大子陣列

最大子陣列定義:

陣列的和最大的非空連續子陣列

測試陣列:$arr = array(13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7);

最大子陣列 $arr1 = array(18,20,-7,12); //和為43

*/

方法一:暴力求解法

/*

方法一:暴力求解法

沒什麼新鮮的,兩層for迴圈窮舉法*/

function maxsonarr($arr)

} }$sonarr = array($max,$left,$right);

return $sonarr;

} // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

$arr = array(13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7);

print_r( maxsonarr($arr));

將陣列劃分為兩個盡量相等的子陣列,下標直接取中間值即可。

此時,該子陣列所處的位置有以下三種可能

一、完全位於0-mid子陣列中

二、完全位於mid-count(arr)子陣列中

三、跨越中間點 low ,**就不寫了

function maxsubarr($arr)

} }//右邊最大值

for($m=$mid;$m<$num;$m++)

} }//包含中間的左邊最大值

for($m=$mid-1;$m>=0;$m--)

} //包含中間的右邊最大值

for($m=$mid;$m<=$num;$m++)

} $midmaxsum = $leftmidmaxsum+$rightmidmaxsum;

$maxsubsum = $rightmaxsum;

if($leftmaxsum>$maxsubsum)

if($midmaxsum>$maxsubsum)

return $maxsubsum;

}//var_dump(maxsubarr($arr));

演算法導論 最大子陣列

之前都在準備考試,寒假還是繼續學習。除了家裡打掃衛生,似乎也確實沒什麼事。多看書,多寫 總能提高的。堅持。這次學到了函式返回值可以是乙個結構體,當我們要返回多個值的時候,就可以返回結構體。還有就是對分治法有了更深的認識。include typedef struct op op findmaxcros...

演算法導論2 最大子陣列

最大子陣列問題 假設陣列a low.high 求存在於陣列a中的連續子陣列之和 或陣列中連續元素之和 最大的子陣列,例如a 4 的最大子陣列為a 0 2 和最大為3 2 1 2。如果採用暴力求解的演算法則問題也可以很簡單的求解出來,不過這種方法的時間複雜度為 n 所以寫一下更好的方法。使用分治策略的...

演算法導論 尋找最大子陣列

求最大子陣列 include using namespace std struct result structure result structure mid array sum int a,int low,int mid,int high sum 0 result.high index mid 1...