
- •1 3(1) . Линейное программирование. Симплекс-метод. Привести числовой пример решения задачи линейного программирования симплекс-методом с использованием симплекс-таблиц.
- •2 3(3) . Свойства бинарных отношений. Рефлексивность, симметричность, транзитивность, иррефлексивность, антисимметричность, интранзитивность.
- •3 3(5) .Последовательная и связанная память. Представление линейных списков в последовательной и связанной памяти. Достоинства и недостатки того и другого представления
- •Логическое высказывание и его свойства. Логические операции (связки). Формализация логических суждений.
- •Машина Тьюринга, ее структура и свойства. Проблема остановки мт.
- •3 8(5) .Понятие обхода дерева. Виды обходов двоичного дерева. Определение структуры двоичного дерева по двум заданным обходам. Рекурсивные алгоритмы обходов двоичных деревьев.
- •1 16(1) . Цикломатика графов. Цикломатическое число. Цикломатический базис. Связь циклов графа с цикломатическим базисом.
- •2. Процессы в операционных системах. Общие понятия. Ресурсы процесса. Создание и уничтожение процесса.
- •3. Xml базы данных. Dtd и xml Schema
- •1 19(1) . Условная вероятность события. Формула полной вероятности и формула Байеса. Независимость событий (попарная и в совокупности). Примеры. Условная вероятность
- •Независимость событий
- •Формула полной вероятности
- •Теорема гипотез (формула Байеса)
- •2 19(4) . Логическое высказывание и его свойства. Логические операции (связки). Формализация логических суждений.
- •3 19(6) . Операционная система. Функции, назначение. Многопользовательские системы. Мультипрограммные системы.
- •1. Условная вероятность события. Формула полной вероятности и формула Байеса. Независимость событий (попарная и в совокупности).
- •1Нф (Первая Нормальная Форма)
- •2Нф (Вторая Нормальная Форма)
- •3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •К 43(6) лассы бинарных отношений. Отношение порядка и его свойства.
- •3 43(7) .Структура языка sql. Оператор select. Типы соединений таблиц.
3 3(5) .Последовательная и связанная память. Представление линейных списков в последовательной и связанной памяти. Достоинства и недостатки того и другого представления
Линейный список - множество, состоящее из n>=0 элементов (узлов), структура которого ограничивается их одномерным (линейным) относительным положением, определяемым свойствами: *если n>0, Node1 - первый узел; *если 1<i<n, Nodei, i-му узлу предшествует Nodei-1, следует Nodei+1; *Noden - последний узел списка; *n=0 - список пуст.
Для представления линейного списка можно использовать массив (в непрерывной памяти) или ссылочную структуру, называемую связным списком (в связанной памяти).
Наиболее простой и естественный способ хранения линейного списка в памяти компьютера заключается в расположении элементов в последовательных ячейках, при котором один узел списка следует сразу же за другим. При этом справедливо:LOC(X[j+1]) = LOC(X[j])+с. где c - размер одного узла. LOC(X[j])=L[0] +cj, L[0] -константа, которая называется базовым адресом, т.е. адресом некоего узла X[0].
Последовательное распределение (представление) очень удобно для работы со стеком. Для этого достаточно иметь переменную T, которая называется указателем стека. Если стек пуст, то T=0. Для ввода нового элемента Y в стек следует выполнить такие действия:T←T+1; X[T]←Y.
если стек не пуст, можем положить Y равным верхнему узлу и удалить этот узел, выполнив:Y ← X[T]; T←T-1;
С учетом ограниченных размеров памяти, выделенной под стек, обработка стека в последовательной памяти выглядит следующим образом:
X<=Y (вставка в стек) : T←T+1; если T>M, то переполнение памяти!!! (OVERFLOW) X[T]←Y. |
X=>Y (удаление из стека) : если T=0, то нечего удалять. (UNDERFLOW) Y ← X[T]; T←T-1; |
Представление очереди и дека организовано несколько сложнее. Для этого используются два указателя: F и R (для начала и конца очереди), где F=R=1, если очередь пуста. Так же, память, выделенная под очередь, можно представить в виде некоторого замкнутого кольца из M узлов: X[1], X[2], …, X[M], в котором X[1] следует за X[M]. Тогда две основные операции при работе с очередью выполняются следующим образом:
X=>Y (удаление из очереди) : Если F=R, то UNDERFLOW; Если F=M, то F ←1, в противном случае F←F+1; Y←X[R]. |
X=>Y (удаление из стека) : если T=0, то нечего удалять. (UNDERFLOW) Y ← X[T]; T←T-1; |
В
L0 – базовый адрес;
с – размер узла;
A,B,C,D – произвольные адреса памяти;
0-пустая связь.
3(6)
В программе, в которой для хранения данных используется связанное распределение, необходимо использовать переменную или константу связи, которая будет указывать на адрес А. При этом, все другие элементы могут быть найдены с помощью этого адреса. Схематически связи обычно изображаются в виде стрелок, так как расположение узлов в памяти обычно не имеет никакого значения.
First – это переменная
связи, которая указывает на первый узел
списка.
Так же как и в случае последовательного распределения приведем алгоритмы операций записи и удаления элемента из стека и очереди, реализованных на связанной памяти.
X<=Y (вставка в стек) : P<=AVAIL; INFO(P) ←Y; LINK(P) ← T; T← P. |
X=>Y (удаление из стека) : если T=0, то нечего удалять. (UNDERFLOW) P← T; T←LINK(P) Y←INFO(P); AVAIL<=P. |
Операции P<=AVAIL и AVAIL<=P – это, соответственно, извлечение узла из специального списка свободной памяти и возращение узла обратно в список.
Мы предполагаем, что узел с адресом P состоит их двух полей INFO(P) и LINK(P). Переменная T указывает на “верхний” элемент стека.
|
X<=Y (вставка в очередь) : P<=AVAIL; INFO(P) ←Y; LINK(P) ← 0; Если F=0, то F←P , иначе LINK(R) ← P; R← P. |
X=>Y (удаление из очереди) : если F=0, то нечего удалять. (UNDERFLOW) P← F; // Переменные F и R F←LINK(P); // указывают на первый Y←INFO(P); // и последний узел AVAIL<=P; // очереди соответственно. если F=0, то R=0. В случае если очередь пуста, то F и R равны 0. |
выводы:
1) При организации связанного распределения в памяти потребуется выделить дополнительное пространство для размещения связей. В некоторых ситуациях этот фактор может оказаться доминирующим. Но часто бывает, что хранимая информация все равно не занимает все слово (или узел) целиком, поэтому место для связи всегда найдется. Кроме того, во многих случаях несколько элементов комбинируется в одном узле (напр. структура), а потому связь может использоваться сразу для нескольких элементов данных. Однако, важнее то, что с помощью связанного распределения памяти выигрыш можно получить за счет частичного перекрытия таблиц, совместно использующих некоторые области памяти. Часто последовательное распределение не так рационально, как связанное, поскольку для его эффективной работы необходимо очень большое количество дополнительных вакантных ячеек памяти. 2) Операция удаления элемента в связанном списке выполняется проще. Например, для удаления элемента 3 необходимо только изменить связь с ним в элементе 2. А при последовательно распределении такое удаление подразумевает перемещение значительной части списка в другие ячейки. 3) При использ. схемы связанного распределения памяти проще выполняется и вставка элемента в середину списка. Например, для вставки элемента 2½ в список потребуется изменить только две связи. При работе с длинной таблицей с последовательным выделением памяти для вставки нужно будет выполнить гораздо больше действий, для чего потребуется чрезвычайно много времени.
4) Обращения к произвольным элементам списка гораздо быстрее осуществляется при последовательном выделении памяти. Для доступа к к-му элементу списка, где к - некоторая переменная, в случае последовательного распределения памяти потребуется фиксированное время, но для доступа к нужному элементу в случае связанной памяти потребуется выполнить к итераций. 5) В схеме связанного распределения памяти проще организовать объединение двух списков или разбиение списка на два других списка, которые могут увеличиваться независимо. 6) Схема связанного распределения памяти прекрасно подходит для организации более сложных структур, чем простые линейные списки. Например, ее можно применить для создания переменного количества списков переменного размера. Причем каждый узел одного из них может быть началом другого списка, к тому же узлы могут быть связаны между собой несколькими способами и образовывать другие списки и т.д. Т.о., технология связанного распределения памяти позволяет обойти ограничения, накладываемые последовательной природой компьютерной памяти. При выполнении одних операций она способствует достижению гораздо более высокой эффективности, а при выполнении других наоборот снижает ее. Обычно, совершенно ясно какая технология лучше всего подходит в конкретной ситуации. Поэтому часто в одной и той же программе используют списки разных типов.
8(1)