Файл: Зубов В.С. Математическое обеспечение цифровых вычислительных машин и систем учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 26.07.2024

Просмотров: 94

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

- 5 6 -

при поиска в дереве. Деревья такого рода именуются подрав-

ненннми.

Алгоритмы упорядочения путём построения дихотомичес­ кого дерева записей на основе их сопоставления будем имено­ вать сопоставительными алгоритмами включения в дихотомиче­ ское дерево.

§ 4. Метод упорядочения, базирующийся на отображении множества записей на вектор памяти

Вектор памяти является естественным упорядоченным мно­ жеством .объектов в ЭВМ, пригодным для осуществления упоря­ дочения записей путём отображения их множества на упорядо­ ченное множество объектов ( " отобразительное" упорядочение).

Идея такого упорядочения в случае отсутствия ограни­ чений на размер вектора - проста. С помощью некоторой фун­ кции соответствия устанавливается соответствие элементов вектора и записей по значению их управляющих слов. В даль­ нейшем используемый вектор будем именовать вектором значе­ ний. Один элемент вектора соответствует обычно ассоциации записей с определённым значением управляющего слова, т .е .

подмножеству записей, между которыми отношение порядка не определено. Затем осуществляется просмотр элементов векто­ ра в последовательности, адэкватной правильной последова­ тельности отображённых через функцию соответствия управля­ ющих слов, с целью последовательного назначения ассоциа­ ций записей для выборки в правильную последовательность всех записей, содержащихся в каждой назначенной ассоциации.

Рассмотрим некоторые аспекты, позволяющие классифици­ ровать отобразительные алгоритмы упорядочения.

- 5 7 -

I . Функция соответствия. В простейшем случае ~,,1упорядо-

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

■>, , а для другого ^ , значение одного из них должно заме­ няться (например, вычитанием из наибольшего возможного значения этого поля) с целью сведения к единому отношению порядка. Значение поля, представленное числом с плавающей запятой, должно быть однозначно и в соответствии с его ве­ личиной отображено на последовательность целых чисел, ка­ ковыми являются номера элементов вектора. Для этого поле рассматривается как составное, старшей частью которого яв­ ляется порядок (кодировка его знака должна быть следующей:

плюс - " I " , минус - "О "), а младшей мантисса. Значения отрицательных порядков должны заменяться на значения, по­ лученные вычитанием модуля исходных из наибольшего модуля порядка.д0 ошс ПОр П0 лагал0 сь , что правильная последова­ тельность управляющих полей представлена монотонно возра­ стающей или убывающей последовательностью значений. Испо­ льзование нетривиальной функции соответствия при упорядо­ чении отображением позволяет сделать исключение из этого правила, расширяя возможности упорядочения.

Здесь возможны два варианта:

а)Таблично задана функция соответствия: она имеет


вид оглавления элементов вектора. Согласно значениям управ­ ляющих полей осуществляется прямой доступ к элементам огла­ вления, полные адреса которых линейно зависят от этих зна­ чений. Злемент оглавления, содержащий адрес элемента век­

тора, служит посредником между последним и значением поля

при его отображении на вектор. Пооледукхций за отображением записей просмотр элементов вектора производится в порядке монотонного изменения адресов элементов.

б) Полные адреса элементов вектора линейно зависят от

значений управляющих полей,но просмотр элементов вектора,

осуществляемый после -отображения всех записей, выполняется

в порядке,заданном списком типа Б - оглавлением вектора.

Например, в случае упорядочения слов, заданных в коде

"М2", по первым их буквам, слова, начинающиеся с буквы А,

имеющей код

?Одс ус ,

должны располагаться в начале прави­

льной последовательности. При этом

надо иметь в виду, что

часть букв

закодирована в коде "М2 "

большими, чем ?0 gc / c .

значениями,

а

часть -

меньшми. При использовании

варианта

а)

70-й (в

8

с / с ) по

номеру элемент оглавления,

к которо­

му осуществляется прямое обращение,

