Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-50.docx
Скачиваний:
3
Добавлен:
23.09.2019
Размер:
1.82 Mб
Скачать

37. Последовательная организация данных.

При линейной организации данных каждая запись, кроме первой и последней, связана с одной предыдущей и одной последующей записями. Среди линейных методов выделяются последовательная и цепная организации данных. При последовательной организации данных записи располагаются в памяти строго одна за другой, без промежутков, в той последовательности, в которой они обрабатываются. Последовательная организация данных обычно и соответствует понятию массив (файл). Записи, составляющие массив, с точки зрения способа указания их длины делятся на записи фиксированной, переменной и неопределенной длины. Записи фиксированной (постоянной) длины имеют одинаковую, заранее известную длину. Если длины записей неодинаковы, то длина указывается в самой записи. Такие записи называют записями переменной длины. Вместо явного указания длины записи можно отмечать окончание записи специальным символом- разделителем, который не должен встречаться среди информационных символов значения записи. Записи, заканчивающиеся разделителем, называются записями неопределенной длины. Адреса промежуточных записей фиксированной длины в массиве задаются формулой A(i) = A(l)+(i-l)*L, где А(1) - начальный адрес первой записи; A(i) - начальный адрес i-й записи; L - длина одной записи. Для массива записей переменной и неопределенной длины подобной простой формулы не существует. Они занимают меньший объем памяти, но их обработка ведется с меньшей скоростью, поскольку затруднено обнаружение следующей записи.

38. Поиск в последовательном массиве.

Поиском называется процедура выделения из некоторого множества записей определенного подмножества, записи которого удовлетворяют некоторому заранее поставленному условию. Условие поиска часто называют запросом на поиск. Простейшим условием поиска является поиск по совпадению, т. е. равенство значения ключевого атрибута i-й записи р(i) и некоторого заранее заданного значения q. Алгоритмы всех разновидностей поиска можно получить из алгоритмов поиска по совпадению, которые и рассматриваются в дальнейшем. Базовым методом доступа к массиву является ступенчатый поиск. Этот метод предполагает упорядоченность обрабатываемых записей, причем безразлично, по возрастанию или по убыванию. Для определенности будем считать, что массив отсортирован по возрастанию значений ключевого атрибута p(i).

Простейшим вариантом ступенчатого поиска (его можно назвать одноступенчатым) является последовательный поиск. Искомое значение q сравнивается с ключом первой записи, если значения не совпадают, с ключом второй записи и т. д. до тех пор, пока q не станет больше ключа очередной записи. Так же существуют двухступенчатый поиск и бинарный поиск (частный вариант).

39. Корректировка в последовательном массиве.

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

атрибута w) в последовательный упорядоченный массив не должно нарушать его упорядоченность. Поэтому сначала необходимо найти положение новой записи относительно имеющихся в массиве записей, т. е. выполнить поиск ключа новой записи w. Если значения w в массиве нет, то поиск остановится там, где должна находиться запись с

ключом w при сохранении общей упорядоченности массива. Новая запись не может сразу занять место, где остановился поиск, необходимо выполнить пересылку записей, чтобы освободить его. Пересылка начинается с последней записи (она после пересылки занимает следующую позицию по направлению к концу массива), затем предпоследняя запись пересылается на место последней и т. д. В результате освобождается место для новой записи. Итак, время включения записи складывается из времени поиска и времени пересылки записей. В среднем пересылка затрагивает примерно половину записей массива. Время пересылки одной записи пропорционально ее длине. Tk=logM+ML, где L - длина одной записи массива. В формуле для Тк второе слагаемое по величине всегда значительно превышает первое, поэтому можно считать: Tk~ML.