Cтраница 1
Хэш-таблицы состоят из автоматически заносимых в них элементов ( ячеек) записей, содержащих ключи и адреса. Поиск осуществляется в оперативной памяти по значению ключей в таблице. Если ключ искомого элемента соответствует заданному, то этот элемент считается обнаруженным, после чего происходит обращение по соответствующему данному ключу адресу к элементу записи во внешней памяти ЭВМ. [1]
Расширяемая хэш-таблица - эго каталог ссылок нз страницы Гподобмо внешним узлам е 8 - деревья к) h который содержит до 2М элементоо - Кзждэд страница содержат также пчетчик ( mli количества элэыентдв на странице и целочисленное значение k) h угадывающее КОЛИЧЕСТЙО ведущих разрядов, которые должны соападагь в ключах элементов, Ка обычно, W - колнчесгво эленентоа а таблице. [2]
Преимуществом использования хэш-таблицы является ускоренный в несколько раз поиск файла. Недостаток этого метода состоит в более сложном администрировании каталога. Применять этот метод стоит только в тех системах, в которых ожидается, что каталоги будут содержать сотни и тысячи файлов. [3]
Все пары ( символьное имя, значение), в которых имя соответствует i, сохраняются в связном списке, на который указывает слот i в хэш-таблице. Если мы выберем k, приблизительно равное п, то на нахождение нужного символьного имени в среднем потребуется всего один поиск. [4]
Компьютер с размером страницы 8 Кбайт, размером оперативной памяти 256 Кбайт и размером виртуального адресного пространства 64 Гбайт использует инвертированную таблицу страниц для реализации своей виртуальной памяти. Предположим, что размер хэш-таблицы является степенью двойки. [5]
Метод, который для обеспечения быстрого поиска данных предусматривает преобразование ключей записей в адреса их размещения во внешней памяти. Основан на использовании таблиц ( хэш-таблиц), специального алгоритма хэширования [ hashing algorithm ] и функции ( хэш-функции), формирующих таблицы и реализующих поиск, а также генератора псевдослучайных чисел. [6]
Другие примеры оптимизации включают структуры данных. Двойные связные списки занимают больше памяти, чем одинарные связные списки, зато они часто предоставляют более быстрый доступ к элементам списка. Хэш-таблицы занимают еще больше памяти, но еще более ускоряют поиск. Короче говоря, при оптимизации участка программы следует уделить особое внимание проблеме компромисса между занимаемой памятью и скоростью выполнения программы. [7]
Помимо этих контейнеров Delphi имеет класс THashedStringList, который происходит от TStringList. Этот класс не имеет никакого прямого отношения к хэш-спискам и определен в другом модуле, IniFiles. Хэшированный список строк имеет две связанные хэш-таблицы ( типа TStringHash), которые полностью обновляются каждый раз при изменении содержания списка строки. Поэтому данный класс полезен только для чтения большого набора фиксированных строк, а не для обработки часто изменяющегося списка строк. С другой стороны, вспомогательный класс TStringHash, вероятно, будет весьма полезен в общих случаях, и он имеет хороший алгоритм для вычисления хэш-значения строки. [8]
В любом случае исследуется элемент таблицы, соответствующий полученному хэш-коду. Если элемент не используется, туда помещается указатель на описатель файла. Описатели файлов размещаются вслед за хэш-таблицей. Если же элемент таблицы уже занят, то создается связный список, объединяющий все описатели файлов с одинаковым хэш-кодом. [9]
Во всех рассмотренных нами пока схемах при поиске файла каталоги просматриваются линейно сверху вниз. Для очень больших каталогов, содержащих много тысяч файлов, такой поиск может занять довольно много времени. Один из способов ускорить поиск файла состоит в использовании хэш-таблицы в каждом каталоге. При добавлении в каталог нового файла его имя должно хэшироваться в число от 0 до га-1. [10]
Во всех рассмотренных нами пока схемах при поиске файла каталоги просматриваются линейно сверху вниз. Для очень больших каталогов, содержащих много тысяч файлов, такой поиск может занять довольно много времени. Один из способов ускорить поиск файла состоит в использовании хэш-таблицы в каждом каталоге. [11]
Если буфер TLB может содержать все часто используемые страницы, трансляция адреса будет происходить так же быстро, как и с обычными таблицами страниц. Но при неудачном поиске в буфере TLB поиск в инвертированной таблице страниц должен выполняться программно. Все виртуальные страницы, находящиеся в данный момент в памяти и имеющие одинаковое значение хэш-функции, сцепляются друг с другом, как показано на рис. 4.14. Если хэш-таблица состоит из такого же количества ячеек, сколько в машине физических страниц, средняя цепочка будет длиной только в одну запись, что значительно увеличит скорость отображения адресов. [12]
Но списки имеют и определенные недостатки, из-за которых в LISP были включены и другие структуры данных. Списки в LISP представляют собой стеки, т.е. доступ к ним возможен только с одного конца списка. Манипулируя только таким списком, невозможно обратиться к элементу списка по его позиции, как это делается с элементом массива. Поэтому для представления больших совокупностей относительно постоянных или редко меняющихся данных в LISP были включены другие типы структур. В современных версиях LISP поддерживаются массивы, хэш-таблицы и структуры, подобные записям, которые позволяют эффективнее использовать пространство памяти и повысить скорость доступа. [13]