если олово начинается

о буквы А, содержит полный адрео I элемента вектора. Поэ­

тому

все слова, начинающиеся с А» отображаются на этот

элемент и, следовательно, попадут в начало правильной по­ следовательности. При использовании варианта б) слова, на­ чинающиеся с А, отображаются на 70-й по номеру элемент ве­ ктора, но поскольку 1 -й элемент оглавления, используемого при просмотре элементов вектора, содержит указание именно этого элемента вектора, все слова, начинающиеся с А, ока­ зываются опять-таки первыми в правильной последовательно­


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

П. Тип результирующего списка. Если результат упоря­ дочения должен быть представлен списком типа В и в исход­ ном списке допустимо существование записей с одинаковым значением управляющего слова ( записей—"синонимов" ) . отоб­ ражением каждой ассоциации таких записей является односш -

зный список, фиксаторы начала и конца которого являются содержанием элемента вектора, соответствующего ассоциации,

Первоначально списки пусты, т .е , содержимым каждого фикса­ тора конца является адрес фиксатора начала списка. В про­ цессе отображения записей на вектор они включаются в соот­ ветствующие списки, содержимое фиксатора конца которых со ­ ответственно изменяется. Такое задание ассоциаций записей предельно упрощает процесс последующего распределения мест в правильной последовательности: конец описка, соответст­ вующего начальной ассоциации записей, связывается с нача­ лом списка, соответствующего 2 -й по порядку ассоциации,

его конец - с началом следующего списка и т .д . В этом про-

цессе используется содержимое фиксаторов (происходит по­ следовательный просмотр вектора фиксаторов).

Если результат упорядочения должен быть задан списком тина А или Б, отображением ассоциаций записей являются счётчики числа записей в каждой ассоциации. Первоначально счётчики пусты. При отображении каждой записи на вектор к содержимому соответствующего счётчика прибавляется I . Про­ цесс распределения мест в правильной последовательности,

выполняемый после отображения всех записей, более сложен,


- 6 0 -

чем в предыдущем случае. Он выполняется в 2 этапа, первым

из которых является определение номера начальной позиции каждой из ассоциаций в правильной последовательности. Этот номер определяется суммой размеров всех ассоциаций, кото­ рые предшествуют данной в правильной последовательности.

В результате этого этапа вектор счётчиков преобразуется в вектор номеров начальных позиций. Вторым этапом является размещение всех записей в правильной последовательности.

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

В случае использования списка типа А отображение за­ писи на вектор позволяет извлечь номер её позиция в прави­ льной последовательности из соответствующего элемента век­ тора. При этом содержимое последнего увеличивается на I ,

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

алгоритм переходит к записи, находящейся на следующей по­ зиции. Поскольку однако найденная позиция в общем случае занята другой записью, производится обман местами в памяти этой записи и отображаемой записи. На> исходной позиции те­ перь оказалась запись, которая ещё не отображалась на век­ тор и в общем случае не занимает ещё окончательного поло­ жения. С нею осуществляются те же манипуляции, что и с ра­ цее находивгейся на данной позиции записью. Цепочка переме­ щений записей продолжается до тех пор, пока не будет уста­

- 6 f -

новлено, что обе участвовавшие в только что выполненном обмене записи заняли окончательное положение в последова­ тельности. После этого рассматривается запись, расположен­ ная на очередной позиции преобразуемого списка, и начина­ ется новая цепочка перемещений. Работа алгоритма прекра­ щается в момент, когда в качестве предполагаемой записи,

инициирующей новую цепочк„ перемещений, назначается записи расположенная на последнем месте списка. Записи, занявшие в процессе перемещений окончательное место, отмечаются спе­ циальным знаком для исключения их из дальнейшего рассмот­

рения.

В случае использования списка типа Б вышеописанная

процедура выполняется лишь с тем отличием, что вычисляют­

ся

номера мест

не

самих записей, а

номера мест их адресов

в

оглавлении, и

в

обменах участвуют

элементы оглавления.

