Понятие о структурах данных
Отношение B - некоторое подмножество декартового произведения
C = A1 A2 ... An, выделяемое некоторыми оператором, условием, функцией.
B = F ( A1, A2, ..., An )
Отношения бывают унарные, бинарные, тернарные, …, n-арные.
Свойства бинарных отношений:
-
рефлексивность;
-
симметричность;
-
транзитивность.
Операции: объединение; пересечение; вхождение; поиск; добавление; исключение.
Ключ - особая характеристика записи, позволяющая однозначно идентифицировать всю запись. Ключи бывают простые и составные. Если ключ состоит из одного элемента, то это простой. Ключи вводят на множестве записей определенного отношения.
Метод доступа к элементам совокупности определяет порядок обработки элементов совокупности. Есть прямой (элемент совокупности обрабатывается независимо от другого) и последовательный (у каждого элемента есть последующий и предыдущий) методы доступа.
Способ адресации элементов совокупности определяет стратегию взаимного расположения элементов в памяти или называется организация совокупности.
Структура данных - это организованная совокупность данных, решающая задачи адресации и доступа к элементам данных. Структуры данных бывают статические (меняются только значения элементов данных) и динамические (меняются связи, данные, расположенные в памяти).
Операции над структурами данных:
-
создание, формирование образа структуры данных в памяти;
-
определение значения элемента данных (селекция);
-
корректировка, добавление, замена, исключение;
-
обработка структуры данных, выборка элементов структуры в некотором заданном порядке и выполнение над ними нужного алгоритма;
-
уничтожение, освобождение памяти и разрыв связей
Задача поиска: по заданному поисковому значению Ко требуется определить подмножество элемента структуры, для которого значение элемента данных удовлетворяет критерию поиска.
Критерии поиска:
а) поиск по совпадению { i / ki = ko };
б) поиск ближайшего { i / /ki - ko/ - min }
если ki = - - поиск наименьшего
в) интервальный поиск { i / k1< ki < k2 }
г) поиск по условию { i / f (ko, ki) = 0 }
Результатом поиска является информация о месте нахождения искомого элемента.
Процесс перехода от предметной области к информа-ционной модели называется изучением предметной области. Итог процесса изучения - это постановка задачи.
Переход от модели к области логических данных называется проектированием. Итог проектирования - проект структуры.
Алгоритмический язык описывает структуру данных и алгоритмы их обработки.
Язык программирования описывает представление данных и программы их обработки. Этот процесс охватывает проект и реализацию. Итог - готовая программа с документа-цией, описывающей реализацию.
Каждая структура данных ( СД) характеризуется набором операций, которые с ней можно выполнять (поведение СД) и стратегией размещения элементов структуры в памяти (представление СД). Поэтому каждая структура данных имеет:
а) внешнее описание, т.е. описание свойств структуры и описание набора операций;
б) внутреннее представление, т.е. реализацию операций, описание стратегии взаиморасположения.
Важно, чтобы внутреннее представление соответствовало внешнему описанию.
Классификация структуры данных:
-
последовательная структура данных, при этом адресация и доступ последовательны
а) длины элементов одинаковы;
б) длины элементов различны: используется метод разделителей
-
вычисляемый доступ;
-
вычисляемый доступ с вынесенным дискриптором: все длины собирают отдельно от самих элементов;
-
базированный метод доступа: хранятся не просто длины, а наполненные длины;
-
координатный прямой доступ: в качестве элементов в дискрипторе хранятся абсолютные адреса.
Понятие о данных.
Данные – это изображение информации.
Информация – это активная, а данные – это пассивная. С каждым языком представления данных связан язык интерпретации, преобразование из данных в информацию.
Язык представления интерпретации данных имеет алфавит 1,2...n.
Информация поступает в виде сообщения, где символ языка есть символ из этого алфавита S=S1S2...Sn, где Sn=.
Сообщение состоит из слов, и говорят, что каждое слово изображает атрибут информации и является наименьшим неопределенным атрибутом информации. Строку S наз. логическим уровнем представления данных.
Si хранилось в виде кода i т.е. в виде одного из устойчивых состояний. Физический уровень представления данных – это изображение данных в виде устойчивого состояния определенной среды или носителя.
Предметная область – это группа объектов с определенными свойствами, законами их взаимодействия, но только те которые существенны с точки зрения решаемой задачи. Язык информации модели, как правило, это язык математики.
Обзор основных структур данных.
Каждая СД характеризуется:
-
набором операций (поведением);
-
стратегия размещения элементов СД в памяти (представлением);
СД имеет:
-
внешнее описание; т.е. описание свойств структуры и описание набора операций;
-
внутренние представление; т.е. реализацию операций, описание стратегии взаиморасположения;
Классификация СД:
-
Последовательные СД (адресация последовательная, доступ последовательный ).
а) длины элементов одинаковы;
Aдрес ai=A+(i-1)*l;
б) длины элементов различны;
в) вычисляемый доступ;
Адрес ai=A+ lj
г) вычисляемый доступ с вынесенным дескриптором;
l1,l2,...ln; a1,a2,...an;
д) базированный метод доступа;
0, l1, l1+l2, bj ...
е) координатный прямой доступ;
-
Массив (адресация последовательная, доступ вычисления по индексам).
а)одномерный массив(вектор);
ai=A+(i-1)*l
б)двумерный массив (матрица);
а11 ... а1n
А= ............... (n*m)
An1 ... ann
1) Расположение в памяти по строкам;
A: an,...,a1m,a21,...,an1,an,...,amn
Aij=A+(i-1)m*l+(j-1)l=A+((i-1)m+(j-1))*l=A+(k-1)l
K=(i-1)m+j – приведенный индекс – это порядковый номер элемента относительно
начала массива.
2)Расположение по столбцам(Фортран);
K=(j-1)n+i – приведенный индекс;
в)трехмерный массив;
aijk
Определение: массив это набор однотипных элементов, занимающих непрерывный участок памяти и доступ к элементам которого осуществляется вычисляемой по индексам.
Реализация массивов в ЯВУ(язык высокого уровня) различны:
-
Статические массивы(Паскаль, Фортран); размерность определяется во время
компиляции и не может быть изменена при выполнении;
-
Массивы с регулируемой размерностью(Алгол-60); размерность можно вычислить,
но это возможно только во внутреннем блоке;
-
Массивы с подвижными границами(CLU, Алгол-68); размерность измеряется
динамически с помощью операций: add, addl – удлинить; remh, reml - укоротить.
3)Списки – структура с последовательной обработкой и произвольным размещением.
(адресация произвольная, доступ -последовательный);
Списки бывают:
-
однонаправленные;
-
двунаправленные;
-
кольцевые(одно- и двух- направленные);
-
многоуровневые;
4)Таблицы(адресация произвольная, доступ –по ключу.
A=F(k); k-ключ; функция хемирования(расстановки, рантолизации );
а)открытая адресация(линейное апробирование);
двойное хемирование:
f1(k) u f2(k)
f(k), f(k)+1, ... n, 0, 1, ... f(k);
б)метод цепочек:
1)f(k)=k mod m;
2)метод усечения;
Свойства функции хемирования;
-
быстрое вычисление;
-
минимизированное число композиций;
5)Дерево(доступ на основе выбора функции пути, адресация произвольная ).
У дерева есть корень и листья.
корень
листья
6)Сеть – это любой произвольный граф. (доступ на основе выбора функции пути, адресация произвольная).
Понятие о данных.
Данные – это изображение информации.
Информация – это активная, а данные – это пассивная. С каждым языком представления данных связан язык интерпретации, преобразование из данных в информацию.
Язык представления интерпретации данных имеет алфавит 1,2...n.
Информация поступает в виде сообщения, где символ языка есть символ из этого алфавита S=S1S2...Sn, где Sn=.
Сообщение состоит из слов, и говорят, что каждое слово изображает атрибут информации и является наименьшим неопределенным атрибутом информации. Строку S наз. логическим уровнем представления данных.
Si хранилось в виде кода i т.е. в виде одного из устойчивых состояний. Физический уровень представления данных – это изображение данных в виде устойчивого состояния определенной среды или носителя.
Предметная область – это группа объектов с определенными свойствами, законами их взаимодействия, но только те которые существенны с точки зрения решаемой задачи. Язык информации модели, как правило, это язык математики.
Обзор основных структур данных.
Каждая СД характеризуется:
-
набором операций(поведения);
-
стратегия размещения элементов СД в памяти(представления);
СД имеет:
-
внешнее описание; т.е. описание свойств структуры и описание набора операций;
-
внутренние представление; т.е. реализацию операций, описание стратегии взаиморасположения;
Классификация СД:
-
Последовательные СД (адресация последовательная, доступ последовательный ).
а)длины элементов одинаковы;
Aдрес ai=A+(i-1)*l;
б)длины элементов различны;
в)вычисляемый доступ;
Адрес ai=A+ lj
г)вычисляемый доступ с вынесенным дескриптором;
l1,l2,...ln; a1,a2,...an;
д)базированный метод доступа;
0, l1, l1+l2, bj ...
е)координатный прямой доступ;
-
Массив (адресация последовательная, доступ вычисления по индексам).
а)одномерный массив(вектор);
ai=A+(i-1)*l
б)двумерный массив (матрица);
а11 ... а1n
А= ............... (n*m)
An1 ... ann
1) Расположение в памяти по строкам;
A: an,...,a1m,a21,...,an1,an,...,amn
Aij=A+(i-1)m*l+(j-1)l=A+((i-1)m+(j-1))*l=A+(k-1)l
K=(i-1)m+j – приведенный индекс – это порядковый номер элемента относительно
начала массива.
2)Расположение по столбцам(Фортран);
K=(j-1)n+i – приведенный индекс;
в)трехмерный массив;
aijk
Определение: массив это набор однотипных элементов, занимающих непрерывный участок памяти и доступ к элементам которого осуществляется вычисляемой по индексам.
Реализация массивов в ЯВУ(язык высокого уровня) различны:
-
Статические массивы(Паскаль, Фортран); размерность определяется во время
компиляции и не может быть изменена при выполнении;
-
Массивы с регулируемой размерностью(Алгол-60); размерность можно вычислить,
но это возможно только во внутреннем блоке;
-
Массивы с подвижными границами(CLU, Алгол-68); размерность измеряется
динамически с помощью операций: add, addl – удлинить; remh, reml - укоротить.
3)Списки – структура с последовательной обработкой и произвольным размещением.
(адресация произвольная, доступ -последовательный);
Списки бывают:
-
однонаправленные;
-
двунаправленные;
-
кольцевые(одно- и двух- направленные);
-
многоуровневые;
4)Таблицы(адресация произвольная, доступ –по ключу.
A=F(k); k-ключ; функция хемирования(расстановки, рантолизации );
а)открытая адресация(линейное апробирование);
двойное хемирование:
f1(k) u f2(k)
f(k), f(k)+1, ... n, 0, 1, ... f(k);
б)метод цепочек:
1)f(k)=k mod m;
2)метод усечения;
Свойства функции хемирования;
-
быстрое вычисление;
-
минимизированное число композиций;
5)Дерево(доступ на основе выбора функции пути, адресация произвольная ).
У дерева есть корень и листья.
корень
листья
6)Сеть – это любой произвольный граф. (доступ на основе выбора функции пути, адресация произвольная).
Понятие о типе данных.
Тип данных понимается как класс переменных , могут заменять друг друга в некоторых контекстах.
Понятие типовой безопасности: Цель контроля типов состоит в том, чтобы гарантировать, что фактическое использование объектов, как данных совместимо с установленным для них поведением, ассоциированных с типом их объекта.
Контроль типов должен обеспечит надежность программ.
Тип данных определяется по существу двумя свойствами:
-
поведением объекта, рассматриваемого типа;
-
структурным описанием, определяет представление объектов этого типа;
-
(не обязательно) множество объектов рассматриваемого типа;
Под типом объекта понимается:
-
само множество объектов;
-
существенные свойства, т.е. представление объектов этого множества;
-
набор операций обеспечивающий доступ к объектам и позволяющий использовать их свойства;
Тип – это не объект, а атрибут; или может быть объектом, существующим в период компиляции. Такой подход дает нам преимущества:
-
напоминает, что представление типов данных (в период компиляции) извлеченное из спецификации этого типа имеет решающее значение для эффективности (в период компиляции) контроля типов;
-
дает основу для классификации механизмов типов данных в ЯВУ.
Концепция типов данных в языке Паскаль.
Тип определяется тройкой:
-
множество допустимых значений;
-
набор операций;
-
внутреннее представление;
Если тип данных встроен в язык, то он обеспечивает:
-
описание переменных;
-
взятие значений и присваивание;
-
сравнение значений;
-
обозначение констант;
-
выбор компонент(для структурированных типов):
Организация данных в Паскале основана на теории структурной организации данных Хоара:
-
Тип определяется как класс значений, могут принимать переменные или выражения;
-
Каждое значение принадлежит только одному типу;
-
Тип значения, константы, переменной, выражения можно ввести либо из контекста, либо из вида самого операнда;
-
Каждой операции соответствует некоторый фиксированный тип ее операндов и результат;
-
Для каждого типа свойства значений и элементарных операций можно задать с помощью аксиомы;
-
Все это позволяет обнаруживать в программе бессмысленные конструкции (это контроль типов) и решать вопрос о представлении данных и преобразованиях в вычислительных машинах.
Классы операций воспринимаемых в Паскале:
-
неявные приведения;
-
приведение типа выражения;
-
приведение типа переменных;
Классификация средств определения данных в ЯВУ.
1)Средства структурирования данных;
(Алгол-60, Фортран);
а)существует набор встроенных типов данных:
-
integer;
-
real;
-
boolean;
-
characted;
б)средства структурирования:
-
array;
-
record;
-
union;
-
pointer;
2)Средства определения типов(Паскаль, Алгол-68); можно связать со структурой данных некоторое имя.
Type
Int Array = array[1..100] of integer;
Var
A,B:integer;
Два объекта считаются эквивалентными в языке Паскаль:
-
если описаны в одном операторе var;
-
если описаны одним идентификатором типа;
3)Абстрактные типы данных(АТД).
АТД – это, по существу, определение нового понятия в виде класса (одного или более) объектов с некоторыми свойствами и операциями. АТД предусматривает инкапсуляцию.
4)Средства ООП.
Симула 67 – язык программирования.
ООП – это методология программирования, основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией некоторого класса, а классы образуют иерархию на принципах наследуемости.
Структурные единицы:
-
объекты;
-
каждый объект является реализацией некоторого класса;
-
классы организованы иерархически;
Поколение языков программирования.
Первое поколение ЯП: массивы, записи – не имели средств определения новых типов данных (Алгол-60, Фортран);
Второе поколение ЯП: появились средства определения новых типов данных, но не было средств связанных абстрактных типов (Алгол-68, Пасколь);
Третье поколение ЯП: связано с появлением АТД (Симула-67, Concurrent Pascal, CLU, Hephard, Modula);
Четвертое поколение ЯП: появились ООП языки (С++, Object Pascal).
Абстракция и декомпозиция.
Процесс разделения сложного на части, которые более простые, наз. декомпозицией.
Абстракция – создаются, в ходе программы, новые разработки, т.е. помогает осуществлять разумную декомбинацию.
Декомпозиция задачи предполагает разбиение задачи на подзадачи, причем:
-
каждая задача имеет один и тот же уровень рассмотрения;
-
каждая задача должна быть решена независимо от другой;
-
полученные решения могут быть объединены вместе и позволят решить исходную задачу.
Абстракция представляет собой эффективный метод декомпозиции, осуществляемый посредством изменения списка декомпозиции.
Абстракция – отвлечение от чего-то несущественного с целью лучше понять какую-то одну сторону изучаемого явления. Это метод создания новых понятий и обмена мыслями между людьми.
Абстрактные типы данных (АТД).
Абстрактные данные=<объекты, операции>
Новая языковая конструкция:
-
класс(Симула 67);
-
кластер(CLU);
-
форма(Alphard);
-
модуль(Modulo);
-
пакет(Ada);
В памяти АТД в наиболее развитой форме входят следующие 4 части (Alphard):
-
внешность определяемого типа (имя, операции, функции и т.д.);
-
абстрактное описание операций и объектов, с которыми работает определенный тип на языке спецификации;
-
конкретное описание тех же объектов и операций средствами языка второго поколения;
-
описание связей между 2 и 3;
Инкапсуляция – это упрятывание.
Тип данных называется инкапсулированным, если предусмотрена защита; тип данных наз. абстрактным, если предусмотрено абстрактное описание; тип данных наз. пакетированным, если предусмотрено средство определения объектов и операций в одной языковой конструкции.
В языке CLU:
<Имя определяемого типа>=Cluster is<Список операций>
rep
<конкретное описание представления объектов определяемого типа>
<<конкретное описание операций определяемого типа>>
end;
Cluster – это средство абстракции т.к.:
-
новое понятие вводится через набор операций;
-
внешнюю по отношению к Cluster программу можно считать абстрактной программой, оперирующей с абстрактными объектами, с помощью операций кластеров;
-
абстрактная программа не зависит от представления;
-
защита представления класса;
Свойства CLU:
-
группировка операций в тип поведения;
-
фиксация уровней абстракции;
-
независимость от представления;
-
защита.