weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
          數(shù)據(jù)加載中……

          問個昨天的MSN面試題

          [回復(fù)本文] 發(fā)信人: pyrope(pyrope), 信區(qū): Algorithm
          標(biāo)  題: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月07日16:57:43 星期一)
          
          有一個N*N的矩陣, 里面有N*N個數(shù),這個矩陣的每一行,每一列都是排序好的,下面是一
          個例子
          1   3  7   9
          2   5  13  14
          6   7  25  26
          20  24 30  40
          現(xiàn)在設(shè)計一個算法,在這個矩陣中search一個數(shù),要求盡可能快
          我覺的會有l(wèi)gN的算法,但是想不出來:(
          
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.35.215]
          

          [回復(fù)本文] 發(fā)信人: keee(keee), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月07日19:27:50 星期一)
          
          二分不就行了
          【 在 pyrope 的大作中提到: 】
          : 有一個N*N的矩陣, 里面有N*N個數(shù),這個矩陣的每一行,每一列都是排序好的,下?.
          : 個例子
          : 1   3  7   9
          : 2   5  13  14
          : 6   7  25  26
          : 20  24 30  40
          : 現(xiàn)在設(shè)計一個算法,在這個矩陣中search一個數(shù),要求盡可能快
          : 我覺的會有l(wèi)gN的算法,但是想不出來:(
          
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.46.141]
          

          [回復(fù)本文] 發(fā)信人: pyrope(pyrope), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月07日20:14:35 星期一)
          
          不懂怎么二分。。。能具體點(diǎn)么?
          【 在 keee 的大作中提到: 】
          : 二分不就行了
          : 【 在 pyrope 的大作中提到: 】
          : : 有一個N*N的矩陣, 里面有N*N個數(shù),這個矩陣的每一行,每一列都是排序好的,?.
          : : 個例子
          : : 1   3  7   9
          : : 2   5  13  14
          : : 6   7  25  26
          : : 20  24 30  40
          : : 現(xiàn)在設(shè)計一個算法,在這個矩陣中search一個數(shù),要求盡可能快
          : : 我覺的會有l(wèi)gN的算法,但是想不出來:(
          
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.35.215]
          

          [回復(fù)本文] 發(fā)信人: keee(keee), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月07日22:01:30 星期一)
          
          設(shè)矩陣從(a,b)到(c,d)
          取矩陣中間位置的點(diǎn)(x,y)與要找的數(shù)k做比較,分三種情況:相等即找到;比k小就到(a,
          b)到(x,y)中找;比k大就到((x+1, b)-(c, y)), ((a, y+1)-(x, d)), ((x+1, y+1)-(c,d
          ))三塊矩陣中找。
          隨便想的,歡迎拍磚
          【 在 pyrope 的大作中提到: 】
          : 不懂怎么二分。。。能具體點(diǎn)么?
          : 【 在 keee 的大作中提到: 】
          : : 二分不就行了
          
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.46.141]
          

          [回復(fù)本文] 發(fā)信人: pyrope(pyrope), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日10:04:03 星期二)
          
          1   3  7   9
          2   5  13  14
          6   7  25  26
          20  24 30  40
          比k小就到(a,: b)到(x,y)中找;
          這個就不對,比如我找24,然后先選到25,但是24 < 25,卻不在你說的那個矩陣?yán)?
          【 在 keee 的大作中提到: 】
          : 設(shè)矩陣從(a,b)到(c,d)
          : 取矩陣中間位置的點(diǎn)(x,y)與要找的數(shù)k做比較,分三種情況:相等即找到;比k小就?.
          : b)到(x,y)中找;比k大就到((x+1, b)-(c, y)), ((a, y+1)-(x, d)), ((x+1, y+1)-..
          : ))三塊矩陣中找。
          : 隨便想的,歡迎拍磚
          : 【 在 pyrope 的大作中提到: 】
          : : 不懂怎么二分。。。能具體點(diǎn)么?
          
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.35.215]
          

          [回復(fù)本文] 發(fā)信人: SYSADMIN(此人已死,有事燒紙--掛站中), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日10:05:52 星期二), 轉(zhuǎn)信
          
          2分法,
          
          【 在 pyrope (pyrope) 的大作中提到: 】
          : 有一個N*N的矩陣, 里面有N*N個數(shù),這個矩陣的每一行,每一列都是排序好的,下面是一
          : 個例子
          : 1   3  7   9
          : 2   5  13  14
          : 6   7  25  26
          : 20  24 30  40
          : 現(xiàn)在設(shè)計一個算法,在這個矩陣中search一個數(shù),要求盡可能快
          : 我覺的會有l(wèi)gN的算法,但是想不出來:(
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 202.120.61.133]
          

          [回復(fù)本文] 發(fā)信人: keee(keee), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日12:37:40 星期二), 轉(zhuǎn)信
          
          疏忽了。。。。
          那就再多找兩個矩陣好了,無所謂的
          反正每次都能去掉1/4的元素,階是log(n*n)的
          
          【 在 pyrope (pyrope) 的大作中提到: 】
          : 1   3  7   9
          : 2   5  13  14
          : 6   7  25  26
          : 20  24 30  40
          : 比k小就到(a,: b)到(x,y)中找;
          : 這個就不對,比如我找24,然后先選到25,但是24 < 25,卻不在你說的那個矩陣?yán)?
          : 【 在 keee 的大作中提到: 】
          : : 設(shè)矩陣從(a,b)到(c,d)
          : : 取矩陣中間位置的點(diǎn)(x,y)與要找的數(shù)k做比較,分三種情況:相等即找到;比k小就?.
          : : b)到(x,y)中找;比k大就到((x+1, b)-(c, y)), ((a, y+1)-(x, d)), ((x+1, y+1)-..
          : .................(以下省略)
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.46.141]
          

          [回復(fù)本文] 發(fā)信人: Comars(New season comes), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日12:44:25 星期二), 轉(zhuǎn)信
          
          按照
          T(n) = 3T(n/2) 計算,階是 O(n^(log3)) 大概是 O(n^1.58)
          不是 log(n*n)
          
          【 在 keee (keee) 的大作中提到: 】
          : 疏忽了。。。。
          : 那就再多找兩個矩陣好了,無所謂的
          : 反正每次都能去掉1/4的元素,階是log(n*n)的
          : 【 在 pyrope (pyrope) 的大作中提到: 】
          : : 1   3  7   9
          : : 2   5  13  14
          : : 6   7  25  26
          : : 20  24 30  40
          : : 比k小就到(a,: b)到(x,y)中找;
          : : 這個就不對,比如我找24,然后先選到25,但是24 < 25,卻不在你說的那個矩陣?yán)?
          : .................(以下省略)
          
          --
            從前有座山
            山上有個廟
            廟里有倆和尚……
          
          
          ※ 修改:·Comars 于 11月08日12:44:37 修改本文·[FROM: 202.120.61.1]
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 202.120.61.1]
          

          [回復(fù)本文] 發(fā)信人: keee(keee), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日12:56:51 星期二), 轉(zhuǎn)信
          
          汗。。。
          胡說八道被抓了。。
          【 在 Comars (New season comes) 的大作中提到: 】
          : 按照
          : T(n) = 3T(n/2) 計算,階是 O(n^(log3)) 大概是 O(n^1.58)
          : 不是 log(n*n)
          : 【 在 keee (keee) 的大作中提到: 】
          : : 疏忽了。。。。
          : : 那就再多找兩個矩陣好了,無所謂的
          : : 反正每次都能去掉1/4的元素,階是log(n*n)的
          : : .................(以下省略)
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.46.141]
          

          [回復(fù)本文] 發(fā)信人: keee(keee), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日12:58:29 星期二), 轉(zhuǎn)信
          
          有更好的算法嗎
          【 在 keee (keee) 的大作中提到: 】
          : 汗。。。
          : 胡說八道被抓了。。
          : 【 在 Comars (New season comes) 的大作中提到: 】
          : : 按照
          : : T(n) = 3T(n/2) 計算,階是 O(n^(log3)) 大概是 O(n^1.58)
          : : 不是 log(n*n)
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.46.141]
          

          [回復(fù)本文] 發(fā)信人: pyrope(pyrope), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日13:50:57 星期二)
          
          按你那樣的算法的話,是多項式復(fù)雜度,還不如直接找是nlgn,
          那個HR說好像是有l(wèi)gn復(fù)雜度的算法的,我覺的也應(yīng)該是有的
          【 在 keee 的大作中提到: 】
          : 有更好的算法嗎
          : 【 在 keee (keee) 的大作中提到: 】
          : : 汗。。。
          : : 胡說八道被抓了。。
          
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.35.215]
          

          [回復(fù)本文] 發(fā)信人: paradisor(paradisor), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日15:55:47 星期二)
          
          hehe
          【 在 keee 的大作中提到: 】
          : 汗。。。
          : 胡說八道被抓了。。
          : 【 在 Comars (New season comes) 的大作中提到: 】
          : : 按照
          : : T(n) = 3T(n/2) 計算,階是 O(n^(log3)) 大概是 O(n^1.58)
          : : 不是 log(n*n)
          
          --
          羽箭雕弓,憶呼鷹古壘,截虎平川。 吹笳暮歸野帳,雪壓青氈。
          淋漓醉墨,看龍蛇飛落蠻箋。 人誤許,詩情將略,一時才氣超然。
          
          何事又作南來,看重陽藥市,元夕燈山。 花時萬人樂處,攲帽垂鞭。
          聞歌感舊,尚時時流涕尊前。 君記取:封侯事在,功名不信由天。
          
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.46.143]
          

          [回復(fù)本文] 發(fā)信人: kerrigan(用戶昵稱), 信區(qū): Algorithm
          標(biāo)  題: Re: 問個昨天的MSN面試題,求教
          發(fā)信站: 飲水思源 (2005年11月08日16:56:35 星期二)
          
          我可以提供一個log(n)+log(n-1)+..+log(1) = log(n!)的算法
          舉例來說,假設(shè)要找8
          現(xiàn)在第一行中2分查找(logn),確定位置在7,9之間
          7左上的元素小于7,9右上的元素大于9,刪除這些元素
          那么可以確定8在
          2   5  13 
          6   7  25  
          20  24 30  
          即T(n)=T(n-1)+logn -> T(n)=log(n!)
          【 在 pyrope 的大作中提到: 】
          : 有一個N*N的矩陣, 里面有N*N個數(shù),這個矩陣的每一行,每一列都是排序好的,下?.
          : 個例子
          : 1   3  7   9
          : 2   5  13  14
          : 6   7  25  26
          : 20  24 30  40
          : 現(xiàn)在設(shè)計一個算法,在這個矩陣中search一個數(shù),要求盡可能快
          : 我覺的會有l(wèi)gN的算法,但是想不出來:(
          

          posted on 2005-11-08 22:08 weidagang2046 閱讀(694) 評論(2)  編輯  收藏 所屬分類: Others

          評論

          # re: 問個昨天的MSN面試題  回復(fù)  更多評論   

          a[n][n]為矩陣,查找x

          for(i=0,j=n-1;i<n && j>=0 && a[i][j]!=x;i+=a[i][j]<x,j-=a[i][j]>x);
          2005-11-11 23:12 | weidagang2046

          # re: 問個昨天的MSN面試題  回復(fù)  更多評論   

          樓上正解。牛人。時間復(fù)雜度O(n)。空間復(fù)雜度O(1)。缺點(diǎn):代碼不宜讀,沒有考慮找不到的情況。@weidagang2046

          2011-09-09 17:23 | liang
          主站蜘蛛池模板: 西乌珠穆沁旗| 崇义县| 拉萨市| 德州市| 黑水县| 灌云县| 寿阳县| 钟祥市| 盖州市| 岫岩| 同德县| 敖汉旗| 乐平市| 武宁县| 永济市| 屯门区| 卓尼县| 平利县| 娱乐| 天津市| 屏山县| 台前县| 泰宁县| 万荣县| 焉耆| 阜平县| 宝鸡市| 肥东县| 宁晋县| 绥阳县| 苏尼特右旗| 台北县| 田林县| 镇宁| 杭州市| 濮阳县| 麻江县| 澄江县| 米林县| 玛沁县| 安宁市|