Обращение к записям для их размещения в правильной после­ довательности происходит через оглат пение. Положение за­ писей в памяти остаётся неизменным.

Ш. Отобразительное упорядочение, результатом которо-

го является разбросанная таблица. При неограниченных ре­

сурсах оперативной памяти записи из любого набора записей

с непойгоряющимиоя значениями управляющих слов могут быть однозначно отображены на вектор памяти путём использования значения управляющего слова записи в качестве номера пози­ ции для её размещения. В результате размещения всех запи­ сей получается т .н . разбросанная таблица - список типа А,

в котором группы позиций,

занятых записями,

перемежаются

с пустыми позициями. Если

значения управляющих слов кратны,

т .е . могут повторяться в

нескольких

записях,

но максималь­

ная кратность известна, разбросанная

таблица

выполняется


как совокупность укрупненных позиций- ( надпозиций) . каждая

из которых может вместить количество записей, равное макси­

мальной кратности. Для помещения в надпозицшо очередной записи находится ближайшая к началу надпозиция пустая по­

зиция. Дрд ограничении ресурсов оперативной памяти для по- <•

лучения номера позиции может быть использована старшая

часть управляющего олова, имеющая соответствующую разряд­ ность. В этом случае номер позиции, вычисляемой для разных

заш оей, может оказаться одинаковым. Такие записи также

именуются синонимами. В частности, синонимами оказываются

заш ей с полностью одинаковыми управляющими словами. Для

размещения синонимов в правильной последовательности необ­ ходимо использование специальной процедуры, исключающей возможность их "затирания". Применение этой процедуры тре­

бует, чтобы число позиций было не меньше числа размещаемых

записей и чтобы занятые позиции отмечались специальным зна­ ком (совокупность этих элементов по всем записям образует двоичный вектор занятости позиций).

Разбросанные таблицы удобны для представления дйцрмя-

ческих правильных последовательностей.(Сравни с дихотомиче­ скими деревьями).

1У. Представление элементов вектора. Характер элемен­

тов вектора значений, *с одной стороны, определяется типом

используемого списка, а с другой стороны, характером расп­

ределения значений управляющих слов по числовой оси, харак­ тером элементов данных. Рассмотрим несколько случаев.

а) Имеется взаимно однозначное соответствие между

значениями управляющих слов записей и их

номерами в

прави­

льной последовательности. Список записей

- типа А,

записи

4'

 

 

- 6 3 -

имеют одинаковый размер,

В этом случае полный адрес записи является линейной

функцией её номера и в качестве вектора значений можно ис­ пользовать вектор позиций записей в исходном поле данных.

Для 1-й записи исходного списка определяется её номер в

правильной последовательности. Эта запись и запись, нахо­ дящаяся по вычисленному номеру в исходном списке, обмени­ ваются позициями. Вновь для записи, расположенной на !тй

позиции списка, определяется её номер в правильной после­ довательности и происходит обмен позициями между соответ­ ствующими записями и т . д . , вплоть до тех пор, пока вычис­ ленный номер не совпадёт с номером позиции, где уже нахо­ дится запись, т .е . с единицей. Аналогичные действия выпол­ няются затем для 2 -й позиции списка и т . д . , вплоть до предпоследней (включительно). Данный алгоритм не треоует использования резерва памяти, но во: можен также вариант с формированием правильной последовательности на свобод- .

ном поле

памяти без изменения исходного описка.

б)

Записи представляют собой простые коды, значения

которых

не повторяются. Список записей - типа А.

Каждой записи приводится в соответствие элемент век­

тора, представляющий двоичный разряд, таким образом, что

значение записи является полным адресом элемента. В нача­ ле работы алгоритма элементы вектора приводятся в нулевое состояние. В результате отображения каждой запиои в соот­ ветствующий ей элемент вектора заносится I . При последую­ щем просмотре элементов вектора для каждого его единично­ го элемента с помощью функции, обратной функции соответст­ вия, воспроизводится значение записи и помещается на оче-