日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最大矩阵

發(fā)布時間:2024/9/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最大矩阵 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給一個柱狀統(tǒng)計圖,各個小矩形寬度相等,高度不一,每一個矩形是由幾個相鄰柱狀條條組成,矩形的高度為最短的那根條條,求所有組合中最大的矩形面積,假設(shè)柱狀統(tǒng)計圖是放在數(shù)組里的,數(shù)組記錄的是每個條條的高度。


http://zhangzhibiao02005.blog.163.com/blog/static/3736782020118433623459/

在直方圖中,一個長方形由其左邊界和右邊界決定,其最大可能的高度由兩者中的最小者決定。記 R(i,j) 為由第 i 個直方柱為左邊界,第 j 個直方柱確定的面積最大的長方形。如果 R(i,j) 的面積最大,那么,第 i 個直方柱比它的前一個直方柱(如果存在的話),即第 i-1 個直方柱要高,而 第 j 個直方柱的高度也比第 j+1 個的要高,否則,由 R(i,j+1) 或 R(i-1,j) 的面積比 R(i,j) 還要大,這違背了 R(i,j) 的最優(yōu)性。根據(jù)這個觀察,我們從第1個直方柱開始,尋找第一個 i, 使得直方柱 i 的高度比 i+1 的大,則 i 是一個可能的右邊界,而 i 之前的每一根直方柱都是可能是左邊界(因?yàn)?i 是第一個比 i + 1 高的直方柱,所以,在 i 之前的是一個上升的直方柱序列,每一根都比前一根要高)。這時,我們計算前面所有可能的長方形的面積,并跟當(dāng)前已知的最大值進(jìn)行比較,并更新當(dāng)前已知的最大值(如有必要的話)。然后,我們繼續(xù)向前搜索第二個這樣的 i 。重復(fù)這個過程,直到最后一根直方柱。


設(shè)R(i, j)是最大矩陣的左右邊界,那么height[j] > height[j +1], height[i] > height[i-1]

所以一旦遇到高度小于當(dāng)前棧頂元素時,就有可能有最大矩陣,這時候就要從棧中不斷的彈出

int maxRec(int a[], int n) {if (n == 0)return 0;stack<Node> sk;int rst = 0;sk.push(Node(0,a[0]));for(int i = 1; i < n; ++i ) {if(a[i] >= sk.top().height)sk.push(Node(i,a[i]));else {Node last = sk.top();while (!sk.empty() && sk.top().height > a[i]){Node t = sk.top();sk.pop();int rec = (last.index - t.index + 1) * t.height;if (rst < rec)rst = rec;}sk.push(Node(i,a[i]));}}Node last = sk.top();while (!sk.empty()) {Node t = sk.top();sk.pop();int rec = (last.index - t.index + 1) * t.height;if(rst < rec)rst = rec;}return rst; }


對于這一題:

?有一個 m x n 的矩陣,元素為 0 或 1。一個子矩陣,如果它所有的元素都是 0, 或者都是 1,則稱其為一個 0-聚類 或 1-聚類,統(tǒng)稱聚類(Cluster)。請找出最大的聚類(元素最多的聚類)。(問題來源:某面試題)


可以用之前所講的dp做:http://blog.csdn.net/sunmenggmail/article/details/7709004

也可以用直方圖最大矩陣做。

一行一行處理,每一行把0的高度看做是直方圖,然后求出這一行的最大矩陣


總結(jié)

以上是生活随笔為你收集整理的最大矩阵的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。