數據挖掘算法面試題

昨天去某廠面試數據挖掘,遇到了這麼一道題面試

一個二維矩陣,右邊的數值比左邊的大,下邊的數值比上邊的大,設計一種算法,快速查找某個指定數字的位置算法

以下表所示的數據:spa

  查找值: 117              
  ——>右邊的比左邊的大
下邊的比上邊大 0 8 15 19 24 29 36 43 47 50
18 22 27 32 41 47 51 54 64 71
35 39 49 59 66 75 80 82 86 93
48 56 66 70 79 83 95 101 106 113
73 83 88 94 100 106 115 123 130 136
84 91 99 109 117 127 130 134 143 146
105 111 114 120 128 134 143 152 155 158
125 129 136 139 147 152 160 168 171 178
139 148 154 160 168 175 182 187 197 202
154 163 171 181 184 194 203 210 218 223

 

在現場比較緊張,並且也不夠時間,沒有想出好的解決方法,今天上班時間折磨了一會,發現了這麼一個好方法設計

時間複雜度估計就O(max(n,m))這樣子吧,沒有具體證實ci

基本的原理就是二分查找+對角限制數據挖掘

假設矩陣是n*m的table

首先用二分查找找到最右列上比待查找值大的最小值,在上表中的話就是136class

而後在最左列查找比待查找值小的最大值,在上表中的話就是105原理

這樣就把待查找範圍限制在下表範圍內方法

73 83 88 94 100 106 115 123 130 136
84 91 99 109 117 127 130 134 143 146
105 111 114 120 128 134 143 152 155 158

 接下來翻轉比較,用二分查找找到最下面一行中比待查找值大的最小值,即120

而後在最上面一行查找比117小的最大值,即115

這樣就把待查找範圍限制在下表範圍內

94 100 106 115
109 117 127 130
120 128 134 143

接下來繼續翻轉比較,找到左右倆邊知足條件的最大值與最小值,即109和130

這樣就把待查找範圍限制在下表範圍內

109 117 127 130

接下來一步二分查找便可匹配到117了,至此查找完畢......

某廠的面試官,給點機會吧親。。。

相關文章
相關標籤/搜索