(一)直接定址表
關鍵字集合u = ,實際的關鍵字集合k。
用乙個陣列t[0..m - 1],其中每個位置對應u中的乙個關鍵字。
直接定址表的問題:
(1)如果u很大,要儲存|u|大小的一張表t有點不實際。
(2)實際儲存的關鍵字集合k相對u來說可能很小,因而分配給t的大部分空間都要浪費掉。
(二)位向量
位向量 (bit vector)是一種僅包含0和1的陣列,所佔空間比包含指標的陣列少得多。
乙個32位的整型,每一位用0和1表示key是否存在,這樣乙個整數就可以表示32個key。
key / 32表示key應保持在陣列哪個下標的整數中,而key % 32則表示key應該用
該整數中的第幾位置1來表示存在。
#include #include #define int_bit 32
typedef struct bitmap;
bitmap * bitmap_create(int max)
void bitmap_insert(bitmap *bitmap, int key)
void bitmap_delete(bitmap *bitmap, int key)
int bitmap_search(bitmap *bitmap, int key)
void bitmap_print(bitmap *bitmap)
int main(void)
更快速、簡潔的表示方法是用位運算來表示除法和求餘。
key >> 5表示key / 32
key & 0x1f表示key % 32
#define shift 5
#define mask 0x1f
#define int_bit 32
void bitmap_insert(bitmap *bitmap, int key)
void bitmap_delete(bitmap *bitmap, int key)
int bitmap_search(bitmap *bitmap, int key)
一道筆試題: 直接定址表 第11章 雜湊表
基本的字典操作平均需要o 1 的時間 著重通過 鏈結 解決 衝突 關鍵字的全域較小時,直接定址簡單而有效。全域中每個關鍵字都對應於陣列的乙個下標值,實際關鍵字小於全域,僅決定表中的一些槽 slot 另一些屬於全域卻不屬於實際關鍵字的槽則包含nil。字典操作 direct address search...
《演算法導論》筆記 第11章 11 1 直接定址表
當關鍵字的全域u比較小時,直接定址。11.1 1 考慮由乙個長度為m的直接定址表t表示的動態集合s。給出乙個查詢s的最大元素的演算法過程。所給的過程在最壞情況下的執行時間是什麼?遍歷動態集合中的所有元素o m 11.1 2 位向量是一種僅包含0和1的陣列。長度為m的位向量所佔空間要比包含m個指標的陣...
演算法導論11(雜湊表)
11.1 直接定址表 struct node node directaddresssearch node t,int k void directaddressinsert node t,node x void directaddressdelete node t,node x 11.2 雜湊表 通過...