Advertisement
Qellex

struct 4 - 3v

Mar 4th, 2022
826
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include "locale.h"
  2. #include <iostream>
  3. #include <cmath>
  4. using namespace std;
  5. // мультиплипликативный метод хеширования(метод умножения)
  6. int HashFunction(float k) {
  7. float n = 20001.0; double A = 0.618033; // А взято на осново золотого сечения
  8. int h = n * fmod((k * A), 1); // n кол-во всевозможных входов
  9. return fabs(h);
  10. }
  11. /*Квадратичным пробированием называется метод разрешения коллизий
  12. в хеш-таблице с открытой адресацией, при котором i-ый
  13. элемент последовательности проб это hash(k)+(i^2 * x) mod n
  14. где n - размер таблицы, x - некоторая фиксированная константа.*/
  15. int kollisia(float k, int i) {
  16. int n = 20001, x = 3;
  17. int res = HashFunction(k) + fmod(i * i * x, n);
  18. return res;
  19. }
  20. void main() {
  21. setlocale(LC_ALL, "Rus");
  22. float hash_table[20001]; // таблица
  23. for (int i = 0; i < 20001; i++) { // заполняем невозможным значение
  24. hash_table[i] = 10001;
  25. }
  26. float key;
  27. int count = 0, res; // кол-во ввода
  28. while (true) {
  29. cout << "Ключ = "; cin >> key;
  30. count++;
  31. res = HashFunction(key);
  32. if (hash_table[res] != 10001) // если ключ занят, то делаем коллизию
  33. res = kollisia(key, count);
  34. hash_table[res] = key;
  35. cout << "HashFunction(" << key << ") = " << res << endl;
  36. }
  37. system("pause");
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement