思考-《劍指offer》題之二維數(shù)組查找

書中從矩陣的一個邊角(如右上角出發(fā)),開始查找某數(shù)值m,找到后打印m所在的矩陣中位置。假設(shè)某一時刻,這時來到了某位置(i,j),如果Data(i,j)<m,將j+1,如果是等于,則m的位置已經(jīng)找到了;如果大于,則將i+1。按照這樣的方式,能夠每次減少一行或一列,直到找到目標(biāo)。這是一道通過比較的方式,查找相應(yīng)元素的算法。

我想到了兩個問題。

  1. 如果出發(fā)時把位置設(shè)置在中間,會不會比從右上角快些?
  2. 如果所比較的數(shù)值m換成了序列,如(x(i),y(i))、甚至是三變量(x(i),y(i),z(i)),那還如何從目標(biāo)中找到答案?

問題一:
如果設(shè)置在了中間,那么Data(i,j)<m時,應(yīng)該向數(shù)值遞增的右邊或下邊進行查找,反之,小于則向上邊或左邊進行查找。雖然每次比較貌似需要比較2次,但是由于處于中間的位置,所以工作量減為1/2。而位于矩陣一角,工作量多一倍,每次比較一次,所以速度應(yīng)該是一樣的(時間復(fù)雜度)
問題二:
如果是二變量序列,可以先比較x(i),再比較y(i),多變量序列也是從首位變量到末尾變量的依次比較。這里把二維變量想象成二維平面上,每次比較必然能夠移動一格。如果是三維變量則作為立方體,每次比較也必然能夠移動一格。結(jié)合問題一,在這里,問題已經(jīng)變了,因為每次只需要比較一次,所以應(yīng)該從中間開始找,這樣能夠保證平均情況下工作量是從邊界開始的方式的1/2。
(注:這里類比成二維平面、三維立方,并不是說相鄰序列其中一個是另一個的某個變量加一或減一這樣的關(guān)系。僅僅指的是它們嚴格按照遞增、遞減的規(guī)律。一個區(qū)域弄成“實心”、“滿”(內(nèi)部沒有空白元素)的這樣一種狀態(tài))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,652評論 18 399
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,907評論 0 33
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,348評論 0 2
  • 動態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動態(tài)規(guī)劃算法步驟 最長...
    廖少少閱讀 3,641評論 0 18
  • 初入F公司第一個月,我被派去上海參加培訓(xùn)。培訓(xùn)師是個日本人,全英文授課。那個矮小男人的日式發(fā)音雖讓人抓狂,...
    不負小春閱讀 13,565評論 3 2

友情鏈接更多精彩內(nèi)容