《演算法》3 1符號表

2021-10-20 16:30:51 字數 2266 閱讀 2102

符號表就是一種儲存鍵值對的資料結構,

支援兩種操作:

許多符號表的實現都利用了comparable介面帶來的鍵的有序性來更好地實現put()get()方法。

每個結點儲存乙個鍵值對。

/**

* 基於無序鍊錶的順序查詢

* @author: azhu

* @date: 2021/2/28 21:09

*/public

class

saquentialsearchst

}/** * 查詢給定的鍵,返回對應的值

* @param key

* @return

*/public value get

(key key)

}return null;

//未命中

}/**

* 插入鍵值對,若已存在則更新值,否則新建結點插入。

* @param key

* @param value

*/public

void

put(key key, value value)

} first =

newnode

(key, value, first)

;//未命中,新建結點插入鍊錶開頭

}}

命中的查詢在最壞的情況下需要n次比較

向乙個空表中插入n個不同的鍵需要~n^2/2次比較。

使用了一對平行陣列,乙個儲存鍵,乙個儲存值。

核心是rank()方法:

/**

* 基於有序陣列的二分查詢

* @author: azhu

* @date: 2021/2/28 21:28

*/public

class

binarysearchst

comparable

, value>

/** * 返回表中鍵值對的數量

* @return

*/public

intsize()

/** * 判斷表是否為空

* @return

*/public

boolean

isempty()

/** * 查詢給定key所對應的value

* @param key

* @return

*/public value get

(key key)

else

}/**

* 插入鍵值對,若已存在則更新值,否則插入。

* @param key

* @param value

*/public

void

put(key key, value value)

for(

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

)//插入

keys[i]

= key;

values[i]

= value;

n++;}

/** * 迭代的二分查詢

* @param key

* @return

*/public

intrank

(key key)

else

if(cmp >0)

else

}return lo;

}/**

* 遞迴的二分查詢

* @param key

* @param lo

* @param hi

* @return

*/public

intrank

(key key,

int lo,

int hi)

else

if(cmp >0)

else

}}

現代應用需要同時能夠支援高效的查詢和插入操作的符號表的實現。

簡單的符號表實現的成本總結:

演算法最壞情況

平均情況

是否高效的支援有序性相關的操作

查詢插入

查詢插入

順序查詢nn

n/2n

否二分查詢

lgn2n

lgnn

邏輯符號表

邏輯符號表 跳轉到 導航,搜尋 在邏輯中,經常使用一組符號來表達邏輯結構。因為邏輯學家非常熟悉這些符號,他們在使用的時候沒有解釋它們。所以,給學邏輯的人的下列 列出了最常用的符號 它們的名字 讀法和有關的數學領域。此外,第三列包含非正式定義,第四列給出簡短的例子。要注意,在一些情況下,不同的符號有相...

數學符號表

符號 名稱定義 舉例讀法 數學領域 等號y xy1 1 2 等於所有領域 不等號x y xy 不等於 所有領域 嚴格不等號 xyx3 4 5 4 小於,大於 序理論 不等號x y x yx 3 4 5 5 5 4 5 5 小於等於,大於等於 序理論 加號 4 6 表示 4 加 6。2 7 9加算術 ...

核心符號表

linux核心為了實現模組化,需要提供乙個公共的核心符號表,它包含了所有的全域性核心項 函式以及變數 的位址。當模組載入到核心中後,它所匯出的任何符號都將成為核心公共符號表的一部分。核心模組只需要實現自己的功能而無需匯出任何符號,但這樣其他模組將無法使用該模組的功能,乙個新的模組可以使用自己其他模組...