Символы
Для дальнейшего понимания излагаемого материала введем некоторые правила обозначения категорий хранимых данных. Таблица 1
Уровень категорий | Представления реального мира | Абстрактные представления | Практическая реализация | ||
данные | символ | Хранимые данные | символ | ||
Наибольший | Предметная область | Библиотека | База данных | ||
Подмножество приложений | Файл | a | Список | А | |
Объект | Запись | аi | Ячейка | Ai | |
Имя атрибута | Имя поля | aij | Элемент | Aij | |
Наименьший | Значение атрибута | Значение поля |
Отношения положения
Для отображения динамики изменения ячейки или записи служат стенограммы, приведем их обозначения.
Содержимое ячейки. Ячейка содержит запись. Чтобы показать, какая именно запись находится в определенной ячейке, используют скобки, которые эквивалентны операции извлечения записи из ячейки. Например, запишем, что запись а содержится в ячейке А:
(А)=а. (4.1.1)
Местоположение записи. Обратная процедура: для данной записи найти содержащую ее ячейку. Эта операция записывается с помощью квадратных скобок. Например, покажем, что запись а содержится в ячейке А:
[а]==А. (4.1.2)
Пересылка. Перемещение данных обозначается стрелкой, направленной в сторону их нового местоположения. Например, пусть запись b помещается в ячейку D:
b->D. (4.1.3)
Пересылка записи, находящейся в ячейке Е, в ячейку F представляется как
(E)->F. • (4.1.4)
Чтобы показать, что запись g заменит запись h в ячейке, которую в данный момент занимает запись h, запишем:
g->[h]. (4.1.5)
Ключ. Каждая запись представляет объект. Объект распознается в предметной области по своим характеристикам и может быть выделен в ней среди других объектов. Аналогично этому мы должны найти способ выделения какой-либо записи среди других и, более того, полностью идентифицировать запись с объектом, который она представляет.
С этой целью в записи предусмотрено поле, называемое идентификатором или ключевым полем. Если для идентификации записи используется более одного поля, то такой случай рассматривается как специальный. Однако формирующие идентификатор поля можно перегруппировать в одно поле, сведя таким образом специальный случай к общему.
В дальнейшем ключевое поле мы будем называть просто ключом. Таким образом, ключ записи является значением ключевого поля и однозначно идентифицирует эту запись.
Обозначим ключевое поле для записи либо для элемента в ячейке, где располагается данная запись, индексом К, Например, аik является значением ключевого поля для записи ai. Оно находится в ячейке А = [ai] в позиции Аik == [аik].
Отношение порядка
Одним из наиболее важных свойств файла или списка является порядок, определяемый с использованием ключа каждой записи. Чтобы исследовать это свойство, разобьем значение ключа на образующие его литеры. Для этих литер, которые служат элементарными единицами представления, определим отношение порядка (или, как иногда говорят, последовательность упорядочений). То же отношение порядка должно сохраняться в коде представления информации в ЭВМ.
Например, мы можем установить следующие неравенства между литерами алфавита:
0<1< А<В<С<... <Z... и т. д. (4.1.6)
Чтобы ЭВМ выполняла требуемые нам операции, мы должны код для литеры А выбрать меньшим кода для литеры В и т. д. Эти соотношения в ЭВМ представлены комбинациями двоичных чисел коды таблицы ASCII. Двоичное число, представляющее А, меньше числа, представляющего В, т. е.
Аº065(10) =0100001(2), Вº066(10)= 0100010(2) 0100001(2) < 0100010(2), (4.1.4)
где знак º эквивалентен слову представляет.
Условие (4.1.6) удовлетворяется, если коды для десятичных цифр меньше кодов для букв. В результате 1 представляется шестнадцатеричной комбинацией 00011001, а Zº01011000(2). Таким образом,
Z=01011000(2), l=00011001(2), 00011001(2) <01011000(2). (4.1.8)
Ключевое поле образуется из нескольких литер. Оно может включать пробел, код которого равен 32(10).
Ранг записи
Утверждение о том, что одна запись меньше другой, является не вполне корректным, если сравниваются ключи этих записей, а не их длины. Тем не менее, для краткости мы воспользуемся этим определением, и будем считать, что ранг записи аi ниже ранга записи аj, если ключ (значение ключа) первой записи меньше ключа (значения ключа) второй записи, т. е. получаем:
аi < аj º (аi k)< (аjk) (4.1.10)
ОТНОШЕНИЯ
Нам постоянно придется иметь дело с отношениями, существующими между данными, ячейками и другими переменными. В настоящем разделе мы рассмотрим способы наглядного изображения этих отношений. Прежде всего, обсудим различные типы таких отношений, задавая вспомогательные средства их символического представления.
Отношение существует между двумя объектами. Обозначим эти объекты строчными буквами, например, а и b, а само отношение — буквой R. Тогда мы можем записать, что между а и b существует отношение R:
а R b. (4.2.1)
Например, R может выражать отношение “больше чем”. В этом случае формула (4.2.1) означает, что “а больше, чем b ”. Мы также можем ввести другие отношения, например “равно”, “предшествует”, “старше чем”.
Классификация отношений
Отношения можно разбить на: рефлексивные, симметричные и транзитивные.
Рефлексивные отношения. Говорят, что отношение рефлексивное, если оно устанавливается между одним и тем же объектом. Например,
a R a. (4.2.2)
Лишь немногие отношения являются рефлексивными. Так, отношение “равно” — рефлексивное, а отношение “старше чем” — нерефлексивное.
Симметричные отношения. Отношение считается симметричным, если оно применимо к элементам а и b при их рассмотрении как в данном порядке, так и в обратном:
a R b & b R а. (4.2.3)
Отметим, что для большинства отношений (но не для симметричных) важен порядок расположения элементов. Отношение “отличается от” является симметричным, так как два объекта отличаются друг от друга независимо от того, какой из них располагается первым. Вместе с тем это нерефлексивное отношение, так как нельзя сказать о каком-либо объекте, что он отличается сам от себя.
Многие отношения являются несимметричными (асимметричными). Простым примером может служить отношение “старше чем”.
Транзитивные отношения. Представим транзитивное отношение в символической форме:
a R b & b R cÞ a R c. (4.2.4)
Отсюда следует, что отношение R является транзитивным, если оно, существуя между а и b и одновременно между b и с, существует между а и с. Так, если Катя старше Гали, а Галя старше Изабеллы, то Катя старше Изабеллы.
На первый взгляд может показаться, что все отношения должны быть транзитивными. Однако это не так и примером тому может служить отношение “не равно”. Подставьте в таком отношении вместо а - 6, вместо b 5, а вместо с – 6 и вы увидите, что отношение “не равно” не является транзитивным (оно нетранзитивное), иначе вам придется признать, что 6 не равно 6.
Графы
Необходимым условием текстуального описания является последовательное изложение. Действительно, при чтении книги мы последовательно переходим от одного предложения к другому. Возможен, однако, альтернативный способ представления, при использовании которого не требуется выполнять этот процесс последовательно (как в случае запрограммированного обучения). Здесь будет рассматриваться множество объектов и отношений, которые устанавливаются между ними. Каким образом мы сможем описать эти отношения одновременно? Решить эту проблему нам поможет граф.
Рис 4.1. Граф |
Граф дает наглядное изображение, как объектов, так и отношений между ними. Более того, он позволяет рассматривать их в любой последовательности. Таким образом, граф обеспечивает способ представления без последовательного (во времени) просмотра, присущего тексту,
Граф состоит из ряда вершин и ребер. Он должен содержать, по крайней мере, одну вершину. Ребро является отрезком прямой, вершина —точкой. Для каждого ребра также должна существовать вершина, которая его завершает. Пример графа показан на рис. 4.1.
Вершины графа представляют объекты, а ребра — отношения между этими объектами. Так как отношение существует между двумя объектами, естественно, что в графе каждое ребро имеет две терминальные вершины.
Математики рассматривают граф как нечто абстрактное. Мы же, вкладывая в понятие “ребра” и “вершины” смысловую нагрузку, получаем полезную концепцию для представления данных.
Направление
Выше уже обсуждались симметричные отношения, такие, как “равен”, “следующий”, “родной брат”. Эти отношения не определяют направления; они устанавливаются между элементами без указания на то, какой из них задается первым. Симметричные отношения легко представить с помощью рассмотренного только что графа. В данном случае ребро отображает симметричное отношение, а вершины — объекты, к которым это отношение применяется.
Асимметрия
Отношение называется асимметричным, если между а и b оно существует, а между b и а - нет. В качестве примера можно привести отношения “больше чем”, “отец”, “дядя”. Направление определяет, какой объект служит подлежащим, а какой дополнением по отношению к глаголу, выражающему отношение. Здесь важно определить объект, который устанавливается первым. Так, мы говорим, что Максим — отец Валеры, но обратное утверждение неверно: Валера не отец Максима. Ребро графа не показывает, какой из объектов упоминается первым.
Орграф
Для указания подлежащего и дополнения ребру придается ориентация. Такое ребро в дальнейшем мы будем называть дугой. Дуга изображается в виде стрелки, направленной от подлежащего к дополнению. Граф, в котором задана ориентация, называется ориентированным графом или орграфом. В орграфе дуги по-прежнему связывают вершины (рис. 4.2),