2-amaliy topshiriq!
Download 1.14 Mb.
|
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 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< } 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling