6.3.3. Метод открытой адресации Метод открытой адресации
предполагает несколько иной подход. h(x)=x mod q + 1; hi(x) = (x+1) mod q + 1; h2(x) = (x+2) mod q + 1; h3(x) = (x+3) mod q + 1; То есть, попросту говоря, если вычисленная ячейка оказалась занятой, то используем соседнюю ячейку справа и т.д., при этом для последней ячейки роль соседней справа выполняет первая ячейка. При поиске, кроме текущего значения, следует просматривать и ячейки справа от текущей до тех пор, пока мы не достигнем пустой ячейки. Очевидно, что эффективность метода тем выше, чем меньше ячеек приходится просмотреть при заполнении и поиске. Метод линейной адресации оказывается неэффективным, так как данные часто имеют свойства группироваться вокруг определенных значений. Например, возраст преподавателей, может группироваться либо в пределах 50-60 лет, либо 25-30 лет, и подобные закономерности часты. Таким образом, при переадресации внутри хеш-таблицы следует стремиться к максимальному расширению области затрагиваемых ячеек. Метод квадратичных проб состоит в том, что если возникает коллизия, используем функции h(x)=x mod q + 1; h1(x) = (x+1) mod q + 1; h2(x) = (x+22) mod q + 1; h3(x) = (x+32) mod q + 1; Здесь обязательно выполнение условия «простоты» числа q, иначе алгоритм, как доказано, может зациклить. Этот метод устраняет основной недостаток метода линейных проб и является наиболее часто используемым.
|