ICTCLAS 2分法查詢詞典庫

2021-06-17 21:09:01 字數 1041 閱讀 6244

今天學習了二分法查詢詞典庫,現將**貼上如下:

public int findinoriginaltable(int index, string res, int handle) 

if (mid < 0 || res.compareto(wis.get(mid).getword()) != 0)

mid++;

}result = mid;

return result;

} else if (cmpvalue < 0 || cmpvalue == 0 && wi.gethandle() < handle && handle != -1)//2

start = mid + 1;

else if (cmpvalue > 0 || cmpvalue == 0 && wi.gethandle() > handle && handle != -1)//3

end = mid - 1;

mid = (start + end) / 2;}}

}return result;

}

在這裡我想說的不是2分法的實現,我是想說方法中的幾種情況如上圖**中1,2,3所在位置,我在思考除了這幾種情況外是否還有其他的情況,顯然是有的如:

(1) if (cmpvalue < 0 || cmpvalue == 0 && wi.gethandle() > handle && handle != -1)   

(2)if (cmpvalue > 0 || cmpvalue == 0 && wi.gethandle() < handle && handle != -1)

那麼現在討論這種情況,解釋下為什麼這種情況沒有在**中出現:

自己臆想的這麼認為當cmpvalue<0時也就是詞典中的詞的順序在所要查詞的前面,而   wi.gethandle() > handle所隱含表示的是詞典中的詞的順序在所要查詞的後面,應該是相互矛盾。所以這種情況不存在 。在開始讀到此處時,感覺從少了點什麼。當看到如下圖時才知道是這樣的,自己又確定了不少,真心的希望各位大猿們給予建議.

如果想更好地了解此方面知識:

查詢 二分法查詢 折半查詢法

實現查詢指定數值在元素有序的陣列中儲存的位置 索引 返回該位置 索引 解題步驟 1.定義3個用來記錄索引值的變數,變數min記錄當前範圍最小索引值,初始值為0 變數max記錄當前範圍最大索引值,初始值為陣列長度 1 變數mid記錄當前當前範圍最中間元素的索引值,初始值為 min max 2 2.使用...

二分法查詢

前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...

二分法查詢

演算法 當資料量很大適宜採用該方法。採用二分法查詢時,資料需是排好序的。主要思想是 設查詢的陣列區間為data start,end 1 確定該期間的中間位置pos將查詢的值m與data pos 比較。若相等,查詢成功返回此位置 否則確定新的查詢區域,繼續二分查詢。區域確定如下 data pos m ...