二分查詢實現符號表

2021-10-10 10:36:59 字數 4224 閱讀 3840

使用keysvalues兩個陣列分別儲存鍵和值

實現的核心是rank()方法,它返回表中小於給定鍵的數量

/**

* 有序陣列的二分查詢

*/public

class

arraybinarysearchst

comparable

, value>

implements

iorderedsymboltable

public

arraybinarysearchst

(int capacity)

/** * 返回最小的鍵

** @return 最小的鍵

*/@override

public key min()

return keys[0]

;}/** * 返回最大的鍵

** @return 最大的鍵

*/@override

public key max()

return keys[n -1]

;}/** * 返回小於等於key的最大鍵

** @param key

* 鍵

* @return 小於等於key的最大鍵

*/@override

public key floor

(key key)

if(i ==0)

return keys[i -1]

;}/** * 返回大於等於key的最小鍵

** @param key

* 鍵

* @return 大於等於key的最小鍵

*/@override

public key ceiling

(key key)

return keys[i];}

/** * 返回小於key的鍵的數量(鍵的排名)

** @param key

* 鍵

* @return 小於key的鍵的數量

*/@override

public

intrank

(key key)

else

if(compare >0)

else

}return low;

}/**

* 獲取排名為k的鍵

** @param k

* 排名

* @return 排名為k的鍵

*/@override

public key select

(int k)

return keys[k];}

/** * 刪除最小的鍵值對

*/@override

public

void

deletemin()

/** * 刪除最大的鍵值對

*/@override

public

void

deletemax()

/** * 返回[low..high]之間鍵的數量

** @param low

* 小鍵

* @param high

* 大鍵

* @return [low..high]之間鍵的數量

*/@override

public

intsize

(key low, key high)if(

contains

(high)

)return

rank

(high)

-rank

(low);}

/** * 返回[low..high]之間的所有鍵,已排序

** @param lo

* 小鍵

* @param hi

* 大鍵

* @return [low..high]之間的所有鍵

*/@override

public iterable

keys

(key lo, key hi)

for(

int i =

rank

(lo)

; i <

rank

(hi)

; i++)if

(contains

(hi)

)return queue;

}/**

* 將鍵值對存入符號表(如果值為空則將鍵從表中刪除)

** @param key

* 鍵

* @param value

* 值

*/@override

public

void

put(key key, value value)

if(i < n && keys[i]

.compareto

(key)==0

)if(n >= keys.length)

// 將所有更大的鍵向後移動一格

for(

int j = n; j > i; j--

) keys[i]

= key;

values[i]

= value;

n++;}

/***

* 獲取鍵 key 的值(如果鍵 key 不存在則返回 null)

** @param key

* 鍵

* @return 對應的值

*/@override

public value get

(key key)

int i =

rank

(key);if

(i < n && keys[i]

.compareto

(key)==0

)return null;

}/**

* 從符號表中刪除鍵 key(以及對應的值)

** @param key

* 鍵

*/@override

public

void

delete

(key key)

int i =

rank

(key);if

(i == n || key.

compareto

(keys[i])!=

0)for(

int j = i; j < n -

1; j++

) n--

; keys[n]

= null;

values[n]

= null;

if(n >

0&& n == keys.length /4)

}/**

* 鍵key是否在符號表中有對應的值

** @param key

* 鍵

* @return boolean

*/@override

public

boolean

contains

(key key)

/** * 返回符號表是否為空

** @return boolean

*/@override

public

boolean

isempty()

/** * 返回符號表中鍵值對的個數

** @return 符號表中鍵值對的個數

*/@override

public

intsize()

/** * 返回符號表中所有鍵的(可迭代)集合

** @return 鍵的集合

*/@override

public iterable

keys()

private

void

validkey

(key key)

}private

void

resize

(int capacity)

values = tempv;

keys = tempk;

}}

符號表的順序查詢和二分查詢

符號表表示一張抽象的 我們將資訊儲存到其中,然後按照指定的鍵來搜尋並獲取這些資訊。鍵和值的具體意義取決於不同的應用。符號表中可能會儲存很多鍵和很多資訊,因此實現一張高效的符號表也是一項很有挑戰性的任務。符號表也稱為字典。符號表最主要的目的就是將乙個鍵和乙個值聯絡起來。用例能夠將乙個鍵值對插入符號表中...

《演算法》筆記 7 符號表 順序查詢 二分查詢

無序鍊錶中的順序查詢 有序陣列中的二分查詢 現代計算機和網路使人們能夠訪問海量的資訊,而且各種計算裝置正在源源不斷地生成新的資訊,高效檢索這些資訊的能力就成了處理它們的重要前提。接下來學習幾種經典的查詢演算法。符號表指的是一張用於儲存資訊的抽象的 主要目的就是將乙個鍵和乙個值聯絡起來,可以將乙個鍵值...

符號表 二叉查詢樹

實現了二叉查詢樹的 插入,查詢,獲取最大 最小值,刪除最大 最小值,按照給定的鍵值刪除鍵值,向上取整等方法。如下 標頭檔案如下 bst.h created on 2014年6月28日 author zhongchao ifndef bst define bst include include inc...