2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Квадратичное рехеширование
Сообщение18.05.2013, 05:43 


22/12/12
54
написал программу (составляет хеш-таблицу) и в случаи коллизии использовал линейное рехеширование, вот код:
Используется синтаксис C
l = possitioning(name);
                while(A->T[l].memory)
                {
                        l++;
                        if(l == possitioning(name))
                                return false;
                        if(l > 10)
                                l = 0;
                }
 

а как сделать квадратичное таким образом, чтоб не зацикливалось и просматривались все позиции.
Проще говоря мне нужно заменить
Используется синтаксис C
l++
на что то другое. И если я не ошибаюсь, то что-то другое - это будет формула вида:
$f(c) + a_1 \cdot i + a_2 \cdot i ^ 2$где я просто не могу подобрать коэффициенты:)

P.S. Таблица содержит 10 элементов максимум

 Профиль  
                  
 
 Re: Квадратичное рехеширование
Сообщение23.05.2013, 23:53 
Заслуженный участник


27/04/09
28128

(Оффтоп)

StopCry в сообщении #725293 писал(а):
P.S. Таблица содержит 10 элементов максимум
Это кошмар. А почему 10?

По теме не скажу, а вот вместо вычисления смещения заново можно прибавлять, кроме текущего увеличения на константу, последовательно увеличивающиеся числа $n,2n,3n,\ldots$, т. к. $(n+1)^2 - n^2 = 2n + 1$. Время почти то же и не в нём дело; если таблица большая была бы, то квадрат мог бы не влезть в разрядность, а соответствующая разность его с предыдущим — да. Кроме того, такая разность вообще всегда влезет, потому что она каждый раз берётся по модулю размера таблицы, и можно хранить не эту разность $kn + a$, а $(kn + a) \bmod \text{размер таблицы}$.

(Не знаю только, стоит ли такая, хоть и немудрёная, игра свеч — как часто используют избавление от коллизий именно прибавлением квадратов.) Извините за оффтоп. :-)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group