lfu演算法實現c語言 雜湊查詢演算法(C語言實現)

2021-10-14 07:25:37 字數 1837 閱讀 1113

上一節介紹了有關雜湊表及其構造過程的相關知識,本節將介紹如何利用雜湊表實現查詢操作。在雜湊表中進行查詢的操作同雜湊表的構建過程類似,其具體實現思路為:對於給定的關鍵字 k,將其帶入雜湊函式中,求得與該關鍵字對應的資料的雜湊位址,如果該位址中沒有資料,則證明該查詢表中沒有儲存該資料,查詢失敗:如果雜湊位址中有資料,就需要做進一步的證明(排除衝突的影響),找到該資料對應的關鍵字同 k 進行比對,如果相等,則查詢成功;反之,如果不相等,說明在構造雜湊表時發生了衝突,需要根據構造表時設定的處理衝突的方法找到下乙個位址,同位址中的資料進行比對,直至遇到位址中資料為 null(說明查詢失敗),或者比對成功。

假設雜湊表在構造過程採用的開放定址法處理的衝突,則雜湊表的查詢過程用**實現為:

#include#include#define hashsize 7 //定義雜湊表長為陣列的長度#define nullkey -1typedef structhashtable;//對雜湊表進行初始化void init(hashtable *hashtable)}//雜湊函式(除留餘數法)int hash(int data)//雜湊表的插入函式,可用於構造雜湊表void insert(hashtable *hashtable,int data)hashtable->elem[hashaddress]=data;}//雜湊表的查詢演算法int search(hashtable *hashtable,int data)}return hashaddress;}int main();//初始化雜湊表init(&hashtable);//利用插入函式構造雜湊表for (i=0;iinsert(&hashtable,arr[i]);}//呼叫查詢演算法result= search(&hashtable,29);if (result==-1) printf("查詢失敗");else printf("29在雜湊表中的位置是:%d",result+1);return  0;}
執行結果為:29在雜湊表中的位置是:2

在構造雜湊表的過程中,由於衝突的產生,使得雜湊表的查詢演算法仍然會涉及到比較的過程,因此對於雜湊表的查詢效率仍需以平均查詢長度來衡量。在雜湊表的查詢過程中需和給定值進行比較的關鍵字的個數取決於以下 3 個因素:

裝填因子=雜湊表中資料的個數/雜湊表的長度,用字元 α 表示(是數學符號,而不是字元 a)。裝填因子越小,表示雜湊表中空閒的位置就越多。

經過計算,在假設查詢表中的所有資料的查詢概率相等的情況下,對於表長為 m,資料個數為 n 的雜湊表:

通過公式可以看到,雜湊表的查詢效率隻同裝填因子有關,而同雜湊表中的資料的個數無關,所以在選用雜湊表做查詢操作時,選擇乙個合適的裝填因子是非常有必要的。

lfu演算法實現c語言 lru演算法c語言實現

a 分配頁面 b 置換演算法 c 程式訪問 d 換出頁面 正確答案 d 單選題 22.設某程序的頁訪問串為 1 3 1 2 4,工作集為 3 塊,問 按 lru 頁面替換演算法,儲存管理採取虛擬儲存技術 組成 物理記憶體 主機板上的ram 和硬碟上的 虛擬記憶體聯合組成 頁面大小 4kb 例 頁面排...

C 雜湊查詢演算法簡單實現

示例 主要使用雜湊表的摺疊法,其實只要懂原理,其實都好辦這種 標頭檔案部分 include stdafx.h 雜湊結果 enum hash result type 構建類似map的結構體 不使用std自帶的方法 struct map class batch int m index 當前位置 map ...

雜湊表查詢 C語言實現

題目 給定乙個全部由字串組成的字典,字串全部由大寫字母構成。其中為每個字串編寫密碼,編寫的 方式是對於 n 位字串,給定乙個 n 位數,大寫字母與數字的對應方式按照 鍵盤的方式 2 a,b,c 5 j,k,l 8 t,u,v 3 d,e,f 6 m,n,o 9 w,x,y,z 4 g,h,i 7 p...