![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 27.05.2008
Сообщений: 14
|
![]()
Вопрос в следующем: при проектировании хэш-таблиц обычно делают так, чтобы их размер был равен простому числу. Чаще всего это числа Мерсенне. Почему так? Что будет, если задать другой размер?
Например, при модульном хэшировании (хэш-код = (ключ)mod(размер)) если таблица будет иметь размер 20 и мы вставим в неё ключи от одного до ста, то в каждый ковш попадёт ровно по 5 значений и никакого перекоса не будет. Значит и саставные числа неплохо подходят, так почему-же именно простые выбирают в качестве размера? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
Ну, на сколько я знаю, рекомендуется использование не просто простых чисел (извиняйте за туфтологию
![]() |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 27.05.2008
Сообщений: 14
|
![]()
Наоборот, для хэш-таблицы с цепочками коллизий рекомендуется подбирать размер таблицы так, чтобы на каждую цепочку приходилось по 1-2 коллизии. Иначе сама структура таблицы имеет мало смысла.
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]() Цитата:
Хэш-таблица в идеале должна представлять из себя следующую структуру: +------+----------+ | ключ | значение | +------+----------+ | | | +------+----------+ Одно обращение к этой таблице должно находить нужную запись и возвращать соответствующее значение, т.е. должен быть массив, у которого для навигации используется не индекс, а ключ. Наличие коллизий усложняет ситуацию, т.к. нужно реализовывать методы разрешения коллизий, что увеличивает время поиска. Допустим коллизий у нас нет. Из-за этого автоматически "сама структура таблицы имеет мало смысла"? Если Вы имели ввиду, что более 2 коллизий плохо, то для этого какраз и выбирают в качестве размера таблицы большие простые числа, т.к. остаток от деления на них будет явно реже повторяться, а соответственно меньше коллизий будет. Или я заблуждаюсь? |
|
![]() |
![]() |
![]() |
#5 | ||
Пользователь
Регистрация: 27.05.2008
Сообщений: 14
|
![]() Цитата:
Цитата:
Нет, скорее всего вы не заблуждаетесь. Я как раз и хочу выяснить почему остаток от деления на простые числа будет реже повторятся. Это вовсе не очевидно. Например, если размер таблицы 250, а мы вставляем туда ключи от 0 до 1000000, то существует по 4000 ключей, которые потенциально могут находится в каждой ячейке. Это кочичесво существенно не изменится, если размер таблицы будет 251 - простое число. |
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обязательно ли программисту эмигрировать в США? | Alar | Свободное общение | 58 | 27.12.2010 20:15 |
Простое любопытство.... | KORT | Свободное общение | 130 | 20.06.2009 19:06 |
Как изменить динамически менять размер плавающего фрейма, к-й находится в ячейке таблицы? | 3lander | HTML и CSS | 8 | 26.05.2008 19:54 |
взаимно простое числы | Cantana | Помощь студентам | 4 | 07.03.2008 08:46 |