線性搜尋中的「哨兵」技巧

2021-10-08 14:33:59 字數 1185 閱讀 4783

線性搜尋的基本過程是將若干個資料從頭到尾,依次逐個比對,直到找到目標資料。

假設有50個箱子,裡面分別裝有乙個寫有任意數字的紙條,箱子上面標有1~50的序號。現在要從這50個箱子當中查詢是否有箱子裝有寫著要查詢數字的紙條。

假設我們的資料如下,我們要查詢的數字為8254

1 => 1952,2 => 4028,3 => 99,4 => 7161,5 => 6357,

6 => 9293,7 => 5017,8 => 6575,9 => 2590,10 => 2706,

11 => 5107,12 => 7203,13 => 8907,14 => 7706,15 => 2209,

16 => 671,17 => 272,18 => 1344,19 => 7099,20 => 1987,

21 => 6023,22 => 1012,23 => 8013,24 => 6103, 25 => 8069,

26 => 5694,27 => 6331,28 => 2781,29 => 6285,30 => 5223,

31 => 8812,32 => 5056,33 => 4515,34 => 3554,35 => 9074,

36 => 362,37 => 2131,38 => 8970,39 => 8783,40 => 5911,

41 => 2248,42 => 6953,43 => 6827,44 => 7359,45 => 7217,

46 => 4911,47 => 3978,48 => 9985,49 => 7970,50 => 7320

)

$num = 8254;

while(true)

if($arr[$i]!=$num)else

}

如果不使用哨兵,我們不得不每次判斷箱子的編號是否大於50,並且判斷當前的數字是否是我們要找的數字。

每次都判斷箱子的編號顯然有些浪費,為了避免這種不必要的判斷,我們新增了51號箱子,把要找的數字放到裡面,這種資料我們稱之為「哨兵」。

$num = 8254;

$guard = 51;

$arr[$guard] = $num;

while(true)elseelse

exit;

}}

使用哨兵後,我們不必每次都判斷箱子的編號。

演算法中哨兵技巧

哨兵 國家邊界的站崗士兵 這裡引申為處理邊界值的問題。例項 需求 陣列中找值key所在的位置 public class guardtest system.out.println searchvalue array,3 system.out.println searchvaluewithguard a...

排序中的哨兵

直接插入排序演算法 1 演算法描述 void lnsertsort seqlist r while r 0 key 當r i key r j key時終止 r j 1 r 0 r i 插入到正確的位置上 endif insertsort 2 哨兵的作用 演算法中引進的附加記錄r 0 稱監視哨或哨兵 ...

Redis中的哨兵機制

sentinel哨兵機制實際上就是對redis的主從節點進行監控,當主節點發生宕機之後,被多個sentinel哨兵發現,然後他們從從節點中推選出新的主節點,告訴其他從節點新的主節點的位址,最後將新的主節點的位址告知連線sentinel的客戶端。值得注意的是,如果原來的主節點在宕機之後突然復活,它也只...