符號表就是一種儲存鍵值對的資料結構,
支援兩種操作:
許多符號表的實現都利用了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核心為了實現模組化,需要提供乙個公共的核心符號表,它包含了所有的全域性核心項 函式以及變數 的位址。當模組載入到核心中後,它所匯出的任何符號都將成為核心公共符號表的一部分。核心模組只需要實現自己的功能而無需匯出任何符號,但這樣其他模組將無法使用該模組的功能,乙個新的模組可以使用自己其他模組...