- •Аннотация к вопросам для Госэкзаменов по Информационным Системам и Вычислительным процессам
- •1. Модели данных 4
- •2. Прикладные системы 10
- •3. Анализ и проектирование систем 25
- •4. Коллективная разработка систем 35
- •5. Архитектура систем 38
- •6. Программирование 42
- •7. Формальные языки и методы трансляции 44
- •8. Методы распределения памяти и доступа к данным 51
- •9. Сети Петри 57
- •1. Модели данных
- •1.1. Концептуальная и логическая модель данных. Модель «сущность связь» (er-модель)
- •1.2. Полная функциональная зависимость. Вторая нормальная форма (2нф). Приведение отношения к 2нф
- •1.3. Транзитивная зависимость. Третья нормальная форма (3нф). Приведение отношения к 3нф
- •1.4. Операции реляционной алгебры: булевы операции, операции выбора, проекции, соединения, деления
- •1.5. Операторы расщепления и фактора. Их применение для организации работы с распределенными данными
- •1.6. Транзакции в базах данных Понятие транзакции
- •Принципы транзакций (acid)
- •Модели транзакций
- •2. Прикладные системы
- •2.1. Классификация современных программных прикладных систем
- •2.2. Требования к качеству прикладных программных систем: адекватность технологии, удобство использования, устойчивость, сопровождаемость, защищенность, переносимость
- •Адекватность технологии предметной области
- •Удобство использования
- •Сопровождаемость
- •Устойчивость
- •Защищенность
- •Переносимость
- •2.3. Условия и способы тиражирования прикладных программных систем
- •2.5. Жизненный цикл программных систем. Этапы жизненного цикла
- •2.6. Модели жизненного цикла – каскадная, поэтапная, спиральная, инкрементная. Области их применения
- •2.7. Средства автоматизации проектирования (case-средства)
- •2.8. Оценка параметров программной системы. Мера, метрика. Анализ риска Оценка параметров программной системы
- •Мера и метрика
- •Анализ рисков и первичная оценка
- •2.9. Размерно-ориентированные метрики: правила оценивания, область применимости
- •Выполнение оценки проекта
- •Пример оценки проекта
- •Достоинства и недостатки
- •3. Анализ и проектирование систем
- •3.1. Анализ требований, его роль в жизненном цикле создания программной системы. Основные задачи анализа требований. Системный структурный анализ
- •3.2. Методология sadt (idef0). Ее реализация в case-средстве bPwin
- •Использование case-средства bPwin для построения idef0-модели
- •3.3. Моделирование потоков данных и процессов их обработки. Построение диаграмм потоков данных
- •Диаграммы потоков данных
- •Диаграммы потоков данных в методологии Гейна-Сарсона
- •Использование case-средства bPwin для построения дпд
- •4. Коллективная разработка систем
- •4.1. Обоснование необходимости. Проблемы. Типы коллективов программистов Проблема
- •Профессиональные особенности
- •Типы коллективов программистов
- •Традиционная бригада
- •Бригада без персонализации
- •Бригада главного программиста
- •4.2. Условия работы коллективов программистов: физическая, социальная, административная обстановки
- •Стимулы
- •4.3. Взаимодействие участников программного проекта. Их роли в коллективе разработчиков Профессиональные особенности
- •Технические роли в бригаде
- •Психологические роли в бригаде
- •5. Архитектура систем
- •5.1. Причины декомпозиции программы на модули (содержательные и технические аспекты). Декомпозиция как способ борьбы со сложностью
- •5.2. Модуль, его информационная закрытость. Интерфейс и реализация. Связность модуля, уровни связности
- •5.3. Сцепление модулей, уровни сцепления. Модели управления модульной системой
- •6. Программирование
- •6.1. Объектный подход к программированию. Объект и класс. Инкапсуляция, наследование, полиморфизм. Абстрактные и интерфейсные классы
- •6.2. Классы в современных системах программирования. Общие, собственные и защищенные области. Свойства, их назначение, описание и использование. Владелец и родитель класса
- •7. Формальные языки и методы трансляции
- •7.1. Право- и леволинейные грамматики. Регулярные (автоматные) грамматики. Регулярные множества и праволинейные грамматики
- •7.2. Автоматы с магазинной памятью (мп-автоматы). Детерминированные и недетерминированные мп-автоматы. Построение эквивалентного мп-автомата по кс-грамматике
- •7.3. Восходящий анализ кс-языков без возвратов. Lr(k)-грамматики. Грамматики простого предшествования. Алгоритм «перенос-свертка» для грамматики простого предшествования
- •7.4. Алгоритмы удаления пустых и недостижимых символов в кс-грамматике. Нормальные формы кс-грамматик (Хомского и Грейбах). Устранение левой рекурсии в грамматике
- •7.5. Компиляторы и интерпретаторы. Архитектура компилятора. Фазы и этапы компиляции. Препроцессоры
- •7.6. Дерево вывода для кс-грамматик. Восходящий и нисходящий синтаксический анализ. Алгоритм нисходящего разбора с возвратами
- •7.7. Промежуточные представления программ: атрибутно-синтаксическое дерево, триадное представление, тетрады, обратная польская запись. Байт-коды внутреннего представления (Java-код, p-код и др.)
- •7.8. Ll(k)-грамматики, соотношение классов ll(k). Множества first(k) и follow(k) и их построение. Разделенная грамматика
- •7.9. Метод рекурсивного спуска построения синтаксического анализатора
- •7.10. Способы описания синтаксиса языков программирования. Диаграммы Вирта, расширенная форма Бэкуса-Наура
- •7.11. Работа с регулярными выражениями в языках программирования (c#, php). Описание типов xml-документов с помощью грамматики (dtd)
- •8. Методы распределения памяти и доступа к данным
- •8.1. Простые методы динамического распределения памяти: стек, дек, список блоков постоянной длины
- •Простейшее распределение памяти
- •Выделение памяти блоками постоянной длины
- •8.2. Методы динамического распределения памяти, основанные на списках блоков переменной длины
- •8.3. Методы доступа к данным, основанные на индексах: индексно-последовательный и индексно-произвольный Индексные методы
- •Индексно-последовательный метод
- •Индексно-произвольный метод
- •8.4. Методы доступа к данным, основанные на инвертированных списках и битовых картах Инвертированные списки
- •Битовые карты
- •8.5. Алгоритмы хеширования, основанные на методах деления, умножения и деления многочленов Метод деления
- •Метод умножения
- •Деление многочленов
- •8.6. Алгоритмы разрешения коллизий в перемешанных таблицах, основанные на методах внешних и внутренних цепочек Метод внешних цепочек
- •Метод внутренних цепочек
- •9. Сети Петри
- •9.1. Определение и основные понятия сетей Петри. Структура, графы, маркировка Структура сетей Петри
- •Графы сетей Петри
- •Маркировка сетей Петри
- •9.2. Моделирование сетями Петри задач о производителе/потребителе и о чтении/записи Задача о производителе и потребителе
- •Задача о чтении/записи
- •9.3. Безопасность и ограниченность сетей Петри Безопасность
- •Ограниченность
- •9.4. Активность сетей Петри
- •9.5. Достижимость и покрываемость в сетях Петри
- •9.6. Дерево достижимости сети Петри. Алгоритм построения дерева достижимости Дерево достижимости
- •Алгоритм построения дерева достижимости
- •9.7. Применение дерева достижимости сети Петри для проверки безопасности и ограниченности.
- •9.8. Применение дерева достижимости сети Петри для проверки покрываемости
- •Литература Основная
- •Дополнительная
- •Формальные языки и методы трансляции
- •Методы доступа к данным и распределения памяти
- •Сети Петри
Деление многочленов
Пусть k записывается как k=2nbn+2n-1bn-1+…+2b1+b0, M=2m. Представим ключ в виде многочлена k(t)=bntn+ bn-1tn-1+…+b1t+b0 и определим остаток от деления его на многочлен c(t)=tm+cm-1tm-1+…+c1t+c0. Этот остаток, представленный в двоичной системе, и будет значением функции h(k). Если c(t) – простой неприводимый многочлен, то при условии близких, но неравных ключей k1 k2 выполняется h(k1) h(k2). Этот метод обладает сильным свойством рассеивания ключей.
Изложенные методы рассматривались в предположении, что k – целое положительное число. Но их несложно распространить и на символьный ключ. Достаточно лишь разбить его на отрезки достаточной длины и сложить их двоичные представления. Недостаток этого метода – он слабо чувствителен к порядку символов. Избавиться от этого недостатка позволит циклический сдвиг ключа.
8.6. Алгоритмы разрешения коллизий в перемешанных таблицах, основанные на методах внешних и внутренних цепочек Метод внешних цепочек
Для реализации метода внешних цепочек вместо ключа в строку хеш-таблицы размещается ссылка на начало линейного однонаправленного списка, в который записывается ключ и связанные с ним данные. Список располагается в памяти, внешней по отношению к таблице. При размещении элемента адресная функция указывает на строку хеш-таблицы. Если строка пуста, в нее записывается адрес начала списка, а в первое его звено помещаются данные. Если строка непуста, регистрируется коллизия, синоним записывается в очередное звено списка. При поиске ключа проверяется соответствующая строка таблицы. Если она пуста, поиск неудачен, в противном случае ключ ищется в списке.
Метод внутренних цепочек
Метод внутренних цепочек отличается тем, что список строится внутри самой хеш-таблицы. Для этого строка таблицы дополняется полем для ссылки на элемент этой же таблицы. При возникновении коллизии в таблице каким-то способом ищется свободное место, в него размещаются данные, а ссылка на это место записывается в строку, на которую указывала хеш-функция. При каждой следующей коллизии список удлиняется аналогичным образом. Этот метод имеет ту неприятную особенность, что построенные таким способом цепочки имеют тенденцию срастаться. Предположим, хеш-функция обрабатывает ключ, который не имел синонимов, но при попытке записать данные в таблицу выясняется, что там уже что-то есть. В чем дело? Оказывается, при разрешении какой-то предыдущей коллизии это место было использовано как свободное на тот момент. Тогда текущие данные запишутся в тот же список, хотя ключ и не синоним тому, который этот список породил. Итак, два независимых списка срослись, что увеличило время поиска как по первой группе синонимов, так и по второй. Этого можно избежать, переместив чужой ключ на свободное место, но такая работа требует затрат. Этот метод называется еще методом срастающихся цепочек.
9. Сети Петри
9.1. Определение и основные понятия сетей Петри. Структура, графы, маркировка Структура сетей Петри
Определение. Сеть Петри – это четвёрка C=(P, T, I, O), где P = {p1, p2, … pn} – конечное множество позиций, T = {t1, t2, … tm} – конечное множество переходов, PT=, I: T P: – входная функция, O: T P: – выходная функция. Входная и выходная функции отображают переходы в комплект позиций.
Позиция pi – входная для перехода tj, если pi I(tj) и выходная, если pi O(tj). Кратность входной позиции pi для перехода tj – это #(pi, I(tj)). Кратность выходной позиции pi для перехода tj – это #(pi, O(tj)).
Определение. Переход tj – вход позиции pi, если pi – это выход tj, и наоборот, tj – выход позиции pi, если pi – это вход tj.
Определение. Расширенная входная функция дополняет входную функцию следующим образом: I: P T, расширенная выходная функция – O: P T :, причём, #(tj, I(pi)) = #(pi, O(tj)) и #(tj, O(pi)) = #(pi, I(tj)).
Если обычная входная или выходная функции отображает переходы в комплекты позиций, то в расширенной добавляется отображение позиций в комплект переходов.
Пример
Определим сеть Петри C=(P, T, I, O).
P=(p1, p2, p3, p4, p5);
T=(t1, t2, t3, t4);
Входные и выходные функции переходов:
-
tj
I(tj)
O(tj)
t1
{p1}
{p2, p3, p5}
t2
{p2, p3, p5}
{p5}
t3
{p3}
{p4}
t4
{p4}
{p2, p3}
Расширение входной и выходной функции:
-
pi
I(pi)
O(pi)
p1
{ }
{t1}
p2
{t1, t4}
{t2}
p3
{t1, t4}
{t2, t3}
p4
{t3}
{t4}
p5
{t1, t2}
{t2}
Для построения расширенной входной функции выбираются последовательно все позиции pi P и для них просматриваются все значения выходной функции. Если есть такие tj, что pi O(tj), они и формируют комплект I(pi). То есть, I(pi)={tjT | pi O(tj)}.
Конец примера
Заметим, что в определении сети Петри с расширенными функциями есть избыточность. Действительно, достаточно лишь одной, входной или выходной, функции. Доказательство эквивалентности такого определения исходному предоставляется слушателям.
В работе [2-Котов] приведено другое, но тоже эквивалентное определение сети Петри.
Определение. Сеть – это тройка (P, T, F), где
P – непустое множество элементов сети, называемое местами,
T – непустое множество элементов сети, называемое переходами,
F PT TP – отношение инцидентности, и для (P, T, F) выполняются следующие условия:
А1) PT=;
А2) (F) & (xP T, yP T: xFy yFx);
А3) если для элемента сети x обозначить *x = {y | yFx} множество его входных элементов, а x* = {y | xFy} множество его выходных элементов, то
p1, p2 P: (*p1=*p2) & (p1*=p2*) (p1=p2).
Конец определения.
Понятно, что в этом определении места – это позиции, а отношение F соответствует какой-то из обобщённых функций. В некотором смысле это определение проще и строже, но мы, тем не менее, будем следовать изложению, данному в [1- Питерсон].
