信1101-2
胡弦琴20113026
王兵茹20112917
這周一的時候老師給的課上練習是在上一次的基礎上,將一位陣列改成二維陣列,求二維陣列中子陣列和的最大值。由於課上時間不多了,只是大概想了乙個思路,我們剛開始想的是窮舉法實現,具體的分析也就是下面我們紙上畫的這些。
從一開始將所有的可能都遍歷一遍,然後求出最大值。這種演算法的時間複雜度o(n*n*m*m),這種想法雖然可以實現,但是是一種非常浪費時間的演算法.它在實現的時候需要巢狀四層的for迴圈,所以比較麻煩。在這種理解的基礎上,我們要想到了下面的解決方案。
具體的轉換如下:
這種方法的特殊邊界要考慮,首先求出p[i][j],表示以(0,0)為起點,以(i,j)為終點的的連續子陣列的和,起點是第a行,終點是第c行,然後轉換為一維連續子陣列的和;首先應該找出p[i][j],
//然後就開始找所有子陣列中和的最大值了,初始化為max[0][0];計算p[i][j]
for(i=0;i)
else}}
#include using執行結果如下:namespace
std;
int maxsubarray(int **a,int n,int
m)
else}}
//計算二維陣列最大子陣列的和
inttemp;
int max=a[0][0
];
intans;
//如果m==1
if(m==1
)
else
if(ans
ans=temp;}}
}else
else
for(int k=m-2;k>=0;k--)
else
if(ans
ans=temp;}}
}}return
ans;
}int
main()
}int ans=maxsubarray(a,n,m);
printf(
"二維陣列的最大子陣列之和是:%d\n
",ans);
return0;
}
求乙個二維陣列的最大子矩陣
演算法描述 本題可以使用窮舉法,但是那樣不容易實現以及效率不高,我們的想法是,將二維陣列變成一維陣列,再將此 一維陣列 按照上次的做法既可求出最大子陣列,怎麼樣將二維變成一維呢 例如我們做的是四行四列的陣列,將每一行用乙個sum來表示,則有sum 1 sum 2 sum 3 sum 4 sum 1 ...
二維陣列求最大子陣列
程式要使用的陣列放在乙個叫 input.txt 的檔案中,檔案格式是 陣列的行數,陣列的列數,每一行的元素,用逗號分開 每乙個數字都是有符號32位整數,當然,行數和列數都是正整數。演算法思想 對於一維的陣列,我們可以很容易用動態規劃的方法求得最大子陣列 所以我們將i 0.n j i.n 列舉所有行的...
求二維陣列中最大子陣列的和
題目 給出乙個 m n 的二維矩陣 元素可為正可為負 求該二維矩陣的乙個子矩陣,且此子矩陣中所有元素的和最大,並輸出該矩陣的和。分析 因為輸出的是矩陣,把每列資料中第i行到第j行進行相加,這樣得到乙個列矩陣,a 1.n 這樣就轉化成乙個一維整數陣列中最大子陣列的和,通過求得迴圈不同第i行到第j行之間...