Форум программистов, компьютерный форум, киберфорум
Наши страницы

Хэш-таблица, ошибка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамическая структура данных http://www.cyberforum.ru/cpp-beginners/thread292373.html
Дано type строка=array of char; дата=record число:1..31; месяц:1..12; год:1900..1979 end;анкета=record фамилия:строка;пол:(муж, жен);деньрожд:дата end;группа=array of анкета; Программа вводит...
C++ Количество перестановок Здравствуйте! Как подсчитать количество сделанных перестановок в результате сортировки массива методом вставки? Буду очень благодарен. template <class T> void TArray <class T> :: sort () { ... http://www.cyberforum.ru/cpp-beginners/thread292347.html
порядок перемножения матриц C++
написал прогу, тока не пойму что не так, правильный ответ находится на второй строке, помогите пожалуйсто #include <iostream> using namespace std; #define Min(x,y)((x<y)?x:y) void proizv(int...
C++ Найти минимальное из чисел
Найти минимальное из чисел А В С сели А=sin(x) B=cos(x) C=ln/Х/
C++ Code Inject http://www.cyberforum.ru/cpp-beginners/thread292331.html
Здраствуйте! Вазможна ли в уже скомпилированую программу(в участок забитый нульами) прописать функцию `ShellExecute` (в бинарном виде). Есле да, то по каким ключевым словам искать? Спасибо...
C++ написать программу, которая в произвольной строке ищет все числа в десятичной системе счисления(в соответствии со стандартом языка си) и заменяет их написать программу, которая в произвольной строке ищет все числа в десятичной системе счисления(в соответствии со стандартом языка си) и заменяет их соответствующим представлением в шестнадцатеричной... подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт С++
1042 / 821 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
10.05.2011, 23:21
Цитата Сообщение от Sick2 Посмотреть сообщение
Всем добрый день. Нужна помощь. За основу взять ПРИМЕР1 хэш-таблицы с прямой адресацией (разобраться с примером). Изменить функцию вычисления хэш на мультипликативный - H(key)=[hashTableSize(key*A mod 1)] , где key*A mod 1 –дробная часть key*A , A=(sqrt(5) - 1)/2 = 0.6180339887499
Вот пример:
C++
1
2
3
4
int HashFunction(int key,int size,int p)  //хэш-функция
{
return (p+key)%size;
}
Эта штука хорошо работает, если size - простое число.
Я изменил на то, что сказано:
C++
1
2
3
4
5
6
7
int HashFunction(int key)
{
    long double A;
    double m=5;
    A=(sqrt(m) - 1)/2;
    return (A*key)%1;
}
Но так оно выдаёт ошибку.
Естественно!
1. А - вещественное, поэтому A*key - вещественное. Операция % - остаток от деления - применима только к целым.
2. Как ты себе представляешь остаток от деления на 1?
C++
1
2
3
4
5
6
7
int HashFunction(int key)
{
    long double A;
    double m=5;
    A=(sqrt(m) - 1)/2;
    return (int)(A*key)%1;
}
Так, конечно бред, но хоть запускается, но когда я ввожу элементы, они видимо не записываются, короче ничего не происходит.
Что-то нафигачил ты совсем не то, что написано.
H(key)=[hashTableSize(key*A mod 1)] , где key*A mod 1 –дробная часть key*A
Это совсем не то, что у тебя написано!
Надо умножить размер таблицы size на дробную часть (A*key) и взять целую часть от произведения.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru