2-amaliy topshiriq!


Download 1.14 Mb.
bet14/16
Sana21.11.2023
Hajmi1.14 Mb.
#1790449
1   ...   8   9   10   11   12   13   14   15   16
Bog'liq
2-amaliy topshiriq!

Bo’lish usuli. Dastlabki ma’lumot bu biror bir key butun kalit va m o’lchamli jadval. Bu funksiya natijasi jadval o’lchamini kalit bo’lishdan qolgan qoldiq.
int h(int key, int m) { return key % m; }
m = 10 uchun xesh-funksiya kalitning kichik raqamini qaytaradi.

m = 11

Xesh jadvalda shuningdek simvolli elementlarni ham saqlash mumkin. Masalan “cat” so’zini saqlash kerak bo’lsin. Har bir simvol sonli kodi olinadi va ularning summasi hisoblanadi. Keyin esa summa m ga bo’linadi va qoldiqni xesh sifatida oladi.

Anargamma ma’lumotlar esa bir xesh qiymatini chiqarishi mumkin. Bu masalani yechish uchun har bir simvol qiymatiga pozitsiya qiymati ko’paytiriladi.
1-masala. Kalit simvollar qatordan iborat. Xesh funksiyada simvolli qator butun songa aylantiriladi, barcha simvollar summasi hisoblanadi va m ga bo’lishdan qoldiq hisoblanadi.
#include using namespace std;
int h(char *key, int m) { int s = 0; while(*key) s += *key++; return s % m;
}
int main()
{
char key[] = {'b', 'a', 'c'};
int s = h(key, 10); cout<return 0;
}
Bu usulda bir xil simvoldan iborat holatda kolliziya kelib chiqadi: abc va cab.
2-masala. Yuqoridagi usulga o’zgartirish kiritish mumkin. Faqat birinchi va oxirgi simvolni summasi hisoblanadi. Bunda esa abc va aec holatda kolliziya kelib chiqadi.
#include
#include
using namespace std;
int h(char *key, int m)

{
int len = strlen(key); int s = 0; if(len < 2) s = key[0]; else
{
s = key[0] + key[len-1];
}
return s % m;
}
int main()
{
char key[] = {'b', 'a', 'c'};

Download 1.14 Mb.

Do'stlaringiz bilan baham:
1   ...   8   9   10   11   12   13   14   15   16




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling