Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЭ-2013-анн-130515.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
1.69 Mб
Скачать

Битовые карты

Более эффективна работа со списками при использовании метода битовых карт, который тоже предназначен для работы с вторичными ключами. Во многом он эквивалентен предыдущему, только вместо списков используются битовые шкалы, длина которых равна количеству информационных записей. Наличие единицы в позиции N означает, что в N-й записи значение соответствующего ключа совпадает с искомым значением, наличие нуля – нет. Очевидно, что объединение всех битовых шкал для всех значений заданного ключа дает шкалу, состоящую из одних единиц. В этом методе вместо работы со списками выполняются логические операции с битовыми шкалами. Для выбора искомых записей следует пробежать результирующую битовую шкалу и отобрать записи, номера которых равны позициям шкалы, содержащим единицы. Этот метод хорош, когда количество различных значений вторичных ключей, а значит, и шкал, невелико. В этом случае среднее количество единиц в шкале достаточно велико, что повышает эффективность работы. Заметим, что в предыдущем методе в таких условиях удлиняются списки, что, наоборот, снижает эффективность. Особенно удобно использовать битовые карты при задании сложных условий выбора: операции над битовыми шкалами гораздо проще и быстрее, чем со списками. Понятно, что с ростом количества информационных записей и количества различных вторичных ключей эффективность этого метода падает, особенно эффективность хранения.

Достоинства метода – независимость от объема файла при выборе данных по произвольным значениям ключа, отбор списка записей по сложным условиям без обращения к файлу. Особенно эффективно применение инвертированных списков при выборке данных по совокупности критериев, если атрибуты имеют сравнительно небольшой диапазон значений. Недостаток – большие затраты времени на создание и обновление инвертированных индексов, причем, время зависит от объема данных. Этот метод обычно используется лишь для поиска. Для начальной загрузки данных и обновления используют другие методы.

Эффективность доступа зависит от эффективности поиска в индексе, но в любом случае она ниже 0,5 (доступ к индексу и доступ к записи файла). Для повышения эффективности следует размещать индексы в оперативной памяти.

Эффективность хранения зависит от метода хранения индекса, от числа инвертируемых полей и от множества значений каждого вторичного ключа (от длины инвертированного списка).

8.5. Алгоритмы хеширования, основанные на методах деления, умножения и деления многочленов Метод деления

В этом методе хеш-функция принимает значение, равное остатку от деления значения ключа на M: h(k)=k mod M. Большое значение для эффективности распределения ключей имеет выбор числа M. Очевидно, например, что если оно является степенью системы счисления, значением функции будут младшие разряды ключа. Лучший вариант для уменьшения группировки ключей, если M – простое число.

Метод умножения

Функция принимает следующее значение: h(k)=M{k} , где M=2m, – произвольное дробное число, {k} – дробная часть произведения, x – ближайшее целое, не превосходящее x. В качестве лучше брать достаточно длинный отрезок иррационального числа. Удобно использовать «золотое сечение»: = (5 - 1) / 2. При = 1/M метод эквивалентен методу деления. К данному методу близок метод середины квадратов: в качестве значения функции берутся средние двоичные разряды числа k2. Однако он хуже метода умножения.