Файл: Оперативные графические системы в автоматизации проектирования..pdf

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

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

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

Добавлен: 23.10.2024

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

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

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

Этот метод является менее эффективным, чем первый, так как требует большего числа проб на поиск элемента. Это происходит за счет того, что после нескольких «столкно­ вений» элементы имеют тенденцию группироваться, так как вероятность столкновения элементов в ячейке с ад­ ресом /+1, если ячейка с адресом I уже занята, стано­ вится больше средней вероятности по всей таблице.

ДАННЫЕ

АДРЕСА СВЯЗИ

ТАБЛИЦА ЭЛЕМЕН­

ТОВ

ИДЕНТИ­ ФИКАТОР

Рис. 6.4. Связь элементов в список при формировании таблицы

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

Когда необходимо определить, находится ли элемент с данным идентификатором в таблице, по идентифика­

168

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

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

1) если ячейка с этим адресом окажется свободной, то новый элемент помещается в ней;

2) если ячейка занята заголовком списка, связыва­ ющего все элементы с одинаковыми вычисленными адре­

сами, то любым

методом

ищется незанятая ячейка и в

ней размещается

новый

элемент; затем новый элемент

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

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

Принципиальным недостатком данного метода явля­

ется необходимость передвижки элементов,

что влечет

за собой усложнение программ.

среднему

Сравнивая вышеприведенные методы по

числу проб, необходимых для поиска свободной ячейки, в которую требуется поместить новый элемент, можно заключить, что:

1) в том случае, если таблица свободна или только начала заполняться, существует малая вероятность «столкновений» и среднее число проб во всех методах близко к нулю;

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

Ряд сложных структур данных, построенных на осно­ ве метода кодирования по идентификатору в сочетании

169



со списочной организацией, а также язык

LEAP, раз ра­

бота ниып с использованием этого метода,

применяются в

графических системах [5, 6].

 

6.3. СПИСОЧНАЯ СТРУКТУРА ДАННЫХ

Рассмотренные

в

предыдущих параграфах способы

организации данных

в

определенных случаях являются

эффективными как по расходу времени па поиск элемен­ тов, так и по затратам памяти для хранения их. Однако для задач, связанных с динамическим изменением моде­ ли, такие структуры оказываются неэффективными. Наплучшнп результат в этом случае дает исполь­ зование списочной структуры данных (с. с. д.), элементы которой располагаются произвольно в памяти ЭВМ п соединяются между собой при помощи адресов связи.

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

Семантику с. с. д. можно наглядно описать с помощью аппарата теории графов, представляя список направлен­ ным графом [7, 8]. Графом списочной структуры G=(X, Г) называется пара, состоящая из непустого множества вершин X и отображения Г множества X в X, представля­ ющего собой множество направленных дуг Н= {«/,}, ко­ торые соединяют между собой пары вершин графа. Мно­ жество вершин A={a'i, а'2, л'з, ..., Хи) такого графа отобра­ жают элементы или блоки данных, а дуги — связи эле­ ментов пли блоков.

По сложности организации и возможностям примене­

ний с. с. д. можно

разделить на простые и сложные.

К простым с. с. д.

относятся цепные и узловые списки.


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

Цепные списки. Определение цепного списка. Цепной

список определяется

конечным

направленным

графом

G=( A, U), последовательность

дуг которого

U— {u\,

 

а

 

 

 

д

 

 

Ц Е П

Ь

 

9

--- —©----—®----

 

Рмс. 6.5. Цепной список: а — представление цепного списка символов; б — граф цепного списка

Рис. 6.6. Представление цепного списка символов в памяти (несколь­ ко слов на блок)

а-2, .... и/,} образует единственный простой путь, а для вер­ шин справедливы следующие условия:

-----

1;

=

1.

Цепной список символов

(ЦЕПЬ)

и его отображение в

виде направленного графа представлены на рис. 6.5, а, б. Представление цепного списка в памяти. В том слу­ чае если элементы данных и адреса связи размещаются каждый в отдельной ячейке, их можно поместить в двух последовательных ячейках. Тогда список символов (ЦЕПЬ) можно разместить в памяти так, как показано

на рис. 6. 6.

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

171


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

Рис. 6.7. Представление цепного списка символов в памяти (одно слово па блок)

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

Наиболее

часто в структурах с цепными списками в

качестве адреса связи последнего элемента списка уста­

навливается 0.

В этом случае ни один из элементов цеп­

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

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

два раза

(рис. 6.7)

по сравнению со структурой на рис.

6.6 [9].

 

 

 

 

 

Возможно и такое размещение элементов, при кото­

ром данные помещаются

в первую ячейку, а соответст­

вующий

адрес связи —в ячейку N+1, причем N не обя­

зательно равно 1. Такой метод позволяет

выполнить об­

работку

цепных

списков

с

помощью

языков типа

ФОРТРАН. При этом определяются два массива:

 

INTEGER ELEMENT (5000),

 

 

 

POINTER

(5000),

 

172