《演算法導論》第11章 雜湊表 1 直接定址表

2021-08-26 18:37:14 字數 1159 閱讀 9814

(一)直接定址表

關鍵字集合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 雜湊表 通過...