1. 程式人生 > >1023. 簡單雜湊2 雜湊衝突的平方探測法

1023. 簡單雜湊2 雜湊衝突的平方探測法

yes
no
0#5
1#1
2#6
3#NULL
4#NULL
#include<stdio.h>
#include <string.h>
#include<stdlib.h>
int main(){
int hash_len;
int j;
long long key[10000];
int hash[10000];
char op[10];
for(int i=0;i<10000;i++)
hash[i]=-1;
int query;
scanf("%d",&hash_len);
int jj=0;
while(1){
       scanf("%s",op);
       if(strcmp(op,"End")==0)
        break;
        if(strcmp(op,"Add")==0){
            scanf("%lld",&key[jj]);
            int h = key[jj]%hash_len;//雜湊取模
            int conflic = 1;//用於解決衝突的計數器
            int ii=0;
            while(1){
                 if(hash[h]==-1) {//沒有雜湊地址衝突
                        hash[h] = key[jj];
                       break;
                }
                 else {
                h= h+conflic*conflic-ii*ii;
                if((h+conflic*conflic-ii*ii)>=hash_len){
                        h%=hash_len;//連結串列迴圈
                    }
                ii++;
                conflic++;
                 }
               
           }
       jj++;
        }
        if(strcmp(op,"Print")==0){
            for(int i=0;i<hash_len;i++){
               printf("%d",i);
               printf("#");
               if(hash[i]==-1)
                   printf("NULL\n");else
                   printf("%d\n",hash[i]);
            }
        }
        if(strcmp(op,"Query")==0){
            int exit=0;
            scanf("%d",&query);
            for(int i=0;i<hash_len;i++){
                if(hash[i]==query)
                    exit=1;
            }

                    if(exit)
                        printf("yes\n");
                else
                    printf("no\n");
            }
        }
return 0;
}                                 


相關推薦

1023. 簡單2 衝突平方探測

yes no 0#5 1#1 2#6 3#NULL 4#NULL #include<stdio.h> #include <string.h> #include<stdlib.h> int main(){ int hash_len; int j; long long key

平方探測處理函式衝突

  平方探測法是一種較好的處理衝突的方法,可以避免出現“堆積”問題,它的缺點是不能探測到散列表上的所有單元,但至少能探測到一半單元。下面通過一個例子來理解:   設Hash函式為 H( key ) = key mod 7,雜湊表的地址空間為0,1,...,10,開始時雜湊表為空,用平方探測法解決衝突,畫出依

HashTable解決衝突的方法之平方探測

平方探測法:為了消除一次聚集,hi(x)= ( Hash(x) + F(I) ) % TableSize(I=0,1,2…),其中F(I) = ,Hash(x)表示經過hash函式後的值         例:假設表的size=10(這裡不是素數,視為方便),資料:這裡的ha

教你從零開始寫一個表--衝突

  雜湊函式把一個無窮大的輸入集合對映到一個有限大小的輸出集合。不同的關鍵字輸入會被對映到同一個陣列下標,這就導致了桶的衝突。雜湊表必須實現解決衝突的方法。   我們的雜湊表將使用開放地址法和再雜湊法。在桶索引衝突後,再雜湊法會使用兩個雜湊函式來計算鍵值對將要儲存的桶索引值。   有關其他雜

之開湊和閉以及衝突的處理

開雜湊:鏈地址法 閉雜湊:開放地址法(處理衝突:線性探測法,二次先行探測等) 方法一: 閉雜湊(即開放地址法):當發生雜湊衝突時,如果該雜湊表還沒有被填滿,那麼就把該元素放到雜湊表的下一個空閒的位置

PAT (Advanced Level) 1078 Hashing (平方探測衝突處理Quadratic probing)

 記錄下這題是因為注意平方探測的公式是:,其中i = 0,1,2...TableSize 而非先對key取模再加平方。 這題質數範圍不大,不用二分直接掃也不會T。 #include<bits

詳細圖解什麼叫平方探查即二次探測湊和線性探測(資料結構 函式 衝突)

雖然上文有提到怎麼解釋的開放地址法處理hash衝突,但是當時只是給了個簡單的圖,沒有 詳細講解一下, 我當時有點不明白,回頭查查資料,然後親自動手,整理了一下。 然後我就三幅圖詳細講解一下: 什麼叫線

