weidagang2046的專欄

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

          問個昨天的MSN面試題

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

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

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

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

          [回復本文] 發信人: pyrope(pyrope), 信區: Algorithm
          標  題: Re: 問個昨天的MSN面試題,求教
          發信站: 飲水思源 (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,卻不在你說的那個矩陣里
          【 在 keee 的大作中提到: 】
          : 設矩陣從(a,b)到(c,d)
          : 取矩陣中間位置的點(x,y)與要找的數k做比較,分三種情況:相等即找到;比k小就?.
          : b)到(x,y)中找;比k大就到((x+1, b)-(c, y)), ((a, y+1)-(x, d)), ((x+1, y+1)-..
          : ))三塊矩陣中找。
          : 隨便想的,歡迎拍磚
          : 【 在 pyrope 的大作中提到: 】
          : : 不懂怎么二分。。。能具體點么?
          
          --
          
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 59.78.35.215]
          

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

          [回復本文] 發信人: keee(keee), 信區: Algorithm
          標  題: Re: 問個昨天的MSN面試題,求教
          發信站: 飲水思源 (2005年11月08日12:37:40 星期二), 轉信
          
          疏忽了。。。。
          那就再多找兩個矩陣好了,無所謂的
          反正每次都能去掉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,卻不在你說的那個矩陣里
          : 【 在 keee 的大作中提到: 】
          : : 設矩陣從(a,b)到(c,d)
          : : 取矩陣中間位置的點(x,y)與要找的數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]
          

          [回復本文] 發信人: Comars(New season comes), 信區: Algorithm
          標  題: Re: 問個昨天的MSN面試題,求教
          發信站: 飲水思源 (2005年11月08日12:44:25 星期二), 轉信
          
          按照
          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,卻不在你說的那個矩陣里
          : .................(以下省略)
          
          --
            從前有座山
            山上有個廟
            廟里有倆和尚……
          
          
          ※ 修改:·Comars 于 11月08日12:44:37 修改本文·[FROM: 202.120.61.1]
          ※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 202.120.61.1]
          

          [回復本文] 發信人: keee(keee), 信區: Algorithm
          標  題: Re: 問個昨天的MSN面試題,求教
          發信站: 飲水思源 (2005年11月08日12:56:51 星期二), 轉信
          
          汗。。。
          胡說八道被抓了。。
          【 在 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]
          

          [回復本文] 發信人: keee(keee), 信區: Algorithm
          標  題: Re: 問個昨天的MSN面試題,求教
          發信站: 飲水思源 (2005年11月08日12:58:29 星期二), 轉信
          
          有更好的算法嗎
          【 在 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]
          

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

          [回復本文] 發信人: paradisor(paradisor), 信區: Algorithm
          標  題: Re: 問個昨天的MSN面試題,求教
          發信站: 飲水思源 (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]
          

          [回復本文] 發信人: kerrigan(用戶昵稱), 信區: Algorithm
          標  題: Re: 問個昨天的MSN面試題,求教
          發信站: 飲水思源 (2005年11月08日16:56:35 星期二)
          
          我可以提供一個log(n)+log(n-1)+..+log(1) = log(n!)的算法
          舉例來說,假設要找8
          現在第一行中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個數,這個矩陣的每一行,每一列都是排序好的,下?.
          : 個例子
          : 1   3  7   9
          : 2   5  13  14
          : 6   7  25  26
          : 20  24 30  40
          : 現在設計一個算法,在這個矩陣中search一個數,要求盡可能快
          : 我覺的會有lgN的算法,但是想不出來:(
          

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

          評論

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

          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面試題  回復  更多評論   

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

          2011-09-09 17:23 | liang
          主站蜘蛛池模板: 静乐县| 通化市| 寻乌县| 汉源县| 溧阳市| 西盟| 昌图县| 白水县| 海宁市| 天水市| 西吉县| 赣州市| 荥阳市| 杭锦后旗| 嘉黎县| 连南| 柳河县| 陈巴尔虎旗| 彭水| 务川| 牟定县| 永年县| 五家渠市| 正宁县| 广州市| 桐乡市| 乌拉特后旗| 敖汉旗| 城口县| 长岛县| 资溪县| 策勒县| 浙江省| 天祝| 湖北省| 固原市| 镶黄旗| 永新县| 江安县| 黑水县| 叙永县|