|
2-amaliy topshiriq!
|
bet | 14/16 | Sana | 14.11.2022 | Hajmi | 1.14 Mb. | | #30196 |
Bog'liq modul-1 funcsion, Psixologiya amaliy 3, cry1Bo’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'};
|
| |