演算法核心:
先將二維陣列處理為一維陣列,再對一維陣列進行最大連續子串行求和,這裡最大連續子串行求和採用的是遞推的方法。
演算法步驟:
(1)將原矩陣初始化,並建立乙個臨時二維矩陣,該矩陣的第i行表示的是原矩陣前i行的和;
(2)採用窮舉的方法,計算二維矩陣所有可能的連續行的列的和,使其壓縮為一維陣列;
(3)對步驟(2)中得到的每乙個陣列進行最大子串行求和,同時,不斷更新最大值。
例項以及**
問題描述:給定乙個矩陣,找到最大的子矩陣。
//定義資料,a是原矩陣,t是臨時矩陣,用於儲存行的和
int a[10]
[10]=
,t[10][
10]=;
int t1,t2;
//一維陣列的最大子列和的範圍
int l1,l2,h1,h2;
//最大子矩陣的範圍
//初始化矩陣
intinput()
//計算乙個臨時的矩陣和矩陣
void
temporary
(int n)
//對一維陣列進行最大子列求和
intonesequence
(int a,
int n)
if(sum<0)
else
e++;}
//printf("%d----%d max=%d",t1,t2,max);
return max;
}
//處理二維矩陣的行,壓縮為一維陣列
inttwosequence
(int n)
else
m=onesequence
(temp,n)
;//處理一維陣列
if(m>max)
}return max;
}
//格式化輸出
void
output
(int max)
printf
("最大子矩陣和為:%d"
,max)
;//輸出 最大和
}
//主函式,負責呼叫以上函式
intmain()
執行結果: 最大子陣列問題及C語言實現
對於乙個連續的陣列a n 要求連續子陣列,使得該子陣列的和最大。比如陣列,最大子陣列為,和為32。方法一 窮舉法。即將任取陣列中的兩個元素,算出兩者之間 包括這兩個元素本身 所有元素之和。窮舉所有組合,比較得到最大值。該方法複雜度為n的三次方。include include int sort int...
最大子列和問題(C語言實現)
最大子列和問題 pta 程式設計類實驗輔助教學平台 給定k 個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情...
演算法導論筆記 最大子陣列C語言實現
在分治策略中我們將遞迴的求解乙個問題,在每層遞迴中有如下三個步驟。分解將問題劃分為一些子問題,子問題形式與原問題一樣,只是規模更小。解決遞迴的求解出子問題。如果子問題規模足夠小,則停止遞迴,直接求 解。合併將子問題的解合併為原問題的解。需要遞迴求解時,我們稱之為遞迴情況,當子問題足夠小時,不需要遞迴...