codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
* Doppio HASHING . Nel main la dimensione massima da inserire deve essere un numero primo.
*/
int m;
struct table{
int used_slot;
float alpha;
double Insert_time;
double Search_time;
double Search_WS_time;
};
//
int Hash_Insert(int T[], int k) {
int i = 0;
do {
int j = Hash_Function_Double(k,i);
if (T[j] == 0){
T[j] = k;
return j;
}
else {
i++;
}
}
while (i != m);
printf ("Hash Table Overflow");
}
//
int Hash_Search(int T[], int k) {
int i = 0;
int j = 0;
do{
j = Hash_Function_Double(k,i);
if (T[j] == k)
return j;
i++;
}
while(T[j] != 0 && i != m);
return 0;
}
//
int Auxiliary_Hash_Function (int k) {
int h;
h = k % m;
return h;
}
//
int Auxiliary_Hash_Function2 (int k) {
int h;
h = 1 + (k % (m-1));
return h;
}
//
int Hash_Function_Double(int k, int i){
int h, x, y;
x = Auxiliary_Hash_Function(k);
y = Auxiliary_Hash_Function2(k);
h = (x + i*y) % m;
return h;
}
int main(int argc, char *argv[]) {
int MAX, i, j, k, l, n, N, random, ran;
clock_t start,end;
double Time,diff;
FILE *result;
//INSERTION INPUT DATA
printf("Insert maximum array dimension: ");
scanf("%d", &MAX);
printf("Insert array start dimension: ");
scanf("%d", &n);
printf("Insert array increase step dimension: ");
scanf("%d", &N);
m = MAX;
//CREATE DIMENSION ARRAY AND OUTPUT ARRAY(with results)
int dim_input=((MAX-n)/N);
int DIM[dim_input];
struct table output[dim_input];
DIM[0]=n;
//FILLING DIMENSION ARRAY
for(j=1;j<dim_input;j++){
DIM[j]=DIM[j-1]+N;
}
//CREATE INPUT ARRAY RANDOMLY
int *T;
srand (time(NULL));
for (i=0; i<dim_input; i++){
int dimension=DIM[i];
T = malloc(MAX*sizeof(int));
for (k=0;k<MAX;k++){
T[k] = 0;
}
for(k=0;k<dimension;k++){
random = rand();
Hash_Insert(T,random);
}
output[i].used_slot=dimension;
output[i].alpha = ((float)(dimension) /(float)(MAX));
//ran = rand();
diff=0;
ran=rand();
for(l=0;l<100000;l++){
while (Hash_Search(T,ran) != 0) {
ran = rand();
}
start = clock();
Hash_Search(T,ran);
end = clock();
diff = diff + difftime(end,start);
}
printf("\nRicerca Senza Successo x 100000: %lf",diff);
Time = ((double)(diff/100000)/CLK_TCK)*1000000000;
output[i].Search_WS_time = Time;
diff=0;
for(l=0;l<1000000;l++){
int index=rand()%dimension;
int x=T[index];
while (x == 0){
index = rand()%dimension;
x=T[index];
}
start = clock();
Hash_Search(T,x);
end = clock();
diff = diff+difftime(end,start);
}
printf("\nRicerca Con Successo x 1000000: %lf",diff);
Time = ((double)(diff/1000000)/CLK_TCK)*1000000000;
output[i].Search_time = Time;
diff=0;
for(l=0;l<1000;l++){
start = clock();
Hash_Insert(T,ran);
end = clock();
diff = diff+difftime(end,start);
}
//printf("\nInsert x 1000: %lf",diff);
Time = ((double)(diff/1000)/CLK_TCK)*1000000000;
output[i].Insert_time = Time;
free(T);
}
//SAVE RESULTS ON FILE
result=fopen("D:\\ResultHASHdoublePROVA.txt","w+");
fprintf(result,"Used Slot\tTotal Slot\tAlpha\t\tScan Insert\tScan Search\tScan Search Without Success\n");
for(j=0;j<dim_input;j++){
fprintf(result,"%d\t\t%d\t\t%lf\t%.0f\t\t%.0f\t\t\t%.0f\n",output[j].used_slot,m,output[j].alpha,output[j].Insert_time,output[j].Search_time,output[j].Search_WS_time);
}
printf("\n");
printf("Results saved in: D:\\ResultHASHdouble.txt \n");
system ("PAUSE");
return 0;
}
Non riesco a trovare il problema.... Vi prego aiutatemi