上の図は、それは述べてGRE-CS 2018からの質問です:
ハッシュ関数であるサイズ11の最初に空のハッシュテーブルHT所与 プロービング線形衝突を解決するために使用されるとし、(今HTにキー87、40、30、6、11、22、98及び20を一つずつハッシュ。の平均検索時間は何で 失敗した検索は?
答えは6です。
今、あなたは、この種の問題を解決するためにプログラムを書くことになっています。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は3つの正の整数で与え T S IのZ軸E(≤、テーブルサイズ)、 M(≤、ハッシュ関数で除数)、及び N(≤、整数の数を挿入します)。次いで、 N非負整数は(≤)スペースで区切られ、次の行に示されています。
出力仕様:
ハッシュ化した後、行に失敗した検索の平均検索時間を印刷 テーブルに、N個の整数を。答えは小数第1位まで正確でなければなりません。
サンプル入力1:
11 7 8
87 40 30 6 11 22 98 20
サンプル出力1:
6.0
サンプル入力2:
3 3 3
81 2 5
サンプル出力2:
4.0
注意点:
1、算出插入位置是模表长, 不是模公式的数字
2、插入位置结束后,及时跳出
3、考试一般插入是 <号, 查询是<=, 重要
4、算查询不成功的次数,只算M个即可
#include <iostreamの> する#include <アルゴリズム> の#include <CStringの> する#include <cstdioを> 使用して名前空間std。 const int型MAXN = 1E3 + 10。 int型のp [MAXN]。 INTメイン() { memsetの(P、-1、はsizeof(P))。 INT TSIZE、M、Nは、X; CIN >> TSIZE >> M >> N。 {ため(; iがNを<I ++はI = 0 INT) CIN >> X。 {(; J <TSIZE J ++のint J = 0)のため のint POS =(X%でのM + J)%TSIZE。 もし(P [POS] == -1){ P [POS] = xと; ブレーク; } } } 二重和= 0。 (I 0 = int型のために、私はMを<。 以下のための(int型J = 0; jの< = TSIZE。J ++){ 和++。 int型のPOS =(I + jが)%TSIZE。 もし(P [POS] == -1){ ブレーク。 } } } のprintf( "%1F"、和/ M)。 0を返します。 }