
- •Тема 6 Физическое представлене данных.
- •6.1 Общие положення
- •6.2.1. Последовательное распределение памяти.
- •6.2.2. Связанное распределение памяти
- •6.2.3. Связанный линейный список с использованием индекса
- •6.3.Методы 2 группы
- •Методы построения хеш – функцией
- •Выбор алгоритма хеширования
- •Методы разрешения коллизий
- •Метод цепочек
- •6.4. Методы организации и обработки файлов.
- •6.4.1. Хешированные файлы
- •Оценка скоростных характеристик хешированного файла
- •Неплотные индексы
- •Стратегии поиска
- •Файлы с плотным индексом
- •Инвертированные списки
Оценка скоростных характеристик хешированного файла
Определим количество доступов, необходимых для поиска записи с заданным ключом V в хешированном файле каждого из операций поиска включения, модификации и удаления требует доступа к внешней памяти для получения нужного блока справочника участка. Затем по указателю нужно загрузить в ОЗУ блок с записями, содержащими запись с ключом V.
Таким образом минимальная оценка такова. Если справочник содержит один блок нужен один доступ – для получения указателя. Еще один доступ – для получения блока с записью (предполагается, что записи находятся в одном блоке).
Еще один доступ нужен при операциях удаления и модификации. Итак для хеш – функции Кф ≥ 3.
Индексные файлы
Индексные файлы, это файлы, состоящие из основного файла, в котором размещаются записи индекса – файла, в котором размещаются в сортированные первичные ключи основного файла и ссылки на место расположения записей основного файла.
В зависимости от организации индексной и основной областей различают 2 типа файлов, с плотным индексом и неплотным индексом.
У этих файлов есть еще дополнительные названия:
Файлы с плотным индексом называются также индексно – прямыми файлами, а файлы с неплотным индексом – индексно – последовательными файлами смысл этого наименования мы уточним позже.
Неплотные индексы
Файлы с неплотным индексом имеют сортированные записи основного файла расположенные в основной области памяти блоках.
Идея неплотного индекса взята из телефонной книги, у которой вынесены алфавитные буквы. По ним мы осуществляем быстрый просмотр и выход на нужную букву . Затем поиск продолжается уже внутри записей на эту букву.
Блок I1
Блок I2
Значение ключей 1 записи каждого заполненного блока основной записи размещаются в сортированном виде в блоках индексной области памяти I1÷Im . В этих записях размещаются ссылки на основную запись.
Быстродействие индексных файлов определяется стратегиями поиска. Рассмотрим стратегии поиска и их скоростные характеристики.
Стратегии поиска
Линейный поиск
При поиске в индексных файлах с неплотным индексом необходимо ввести условие обработки блока индексного файла.
Пусть заданы блоки индексного файла в следующем виде:
Ключ Адрес ссылки
Нам необходимо найти запись с ключом V2. В этом случае в оперативную память загружается тот блок, для которого
V1< V2 <V3
И для ключа V1используют термин «ключ V1 покрывает V2».
При линейной стратегии поиска просматриваются все записи индексного файла до тех пор, пока не будет найдена запись покрывающая искомую запись.
Линейный поиск в индексном файле гораздо эффективнее линейного поиска в основном файле. Рассмотрим это: Пусть в основном файле содержится всего записей - m2 в блоке основного файла - Сгл – записей а в блоке индексного файла содержится - Син записей.
В этом случае в основном файле будет
Mгл/ Сгл – блоков
А в индексном файле.
Будет (Mгл/ Сгл)/ Син– блоков
т.к. Mгл/ Сгл – это количество записей в индексном файле.
Пусть поиск у нас будет равновероятностный т.е. для нахождения требуемой записи необходимо просмотреть половину общего количества блоков.
Сравним скоростные характеристики поиска при линейной стратегии в простом файле и индексном файле с неплотным индексом.
Если поиск равновероятностный, если у нас нет индексного файла то там необходимо иметь:
Кg = ½ * m2/c2
В случае индексного файла в нем будет содержаться m2/c2 записей. Если в блоке индексного файла содержится Син– записей, то индексный файл будет содержать
m2/c2* Син– блоков
А количество доступов в индексном файле нахождение указателя записи с заданным ключом V2 будет равно
Кg = ½ * m2/ c2* Син
Для нахождения записи с ключом V2 нужен еще один доступ
Кg = 1 + (½ * m2/ c2* Син)
И один доступ для размещения модифицированной записи , т.е.
Кg = 2+ (½ * m2/ c2* Син)
Пример:
m2 = 105 записей
c2 = 10
Сгл = 100
Для поиска только в главком файле не обходимо
Кg = 105 /2 = 5*104 – доступность
Для поиска в индексном файле не обходимо
Кg = (105 /2*103 ) +1 = 5*102 – доступность
т.е. разница на два порядка.
Двоичный поиск (вторая стратегия поиска)
Стратегия второго поиска связана с методом деления сортированного адресного пространства пополам и определение, в какой половине находиться искомое значение ключа.
Пусть в индексе имеется 8 записей и значение их ключем совпадает с номерами записей т.е.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Нам не обходимо найти запись с ключом равным 3.
1 шаг – дает нам значение ключа равное 4
2 шаг – дает нам значение ключа равное 2
3 шаг – дает нам значение ключа равное 3.
т.е. для поиска требуемой записи мы потратим 3 шага.
Обозна чим через n – число записей, и Km – количество шагов для поиска, тога Km = log2 n
Если 16>n>8,то
Km = log2 n + 1
Перейдем теперь к блокам индекса нашего примера.
Пусть нам необходимо найти запись с ключами то при V2 =45 – 4 блока, то при 2-й стратегии мы имеем:
1 шаг – Загружается блок БI3
2 шаг – Загружается блок БI2
3 шаг – Загружается блок БI1
Здесь есть ссылка на адрес записи с ключом 45 затем, Загружается блок с записую, имеющий ключ 45.
Производиться ее модификация и блок поять Загружается на место.
Таким образом
Kg = log2 n + 1 + 1 +1
log2 n + 1 – поиск блок индексного файла с ключом V2
1 – загрузка блока в ОЗУ с записью, имеющей ключ V2 = 45, модификация записи
1 – загрузка блока с модифицированной записью из ОЗУ во внешнюю память
Здесь nин – количество блоков индексного файла
Для примера имеем:
nин = mгл/cгл* Син = 103
и Kg = log2103 + 3 ≈ 13 доступов
т.е. количество доступов уменьшилось по сравнению с поиском в основном файле на 4 порядка.