HashMap怎樣解決(hash)衝突

常用兩種方法:連結串列法和開放定址法 1、連結串列法(chaining) 在雜湊表中,每一個桶(bucket)或者槽(slot)都會對應一條連結串列,所有雜湊值相同的元素放到相同槽位對應的連結串列中。 在插入的時候,我們可以通過雜湊函式計算出對應的雜湊槽位,將元素插入到對應

簡單好用的

雜湊錶板子 以後考試不要總自己發揮妄圖創造模板。。 1 struct Hsh{ 2 int head[N1],to[M1],nxt[M1],val[M1],cte; 3 void ins(int x,int w) 4 { 5 int u=x%maxn,j,v; 6

第十五週專案2-用組織關鍵字線性探測

問題及程式碼: /* * Copyright (c)2016,煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:2.cpp * 作 者:張相如 * 完成日期:2016年12月14日 * 版 本 號:v1.0 * 問題

python_day06_hash

hash: 把任意長度的輸入,通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來唯一的確定輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘

表-線性探測/鏈地址

1.線性探測法 eg.假設散列表的長度是13,三列函式為H(K) = k % 13,給定的關鍵字序列為{32, 14, 23, 01, 42, 20, 45, 27, 55, 24, 10, 53}。分別畫出用線性探測法和拉鍊法解決衝突時構造的雜湊表,並求出在等概率情況下,這兩種方法的查詢成功和

51nod 1282 時鐘 (、字串的最小表示

題目 題解 要判斷時鐘是否相同,只需將時鐘的指標排序後求出M個距離,然後看距離陣列是否是迴圈同構即可。 迴圈同構: abcd的迴圈同構有:abcd、bcda、cdba、dabc。 要判斷是否迴圈同構,可以求出距離陣列的最小表示。然後對這個最小表示陣

構造表以及二次探測

構造雜湊表(散列表)以及二次探測法 今天做筆試題時,遇到一道構造雜湊表的題,hash函式是 k%11 ,然後一個數組記不清了,然後就是問二次探測法進行,問下面那個是正確,懵逼啊,沒做過,不知道,亂選直接下一題,於是有這個部落格,趕緊學習一波。 網上查詢了

教你從零開始寫一個表--表結構

  我們的鍵-值對(items),每一個都會被儲存在結構體中: // hash_table.h typedef struct { char* key; char* value; } ht_item;   我們的雜湊表儲存了一組鍵值對的指標,以及雜湊表大小的一些細節和

教你從零開始寫一個表--函式

   在這一節,我們來編寫雜湊函式。 我們選擇的雜湊函式應該具有(以下特性): 把字串作為輸入,返回0到m(我們設計的桶陣列的長度)的數字; 對於一組平均的輸入返回分佈比較均勻的桶索引。如果我們的雜湊函式不是均勻分佈的,它可將會把較多的一些鍵值對放在某幾個桶中。這將會導致更

資料結構——PART1(的Java實現)

0. 前言 我是一名資料結構與演算法的初學者,為了鞏固知識點,與更多的IT朋友們交流,我將在CSDN社群釋出資料結構與算法系列的學習總結。根據學習進度,內容大概1-2週一更,歡迎大家對相關知識點進行校正和補充,共同進步,謝謝~ 1. 概念 這一章將介紹雜湊的基

資料結構期末複習知識查漏補缺並配(帶詳解的)查漏習題(B樹,),平衡二叉樹,KMP)

一.B樹(也叫B-)與B+樹專題 (1)B樹 重點總結: 1.結點最大的孩子數目稱為B樹的階。所以,2-3樹是3階B樹,2-3-4樹是3階B樹 2.所有葉節點位於同一層次 3. 4.,一般均是升序或降序 5.在B樹上查詢的過程是一個順指標查詢結點和在

HashTable表/散列表(線性探測和二次探測

HashTable的簡單介紹 HashTable是根據關鍵字直接訪問在記憶體儲存的資料結構。 HashTable叫雜湊表或者散列表。 它通過一個關鍵值的函式將所需的資料直接對映到表中的位置來訪問資料,這個對映函式叫雜湊函式(雜湊函式),存放記錄的陣列叫散列

構造表之二次探測

<pre name="code" class="cpp">//HashTable.h #pragma once #include<iostream> #include <string> using namespace std; enum State { EMPTY,//空