int main(int argc, char* argv[])
{
// ifstream inStream;
// ifstream inStream2;
char s[20];
int KolSlFile=0;
kolsl=200;
ObTable=0;
kolcol=0;
FILE* f = fopen( "file.txt", "rt" );
//очищаем хеш-таблицу
memset(hashtable,NULL,sizeof(hashtable));
while (!feof(f))
{
KolSlFile++;
fgets( s, sizeof(s), f );
if( strcmp(s," ")==0) continue;
linhash(s);
}
fclose(f);
printf("Lineinie probi:\n Number of the words in file= %i\n Rasmer HashTable= %i\n Number collision= %i\n\n", KolSlFile, ObTable, kolcol);
f = fopen( "file.txt", "rt" );
memset(hashtable,NULL,sizeof(hashtable));
KolSlFile=0;
ObTable=0;
kolcol=0;
while (!feof(f))
{
KolSlFile++;
fgets( s, sizeof(s), f );
if (strcmp(s," ")==0) continue;
kvhash(s);
}
printf("Kvadratichnie probi:\n Number of the words in file= %i\n Rasmer HashTable= %i\n Number collision= %i\n\n", KolSlFile, ObTable, kolcol);
fclose(f);
getchar();
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//---------------------------------------------------------------------------
const int maxn=10000;
struct node
{
char znac[20];
int key;
};
int kolcol;
int kolsl;
int ObTable;
node hashtable[maxn];
int hash(char* s)
{
int result=0;
int i=0;
for (i=0; i<strlen(s); i++)
{
result=(255*result+abs(s[i]))%kolsl;
}
return result;
}
//ëèíåéíûå ïðîáû
int linhash(char* s)
{
//ïîëó÷àåì õýø-êîä ñëîâà
int hs=hash(s);
int num=hs;
//èäåì ïî ìàññèâó ïîêà íå íàéäåì åìó ìåñòî
//ñðàçó æå ñ÷èòàåì êîëè÷åñòâî êîëëèçèé
while (true)
{
//åñëè â ÿ÷åéêå òàáëèöû óæå åñòü çíà÷åíèå
//òî êîëëèçèÿ è ïåðåõîäèì ê ñëåäóþùåìó ïîëþ
if (hashtable[num].key!=0)
{
kolcol++;
//ñòðîêè ðàâíû òî âûõîäèì
if (strcmp(hashtable[num].znac,s)==0) break;
num++;
//åñëè âûøëè çà ïðåäåëû õýø-òàáëèöû, òî óâåëè÷èâàåì åå ðàçìåð
if (num>kolsl && num<kolsl) kolsl=num;
if (num>maxn) num=num%maxn;
}
else
{
ObTable++;
strcpy(hashtable[num].znac,s);
hashtable[num].key=hs;
break;
}
}
return 0;
}
//êâàäðàòè÷íûå ïðîáû
int kvhash(char* s)
{
//ïîëó÷àåì õýø-êîä ñëîâà
int hs=hash(s);
int num=hs;
int zn=1;
int i=1;
//èäåì ïî ìàññèâó ïîêà íå íàéäåì åìó ìåñòî
//ñðàçó æå ñ÷èòàåì êîëè÷åñòâî êîëëèçèé
while (true)
{
//åñëè â ÿ÷åéêå òàáëèöû óæå åñòü çíà÷åíèå
//òî êîëëèçèÿ è ïåðåõîäèì ê ñëåäóþùåìó ïîëþ
if (hashtable[num].key!=0)
{
kolcol++;
//ñòðîêè ðàâíû òî âûõîäèì
if (strcmp(hashtable[num].znac,s)==0) break;
//íàõîäèì íîâóþ ïîçèöèþ êàê êâàäðàò, ìåíÿåì çíàê
num=(num+i*zn)*(num+i*zn); zn=-zn;
if (zn==1) i++;
//åñëè âûøëè çà ïðåäåëû õýø-òàáëèöû, òî óâåëè÷èâàåì åå ðàçìåð
if (num>kolsl && num<maxn) kolsl=num;
//ïðîâåðÿåì, íå âûøëè ëè çà ïðåäåëû ìàññèâà
if (num>maxn) num=num%maxn;
if (num<0) num=1;
}
else
{
ObTable++;
strcpy(hashtable[num].znac,s);
hashtable[num].key=hs;
break;
}
}
return 0;
}
int main(int argc, char* argv[])
{
// ifstream inStream;
// ifstream inStream2;
char s[20];
int KolSlFile=0;
kolsl=200;
ObTable=0;
kolcol=0;
FILE* f = fopen( "file.txt", "rt" );
//î÷èùàåì õåø-òàáëèöó
memset(hashtable,0,sizeof(hashtable));
while (!feof(f))
{
KolSlFile++;
fgets( s, sizeof(s), f );
if( strcmp(s," ")==0) continue;
linhash(s);
}
fclose(f);
printf("Lineinie probi:\n Number of the words in file= %i\n Rasmer HashTable= %i\n Number collision= %i\n\n", KolSlFile, ObTable, kolcol);
f = fopen( "file.txt", "rt" );
memset(hashtable,0,sizeof(hashtable));
KolSlFile=0;
ObTable=0;
kolcol=0;
while (!feof(f))
{
KolSlFile++;
fgets( s, sizeof(s), f );
if (strcmp(s," ")==0) continue;
kvhash(s);
}
printf("Kvadratichnie probi:\n Number of the words in file= %i\n Rasmer HashTable= %i\n Number collision= %i\n\n", KolSlFile, ObTable, kolcol);
fclose(f);
getchar();
return 0;
}
//если вышли за пределы хэш-таблицы, то увеличиваем ее размер
if (num>kolsl && num<kolsl) kolsl=num;
//если вышли за пределы хэш-таблицы, то увеличиваем ее размер
if (num>kolsl && num<maxn) kolsl=num;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//---------------------------------------------------------------------------
const int maxn=10000;
struct node
{
char znac[20];
int key;
};
int kolcol;
int kolsl;
int ObTable;
node hashtable[maxn];
int hash(char* s)
{
int result=0;
int i=0;
for (i=0; i<strlen(s); i++)
{
result=(255*result+abs(s[i]))%kolsl;
}
return result;
}
//линейные пробы
int linhash(char* s)
{
//получаем хэш-код слова
int hs=hash(s);
int num=hs;
//идем по массиву пока не найдем ему место
//сразу же считаем количество коллизий
while (true)
{
//если в ячейке таблицы уже есть значение
//то коллизия и переходим к следующему полю
if (hashtable[num].key!=0)
{
kolcol++;
//строки равны то выходим
if (strcmp(hashtable[num].znac,s)==0) break;
num++;
//если вышли за пределы хэш-таблицы, то увеличиваем ее размер
if (num>kolsl && num<maxn) kolsl=num;
if (num>maxn) num=num%maxn;
}
else
{
ObTable++;
strcpy(hashtable[num].znac,s);
hashtable[num].key=hs;
break;
}
}
return 0;
}
//квадратичные пробы
int kvhash(char* s)
{
//получаем хэш-код слова
int hs=hash(s);
int num=hs;
int zn=1;
int i=1;
//идем по массиву пока не найдем ему место
//сразу же считаем количество коллизий
while (true)
{
//если в ячейке таблицы уже есть значение
//то коллизия и переходим к следующему полю
if (hashtable[num].key!=0)
{
kolcol++;
//строки равны то выходим
if (strcmp(hashtable[num].znac,s)==0) break;
//находим новую позицию как квадрат, меняем знак
num=(num+i*zn)*(num+i*zn); zn=-zn;
if (zn==1) i++;
//если вышли за пределы хэш-таблицы, то увеличиваем ее размер
if (num>kolsl && num<maxn) kolsl=num;
//проверяем, не вышли ли за пределы массива
if (num>maxn) num=num%maxn;
if (num<0) num=1;
}
else
{
ObTable++;
strcpy(hashtable[num].znac,s);
hashtable[num].key=hs;
break;
}
}
return 0;
}
int main(int argc, char* argv[])
{
char s[20];
int KolSlFile=0;
kolsl=200;
ObTable=0;
kolcol=0;
FILE* f = fopen( "file.txt", "rt" );
//очищаем хеш-таблицу
memset(hashtable,0,sizeof(hashtable));
while (!feof(f))
{
KolSlFile++;
fscanf( f, "%s", s );
if( strcmp(s," ")==0) continue;
linhash(s);
}
fclose(f);
printf("Lineinie probi:\n Number of the words in file= %i\n Rasmer HashTable= %i\n Number collision= %i\n\n", KolSlFile, ObTable, kolcol);
f = fopen( "file.txt", "rt" );
memset(hashtable,0,sizeof(hashtable));
KolSlFile=0;
ObTable=0;
kolcol=0;
while (!feof(f))
{
KolSlFile++;
fscanf( f, "%s", s );
if (strcmp(s," ")==0) continue;
kvhash(s);
}
printf("Kvadratichnie probi:\n Number of the words in file= %i\n Rasmer HashTable= %i\n Number collision= %i\n\n", KolSlFile, ObTable, kolcol);
fclose(f);
getchar();
return 0;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.