Задача 5
Задача к решению 5.
Пусть, каждый блок позволяет размещение A записей данных или B пар вида «ключуказатель», но допускается существование дубликатов значений ключа поиска. Максимальное количество дубликатов для одного ключа равняется C. Пусть имеется плотный индекс, но для каждого различного значения ключа существует только один элемент индекса, указывающий на первую по порядку запись данных, обладающих этим ключом. Если изначально ни один из блоков в оперативную память не загружен:
1.Вычислите необходимое количество операций, требуемых для отыскания всех записей данных с заданным значением К ключа поиска. Положение блока индекса, содержащего элемент с ключом К, на диске известно заранее.
2.Решить задание 1, при наличии плотного индекса, содержащего соответствующую пару «ключ-указатель» для каждой записи, включая и те, которые обладают повторяющимися значениями ключа.
Исходные данные для задачи: Вариант 2
Задание 1
1. |
Так как заранее известно, в каком индексном блоке содержится ключ К, сначала |
, |
необходимо найти ключ в этом блоке. |
||
2. |
Для поиска применяется вариация алгоритма бинарного поиска, сложность которого log2 |
|
где n – количество элементов, среди которых осуществляется поиск. Так как в индексном |
||
блоке 45 элементов, а log2 45≈ 5,492, то для поиска понадобится 5 операций.
3. Далее необходимо найти все записи в блоках данных с ключом К. Для поиска потребуется 5+ 26 = 31 операция.
Задание 2
1.Так как в индексном блоке 45 элементов, a log2(45) ≈ 5,492, то для поиска понадобится 5 операций.
2. Далее необходимо найти все записи в блоках данных с ключом К. Для поиска потребуется 5 + 11 * 26 = 291
Задача 6
Задача к решению 6.
Пусть дисковый блок способен хранить А записей данных либо (В-1) ключей и В указателей, и блок вершины В-дерева заполнен в среднем на С. В-деревья можно использовать как составную часть различных структур. Полагая, что никакая информация изначально в оперативную память не загружена и ключ поиска является одновременно первичным ключом записей данных, для каждой из описанных ниже структур следует определить:
1. Общее количество блоков, требуемых для хранения файла с 1 000 000 записей.
7
2. Число операций, необходимых для извлечения записи, обладающей заданным значением ключа поиска.
Для случаев:
1.Данные размещены в последовательном файле, отсортированном по ключу поиска и каждый блок состоит из A записей. В-древовидный индекс является плотным.
2.То же, что и в п.п. 1, но В-дерево является разреженным.
3.Листья В-дерева содержат не указатели на записи данных, а записи как таковые. Блок способен вместить A записей, но блок-лист заполнен в среднем на С%,
4.Файл данных является последовательным, а В-дерево – разреженным, но каждому основному блоку данных поставлен в соответствие блок переполнения. Каждый основной блок в среднем полон, а область блока переполнения используется на 50%.
Исходные данные для задачи – Вариант 2
Случай 1
Так как блок данных состоит из 24 записей, то для хранения 1 000 000 потребуется 41667 блоков.
Так как каждый индексный блок содержит 100 записей, но заполнены из них только 80%, то для адресации можно использовать лишь 80 указателей в каждом блоке.
Зная это, нужно найти 80^x >= 1 000 000. В данном случае x = 4.
Таким образом, чтобы расположить 1 000 000 указателей потребуется 80^4 = 40 960 000 блоков на уровне листьев.
80^0 + 80^1 + 80^2 + 80^3 = 518481
Всего потребуется 40960000+518481 = 41478481 индексных блоков.
Чтобы найти ответ на второй вопрос, необходимо знать сколько уровней содержит дерево.
Ранее было выяснено, что дерево содержит 5 уровней (т.к. начинаются уровни с нулевого).
При поиске, чтобы опуститься на уровень ниже, необходимо найти нужный ключ и указатель на нижний уровень дерева из 80.
log2(80) ≈ 6,322
Учитывая, что уровней 5, необходимо 6,322 * 5 = 31 операция.
8
Случай 2
Так как блок данных состоит из 24 записей, то для хранения 1 000 000 потребуется 41667 блоков.
Так как каждый индексный блок содержит 100 записей, но заполнены из них только 80%, то для адресации можно использовать лишь 80 блоков.
Зная это, нужно найти 80^x >= 41667. Посчитав, получаем x = 3, 80^3 = 512000 блоков на уровне «листьев».
Всего на уровнях:
80^0 + 80^1 + 80^2 + 80^3 = 518481
Так как требуется хранить еще 41667 блоков записей, то всего понадобится 560148 блоков
дерево содержит 4 уровней (т.к. начинаются уровни с нулевого).
При поиске, чтобы опуститься на уровень ниже, необходимо найти нужный ключ и указатель на нижний уровень дерева из 80.
По аналогии с первым случаем, используя бинарный поиск для нахождения нужного ключа в одном блоке на одном уровне, необходимо
log2(80) ≈ 6,322 операций. В индексном файле будет произведено 4 * 6,322 ≈ 25 операций.
Так как в блоке данных содержится 24 записи, потребуется log2(24) ≈ 5 операций
Таким образом всего для нахождения нужной записи необходимо 25 + 5 = 30 операций.
Случай 3
Листья В-дерева содержат не указатели на записи данных, а записи как таковые. Блок способен вместить A записей, но блок-лист заполнен в среднем на С%, (если A = 24 C = 80, то блок данных хранит 19 записей).
В данном случае на уровне «листьев» находятся сами данные. Так как блок хранит 19 записей, для хранения 1 000 000 записей потребуется 52632 блоков
Зная это, нужно найти 80^x >= 52632. В данном случае x = 3.
Всего потребуется
80^0 + 80^1 + 80^2 + 80^3 = 518481 блоков
при поиске будет произведена 3 * log2(80) ≈ 3 * 6,322 = 19 операций
На последнем уровне блок содержит 19 записей. log2(19) = 4 операции.
Таким образом всего потребуется 23 операции.
9
Случай 4
Во втором случае мы уже посчитали, что в случае разряженного индекса на уровне «листьев» находится 512000 блоков, а всего на всех уровнях находится 518481 блоков.
В данном случае, помимо 41667 основных блоков данных есть еще столько же блоков переполнения. Получается, что всего требуется 601815 блоков.
По аналогии с предыдущими случаями, для поиска по индексному файлу требуется 4 * log2(80) ≈ 25 операций.
Так как индекс неплотный, после нахождения нужного блока, требуется найти саму запись в блоке. log2(24) ≈ 5 операций.
Так как у основного блока есть область переполнения в среднем заполненная на 50%, для ее просмотра потребуется еще log2(5) = 3 операции.
Таким образом, всего потребуется 25+5+3 = 33 операции.
Задача 7
Задача к решению 7.
Поясните, как повлияют на содержимое сегментов хеш-таблицы, приведенной на рис, перечисленные ниже операции вставки и замены записей с заданными ключами.
В таблице заданы результаты хэш-функций для 26 записей.
Запись |
Результат хэш-функции |
a |
3 |
b |
2 |
c |
1 |
d |
0 |
e |
1 |
f |
3 |
g |
0 |
h |
2 |
i |
3 |
j |
0 |
k |
0 |
l |
3 |
m |
1 |
n |
3 |
o |
0 |
p |
2 |
q |
2 |
r |
1 |
s |
3 |
t |
1 |
u |
2 |
v |
0 |
w |
2 |
x |
0 |
y |
0 |
z |
3 |
Исходные данные для задачи:
Вставляются записи r-t, затем записи a и r удаляются. При условии, что блок может содержать 3 записи.
10
1.При вставке записи r хэш-функция вернет 1. В Блоке с индексом 1 есть свободное место, поэтому запись помещается в него
2.При вставке записи s хэш-функция вернет 3. В Блоке с индексом 3 есть свободное место, поэтому запись помещается в него
3.При вставке записи t хэш-функция вернет 1. В Блоке с индексом 1 есть свободное место, поэтому запись помещается в него.
4.При удалении записи r хэш-функция возвращает 1. Запись r удаляется из 1 блока
5.При удалении записи a хэш-функция возвращает 3. Запись a удаляется из 3 блока
Задача 8
Задача к решению 8.
Для отношения R(a,b,c) атрибуты a и b которого относятся к целочисленному четырехбайтовому типу, а компоненты атрибута c являются строками длиной в 100 байт, под заголовок кортежа R отводится А байт. Пусть объем блока составляет 1024 байт, причем длина заголовка блока равна 24 байт.
Исходные данные для задачи – Вариант 2
1. Найти B(R), если T(R) = B.
Оператор S=πa+b,c(R) предусматривает замену компонентов а и b каждого кортежа R их суммой.
2. Найти B(S), если T(S) = C.
Оператор U= πa,b(R) предполагает изъятие строкового компонента c.
3. Найти B(U), если T(U) = D.
1.Длина кортежа составляет 122 байта: 14 для заголовка кортежа, 8 для хранения целочисленных атрибутов а и b и 100 для хранения строки
Так как объем блока составляет 1024 байта, 24 байта из которых являются заголовком, в один блок можно уместить (1 024 - 24) / 122 = 8 кортежей.
Учитывая то, что T(R) = 23000, т.е. R содержит 23000 кортежей, B(R) = 23000 / 8 = 2875
блоков.
2.Длина кортежа S составляет 118 байт: 14 для заголовка кортежа, 4 для суммы и 100 для хранения строки Так как объем блока составляет 1024 байта, 24 байта из которых являются заголовком, в
один блок можно уместить (1 024 - 24) / 118 = 8 кортежей.
Так как общее количество кортежей по условию 28000, B(S) = 28000 / 8 = 3500 блоков.
3.Длина кортежа U составляет 22 байт: 14 для заголовка кортежа, 8 для целочисленных атрибутов а и b.
Так как объем блока составляет 1024 байта, 24 байта из которых являются заголовком, в один блок можно уместить (1 024 - 24) / 22 = 45 кортежей.
Так как общее количество кортежей по условию 14000, B(U) = 14000 / 45 = 311 блоков.
11
