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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

杨氏矩阵以及扩展

發(fā)布時(shí)間:2024/9/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杨氏矩阵以及扩展 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://my.oschina.net/zangzy/blog/69103

楊氏矩陣問(wèn)題


問(wèn)題描述

如果一個(gè)矩陣每一行每一列都嚴(yán)格單調(diào)遞增,我們稱該矩陣為楊氏矩陣(Young Tableau)。對(duì)于楊氏矩陣(a[m][ n]),通常會(huì)涉及兩個(gè)問(wèn)題:(1) 怎樣在楊氏矩陣中查找某個(gè)元素X?(2) 怎樣在楊氏矩陣找第k大的數(shù)?

解決方案

楊氏矩陣是一種非常巧妙的數(shù)據(jù)結(jié)構(gòu),它既可以用來(lái)當(dāng)堆,又可以用來(lái)當(dāng)做平衡樹(shù)。?
(1) 問(wèn)題1求解?
【方案一】?
<二分查找>?
對(duì)于楊氏矩陣,由于每行每列均是有序的,則可以于矩陣采用二分查找。具體方法是:?
對(duì)于當(dāng)前子矩陣a[i][j]~a[s][t],中間元素為a[(i+s)/2][(j+t)/2],如果a[(i+s)/2][(j+t) /2]==x,則找出該元素;如果a[(i+s)/2][(j+t)/2] > x,則在子矩陣a[i][j]~a[(i+s)/2][(j+t)/2]中查找;如果a[(i+s)/2][(j+t)/2] < x,則在三個(gè)子矩陣:a[i][(j+t)/2]~ a[(i+s)/2][t],a[(i+s)/2][(j+t)/2]~ a[s][t]和a[(i+s)/2][j]~ a[s][ (j+t)/2]中查找。該算法的遞歸式為f(mn)=3f(mn/4)+O(1),根據(jù)主定理知,時(shí)間復(fù)雜度為:O((mn)^(log4(3)))。?
【方案二】?
<類堆查找法>?
楊氏矩陣具有明顯的堆特征:從矩陣的右上角出發(fā)(從左下角出發(fā)思路類似),對(duì)于元素a[i][j],如果a[i][j]==x,則找到元素x,直接返回; 如果a[i][j] > x,則向下移動(dòng),即繼續(xù)比較a[i+1][j]與x;如果a[i][j] < x,則向左移動(dòng),即繼續(xù)比較a[i][j-1]與x。該算法的時(shí)間復(fù)雜度是O(m+n),代碼如下: bool find_in_YoungTableau(int** a, int m, int n, int x) {assert(a != NULL && m > 0 && n > 0);int row, col;row = 0;col = n-1;while(row <= m-1 && col >= 0) {if(a[row][col] == x)return true;else if(a[row][col] > x)col--;elserow++;}return false; } (2) 問(wèn)題2求解?
【方案一】?
<小頂堆法>?
首先將a[0][0]加入小頂堆,然后每次從小頂堆中取出最小元素,并加入比該元素大且與之相鄰的兩個(gè)元素(對(duì)于a[0][0],則需要加入a[0] [1]和a[1][0]),直到取出第k個(gè)元素,需要注意的是,需要采用額外空間記錄某個(gè)元素是否已經(jīng)加入到小頂堆以防止重復(fù)加入。?
【方案二】?
<二分枚舉+類堆查找>?
首先,二分枚舉找到一個(gè)數(shù)x,它比楊氏矩陣中k個(gè)數(shù)大;然后,利用類堆查找法找到剛好小于x的元素。該算法的時(shí)間復(fù)雜度為O((m+n)lg(mn)),但不需要額外存儲(chǔ)空間。代碼如下: int find_kth_in_YoungTableau(int** a, int m, int n, int k) {int low = a[0][0];int high = a[m-1][n-1];int order = 0;int mid = 0;do {mid = (low + high) >> 1;order = get_order(a, m, n, mid);if(order == k)break;else if(order > k)high = mid - 1;elselow = mid + 1;} while(1); //二分枚舉整,找出正好大于k的一個(gè)整數(shù) mid int row = 0;int col = n - 1;int ret = mid;//這個(gè)地方有些問(wèn)題while(row <= m-1 && col >= 0) { //找出比mid小的最大數(shù)if(a[row][col] < mid) {//并且應(yīng)該考慮到矩陣中可能會(huì)存在巧好等于mid的數(shù),然后就直接返回就好了ret = (a[row][col] > ret) ? a[row][col] : ret;row++;} else {col--;}}return ret; }//整數(shù)k在矩陣中的排名 int get_order(int** a, int m, int n, int k) {int row, col, order;row = 0;col = n-1;order = 0;while(row <= m-1 && col >= 0) {if(a[row][col] < k) {order += col + 1;row++;} else {col--;}}return order; }

總結(jié)

以上是生活随笔為你收集整理的杨氏矩阵以及扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 136福利视频导航 | 成人免费看黄 | 精品成人国产 | 日韩免费av一区二区 | 性一交一乱一区二区洋洋av | 国产影视一区二区 | 91小视频在线 | 操到喷水| 欧美福利网址 | 亚洲国产片 | 国产精品久久久一区二区 | 免费手机av| 羞羞色院91蜜桃 | 五月天六月色 | 女人裸体无遮挡 | 亚洲自拍偷拍色图 | 亚洲三级在线免费观看 | 色哟哟一区二区三区 | 日本中文字幕成人 | 黄网站色视频免费观看 | 欧美日韩视频网站 | 椎名由奈av一区二区三区 | 久久天天综合 | 魔女鞋交玉足榨精调教 | 久久久午夜电影 | 人妻无码一区二区三区久久99 | 久久影 | 国产精品无码久久久久久电影 | 91成人国产 | 欧美美女啪啪 | 欧美性受xxxx黒人xyx性爽 | 国产1区2区 | 国产99久久精品 | 最新在线视频 | 成人av免费在线 | 视色网| 青草久久网 | 国产精品色网 | 在线成人国产 | 超碰免费观看 | 欧美性猛交xxx乱久交 | 国产色无码精品视频 | 奇米影视999 | 丝袜福利视频 | 四虎影视在线播放 | 久久av网址 | 小色哥网站 | 欧美久久久久久久久久久久 | 久久久久看片 | 我要色综合网 | 久久国产精品波多野结衣av | 中文字幕一区二区三区乱码 | free性满足hd国产精品久 | 国产女大学生av | xiuxiuavnet| 欧美国产另类 | 国产欧美一区二区精品性色99 | 日韩人妻无码精品综合区 | 成人免费直播 | 国产一区二区三区在线 | 久久精品视频播放 | 中文资源在线播放 | 2020av视频 | 亚洲色图视频在线 | 国产一区二区视频播放 | 亚洲精品久久久久久久蜜桃 | 国产精品欧美一区二区三区 | 中文字幕av免费在线观看 | 四房婷婷 | 免费一级淫片 | 成人久久精品 | аⅴ资源中文在线天堂 | 一级黄色大片免费 | 91国内精品野花午夜精品 | 欧美在线免费播放 | 亚洲精品在线观看av | 日韩精品中文字 | 超碰免费公开在线 | 亚洲av无码一区二区乱子仑 | 欧美噜噜噜 | 免费成人高清 | 中文字幕日韩亚洲 | 黄色片怎么看 | 性色AV无码久久一区二区三 | 日本美女操 | 潮喷失禁大喷水无码 | 激情福利网 | 俄罗斯乱妇 | 香蕉网在线视频 | 高h喷汁呻吟3p | 国产精品边吃奶边做爽 | 一区二区三区美女 | 无套爆插 | 久久黄色视| 成人影片网址 | 天天舔天天射天天干 | 婷婷深爱| 国产精品久久久亚洲 | 国产精品久久久久久久无码 |