開放番地法でのハッシュ表生成
Posted: 2011年10月21日(金) 21:01
C言語 Linux gcc
整数が1,000,000入っているファイルを読み込み開放番地法でハッシュ表を生成するプログラムを作っています。
・1レコード読み込みハッシュ表に格納する際に探査回数を計測し、加算していく。
・また、100,000レコード読み込み格納する毎の時刻を計測する。
イメージとしては以下のような感じです。
要素数 占有率 総探査回数 格納時間(秒)
100,000 0.1 ******* *******
200,000 0.2 ******* *******
300,000 0.3 ****** ******
・・・
・・・
1,000,000 1.0 ******* ******
やりたいことは伝わりましたでしょうか。
(もし「わけわからねー」ということがありましたら質問していただければ迅速に回答いたします)
自分でもできる限りのことはしてみたのですが、占有率と格納時間がうまくいきません。
総探査回数もあっているかどうか・・・
ファイルは以下のサイトにアップしてあります。
http://www.dotup.org/uploda/www.dotup.o ... 4.zip.html
ヘッダーファイルだけうまくアップロードできなかったので以下にに示しておきます。
何日か前にも似たような質問をさせていただきましたが、ファイルがうまくアップできていなかったようで、申し訳ありませんでした。以前の問題は解決しました。
似たような質問なので、同じトピック内で質問すべきことかもしれませんが、ファイルがゴチャゴチャになるとわかりずらいと思いまして、新たにトピックを立てました。
よろしくお願いします。
http://dixq.net/forum/viewtopic.php?f=3&t=9413
整数が1,000,000入っているファイルを読み込み開放番地法でハッシュ表を生成するプログラムを作っています。
・1レコード読み込みハッシュ表に格納する際に探査回数を計測し、加算していく。
・また、100,000レコード読み込み格納する毎の時刻を計測する。
イメージとしては以下のような感じです。
要素数 占有率 総探査回数 格納時間(秒)
100,000 0.1 ******* *******
200,000 0.2 ******* *******
300,000 0.3 ****** ******
・・・
・・・
1,000,000 1.0 ******* ******
やりたいことは伝わりましたでしょうか。
(もし「わけわからねー」ということがありましたら質問していただければ迅速に回答いたします)
自分でもできる限りのことはしてみたのですが、占有率と格納時間がうまくいきません。
総探査回数もあっているかどうか・・・
ファイルは以下のサイトにアップしてあります。
http://www.dotup.org/uploda/www.dotup.o ... 4.zip.html
ヘッダーファイルだけうまくアップロードできなかったので以下にに示しておきます。
/*hash_open.h*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <time.h>
typedef struct cell{ //バケットの構造体
int key; //キー(整数値)
}CELL;
CELL*Htable; //ハッシュ表(開放番地法、連鎖法)
#define INTV -1 //初期化定数
#define FLS -1 //関数戻り値(エラー値)
#include"Hash_funcs.c" //ハッシュ関数
#include"Hash.c" //ハッシュ表関連の関数
#include"Hash_open.c" //開放番地法操作関数
#define STORE rc = store(Htable, HSIZE, DVS, inv) //キーの格納
#define CHECK rc = check_Htable(Htable, HSIZE) //ハッシュ表が初期化されているか
#define DELHASH deallocate_Htable(Htable) //ハッシュ表の削除
何日か前にも似たような質問をさせていただきましたが、ファイルがうまくアップできていなかったようで、申し訳ありませんでした。以前の問題は解決しました。
似たような質問なので、同じトピック内で質問すべきことかもしれませんが、ファイルがゴチャゴチャになるとわかりずらいと思いまして、新たにトピックを立てました。
よろしくお願いします。
http://dixq.net/forum/viewtopic.php?f=3&t=9413