|
1 | 1 | # Экзаменационный билет №17
|
2 | 2 |
|
| 3 | +## 1.Организация доступа по имени. |
3 | 4 |
|
4 |
| -## 1.Организация доступа по имени. Просматриваемые таблицы. |
5 |
| -## 2. Роль гипотез о росте структур при разработке систем управления памятью путем перепаковки. Понятие смешанной стратегии распределения свободной памяти |
| 5 | +Структура памяти |
| 6 | + |
| 7 | +- Для чтения или записи значения необходимо указать адрес элемента памяти, для человека более привычный способ указания данных - имя. |
| 8 | + |
| 9 | +Структура данных |
| 10 | + |
| 11 | +- Понятие таблицы... |
| 12 | +- Пусть `К`-есть множество имен |
| 13 | +- `А`-есть множество адресов |
| 14 | +- тогда отношение “иметь имя” есть функция `f:К->А` |
| 15 | + |
| 16 | +**Возможные задания `f`:возможный способ-табличное задание функции:** |
| 17 | + |
| 18 | +1. Таблица-последовательность строк(записей) |
| 19 | +2. Запись может состоять из нескольких полей |
| 20 | +3. Одно из полей должно задавать имя записи(ключ),остальные поля образуют тело записи. |
| 21 | + |
| 22 | +**Операции под таблицей:** |
| 23 | + |
| 24 | +- поиск записей по ключу |
| 25 | +- вставка новой записи |
| 26 | +- удаление записи |
| 27 | + |
| 28 | +**Таблица** - динамическая структура данных. |
| 29 | + |
| 30 | +**Базисное множество** - семейство линейных структур из записей, **базисное отношение** включения определяется операциями вставки и удаления записей. |
| 31 | + |
| 32 | +**Варианты расширения понятия таблицы:** |
| 33 | + |
| 34 | +- наличие нескольких ключей |
| 35 | +- доступ по телу записей |
| 36 | +- сложные запросы для поиска |
| 37 | +- дополнительные операции |
| 38 | + |
| 39 | +Принцип реализации таблиц: |
| 40 | + |
| 41 | +- операции над таблицей не определяются(не предполагают) тот или иной порядок размещения записей в памяти ЭВМ. |
| 42 | +- реализация таблицы должна способствовать быстрому выполнению операций(в основном доступа).....свобода в размещении записей позволяет разработать несколько способов организации таблиц. |
| 43 | + |
| 44 | +Введение различных способов предполагает явное или неявное существование разных типов ситуаций при использовании таблиц. |
| 45 | + |
| 46 | +Просматриваемые таблицы. |
| 47 | + |
| 48 | +Таблица последовательности строк(записей) |
| 49 | + |
| 50 | +**По организации способа доступа таблицы делятся на следующие категории:** |
| 51 | + |
| 52 | +- просматриваемые таблицы |
| 53 | +- упорядоченные таблицы |
| 54 | +- таблицы прямого доступа |
| 55 | +- перемешанные(хэш) таблицы |
| 56 | + |
| 57 | +В просматриваемой таблице порядок расположения элементов никак не связан со значениями ключей (рис. II-34). Поэтому поиск элемента по ключу осуществляется обычным просмотром всех элементов таблицы, начиная с первого и до искомого |
| 58 | + |
| 59 | +- если он есть в таблице |
| 60 | + - тогда поиск заканчивается успешно |
| 61 | +- или до конца таблицы |
| 62 | + - тогда поиск заканчивается неуспешно |
| 63 | + |
| 64 | +| Ключ | Информация | |
| 65 | +| ---- | :--------: | |
| 66 | +| 08 | ... | |
| 67 | +| 33 | ... | |
| 68 | +| 47 | ... | |
| 69 | +| 25 | ... | |
| 70 | +| 18 | ... | |
| 71 | + |
| 72 | +`рис. II-34` |
| 73 | + |
| 74 | +- При отображении просматриваемой таблицы списком не играет роли, какую – статическую или динамическую – таблицу использовать |
| 75 | +- структура элемента таблицы (списка) будет одинакова |
| 76 | +- При включении в таблицу новый элемент может быть размещен в любом месте таблицы (списка) |
| 77 | +- Если некоторый элемент удаляется из списка, действия, выполняемые при этом, могут быть разными в зависимости от того, какой элемент удаляется (рис. II–38). |
| 78 | + |
| 79 | + |
| 80 | + |
| 81 | +- Если удаляется первый элемент списка, в этом случае должен быть модифицирован указатель на начало списка (таблицы). - Если же удаляется некоторый элемент из середины списка, тогда модифицируется поле указателя предыдущего элемента (рис. II–38). |
| 82 | + |
| 83 | +**Таким образом, при удалении элемента надо:** |
| 84 | + |
| 85 | +- иметь доступ к предшествующему элементу списка |
| 86 | +- различать вид предшествующего элемента. |
| 87 | + |
| 88 | +Поскольку операция поиска возвращает искомый элемент и не сообщает о месте его размещения в списке, при реализации операции удаления элемента из списка приходится либо |
| 89 | + |
| 90 | +- (a) повторять поиск элемента |
| 91 | +- либо (b) следует несколько изменить реализацию операции поиска. |
| 92 | + - Способ (b) удобно реализуется средствами языка С/С++ |
| 93 | + |
| 94 | +Алгоритм удаления элемента из просматриваемой таблицы-списка по варианту a) приведен на рис. II–39. |
| 95 | + |
| 96 | +- В приведенном алгоритме отдельно рассматриваются удаление первого и промежуточного элементов таблицы, поскольку это приводит к необходимости модифицировать разные структуры |
| 97 | + - указатель на начало таблицы при удалении первого элемента и поле указателя в элементе списка при удалении промежуточного элемента |
| 98 | +- В результате в блоке C2 сравниваются ключи первого элемента таблицы и удаляемого элемента и, при их совпадении, в блоке D2 переопределяется указатель на начало таблицы. |
| 99 | + |
| 100 | + |
| 101 | + |
| 102 | +- Если удаляется не первый элемент, осуществляется в цикле (блоки C3, D3, E3) поиск удаляемого элемента |
| 103 | +- При этом используются два указателя – на текущий (cur) и на предыдущий (prev) элементы таблицы |
| 104 | +- При совпадении ключей переопределяется поле ссылки в предыдущем элементе (на который указываетprev), в результате чего элемент удаляется из таблицы-списка. |
| 105 | + |
| 106 | +Ниже приводится текст программы, соответствующий приведенному алгоритму. |
| 107 | + |
| 108 | +```C++ |
| 109 | +struct Item |
| 110 | +{ |
| 111 | + int key; |
| 112 | + Type info; |
| 113 | + Item *next; |
| 114 | +}; |
| 115 | +Item *ptab; /*указатель на начало таблицы */ |
| 116 | +int del1(int k) |
| 117 | +{ |
| 118 | + Item *cur, *prev; |
| 119 | + cur = ptab; |
| 120 | +/*проверяем, есть ли в таблице элементы */ |
| 121 | + if(!cur) |
| 122 | + return -1; /*таблица пуста – отказ */ |
| 123 | +/*возможно, требуется удалить первый элемент таблицы */ |
| 124 | + if(cur->key == k) |
| 125 | + { |
| 126 | + /* удаляем первый элемент */ |
| 127 | + ptab = cur->next; |
| 128 | + delInfo(cur->info); |
| 129 | + delete cur; |
| 130 | + return 0; |
| 131 | + } |
| 132 | +/* ищем удаляемый элемент среди других элементов таблицы */ |
| 133 | + while(cur->next) |
| 134 | + { |
| 135 | + /* есть другие элементы */ |
| 136 | + prev = cur; |
| 137 | + cur = cur->next; |
| 138 | + if(cur->key == k) |
| 139 | + { |
| 140 | + /* нашли элемент, который надо удалить */ |
| 141 | + prev->next = cur->next; |
| 142 | + delInfo(cur->info); |
| 143 | + delete cur; |
| 144 | + return 0; |
| 145 | + } |
| 146 | + } |
| 147 | +/* естественный выход из цикла – в таблице нет элемента с ключом k */ |
| 148 | + return -1; |
| 149 | +} |
| 150 | +``` |
| 151 | +
|
| 152 | +## 2. Роль гипотез о росте структур при разработке систем управления памятью путем перепаковки. |
| 153 | +
|
| 154 | +Дерево является идеально сбалансированным если для каждого его узла количество узлов в левом и правом поддеревьях различаются не более чем на 1. |
| 155 | +Дерево является сбалансированным,если для каждого узла высота левого и правого поддеревьев различаются не более,чем на 1(АВЛ-деревья). |
| 156 | +Идеально сбалансированные деревья являются сбалансированными.Операции обработки сбалансированных деревьев имеют сложность log2N.(поиск,вставка,удаление) |
| 157 | +Тmin=1 |
| 158 | +Tmax=log2N(при сбалансированном дереве) |
| 159 | +Tmax=N(при вырожденном дереве) |
| 160 | +
|
| 161 | + |
0 commit comments