
- •Алгоритм бинарного поиска элемента в массиве.
- •Алгоритм линейного поиска элемента в массиве.
- •Алгоритм порождения двоично-отраженного кода Грэя.
- •Алгоритм сортировки выбором.
- •Алгоритмы порождения кодовых слов в порядке двоичного счета.
- •Алгоритмы сортировки массивов.
- •Атд очередь. Операторы очереди.
- •Вторая нормальная форма отношений.
- •Определение оптимального основания кода.
- •Основные определения теории графов.
- •Понятие избыточности текста. Оценка избыточности текста.
- •Понятие информации, экономической информации. Классификация экономической информации.
- •Понятие модели данных, атрибута, составной единицы информации, показателя, документа.
- •Понятие сигнала. Дискретизация сигналов. Выбор частоты дискретизации непрерывного сигнала. Теорема Котельникова (без доказательства).
- •Реализация списков с помощью указателей.
- •Реляционная модель данных. Отношения. Первая нормальная форма отношений. Универсальное отношение. Нормализация отношений.
- •Состав и структура единой системы классификации и кодирования.
- •Структурный и объектно-ориентированный подходы к проектированию. Жизненный цикл эис.
- •Фонетический поиск.
- •Хранение графа с помощью массива ребер и списка ребер.
- •Хранение графа с помощью массивов смежности.
- •Хранение графа с помощью матрицы инцидентности.
- •Хранение графа с помощью матрицы смежности.
- •Хранение графа с помощью списков смежности.
- •Хранение ориентированного дерева с помощью массива.
- •Штриховое кодирование. Структура штрих-кода в формате ean-13.
Основные определения теории графов.
Понятия теории графов широко используются при формализации различных задач.
Пусть V - непустое множество, V{2} - множество всех его двухэлементных подмножеств. Пара (V,E), где ЕV{2}, называется неориентированным графом.
Элементы множества V называют вершинами графа, а элементы множества E – ребрами графа.
Ориентированным графом называется пара (V,E), где EVV= {(v1,v2)|v1V,v2V}. То есть в ориентированном графе важен порядок вершин, составляющих ребро. В ориентированных графах вместо термина «ребро» часто используют термин «дуга».
Если из контекста ясно, о каком графе идет речь, то ради сокращения речи вместо терминов «неориентированный граф» и «ориентированный граф» используют термин «граф».
Далее, если речь идет о графе G=(V,E), множество вершин будем обозначать VG, а множество ребер (дуг) - EG.
Граф G можно представить в виде некоторой геометрической структуры, состоящей из двух множеств: множества точек (вершин) VG и отрезков (ребер) ЕG, которые соединяют некоторые пары точек из VG. Если указаны начало и конец ребра, то отрезок заменяют направленным отрезком.
Две вершины u и v называются смежными вершинами, если множество {u,v} является ребром (дугой), и не смежными в противном случае. Также, в этом случае говорят, что u и v являются концевыми вершинами ребра e={u,v}. Для дуги e=(u,v) концевую вершину u называют началом, a v - концом дуги.
Смежными ребрами называются два ребра, имеющие общую концевую вершину.
Вершина v и ребро (дуга) е называются инцидентными, если v концевая вершина е, и не инцидентными в противном случае.
Ребро e={v,v} или дуга e=(v,v) называется петлей.
Ребра e1={u,v},e2={u,v},...,еk={u,v} называются кратными ребрами.
Дуги e1=(u,v),e2=(u,v),...,еk=(u,v) называются параллельными дугами.
Цепью называется любая последовательность попарно различных ребер (дуг), такая, что соседние ребра (дуги) в ней смежны. В орграфе если в цепи учтена ориентация дуг, то она называется путем.
Если не требовать, чтобы ребра (дуги) в упомянутой последовательности были различны, то получим понятие маршрута (ориентированного маршрута).
Циклом называется цепь, у которой начальная и конечная вершины совпадают.
Контуром называется путь, у которого начальная и конечная вершины совпадают.
Граф называется связным, если для каждой пары вершин найдется соединяющий их маршрут.
Граф, который не содержит циклов, называется ациклическим.
Связный неориентированный ациклический граф называется деревом, множество деревьев называется лесом.
Граф Н называется подграфом (или частью) графа G, если VHVG, ЕНEG. Если Н - подграф графа G, то говорят, что Н содержится в G.
Покрывающим (или остовным) деревом графа G называется дерево, являющееся подграфом графа G и содержащее все его вершины.
Если каждому ребру (дуге) графа поставлено в соответствие одно или несколько чисел, то такой граф называется взвешенным.
Особенности реализации очередей.
Другой специальный тип списка - очередь (queue), где элементы вставляются с одного конца, называемого задним (rear), а удаляются с другого, переднего (front). Очереди также называют «списками типа FIFO» (аббревиатура FIFO расшифровывается как first-in-first-out: первым вошел - первым вышел). Операторы, выполняемые над очередями, аналогичны операторам стеков. Существенное отличие между ними состоит в том, что вставка новых элементов осуществляется в конец списка, а не в начало, как в стеках. Кроме того, различна устоявшаяся терминология для стеков и очередей.
1. NULLQUEUE(Q) очищает очередь Q, делая ее пустой. При реализации очереди на списке Q оператор NULLQUEUE(Q) эквивалентен NULLIST(Q).
2. FRONT(Q) - функция, возвращающая первый элемент очереди Q. Можно реализовать эту функцию с помощью операторов списка как RETRIEVE(FIRST(Q),Q).
3. ENQUEUE(x,Q) вставляет элемент x в конец очереди Q. С помощью операторов списка этот оператор можно выполнить следующим образом: INSERT(x, NEXT(LAST(Q),Q), Q).
4. DEQUEUE(Q) удаляет первый элемент очереди Q. C помощью операторов списка данный оператор записывается как DELETE(FIRST(Q),Q).
5. EMPTYQUEUE(Q) возвращает значение true тогда и только тогда, когда Q является пустой очередью. При реализации очереди на списке Q оператор EMPTYQUEUE(Q) эквивалентен EMPTYLIST(Q).
Особенности реализации стеков.
Стек - это специальный тип списка, в котором все вставки и удаления выполняются только на одном конце, называемом вершиной (top). Стеки иногда называют «магазинами», также для обозначения стеков используется аббревиатура LIFO (last-in-first-out - последний вошел - первый вышел). Интуитивными моделями стека могут служить патроны в магазине автоматического стрелкового оружия, книги, сложенные в стопку, или стопка тарелок; во всех этих моделях взять можно только верхний предмет, а добавить новый предмет можно, только положив его на верхний.
Абстрактные типы данных семейства STACK (cтек) обычно используют следующие пять операторов.
1. NULLSTACK(S). Делает стек S пустым. При реализации стека на списке S оператор NULLSTACK(S) эквивалентен NULLIST(S).
2. TOP(S). Возвращает элемент из вершины стека S. Если вершина стека соответствует первой позиции списка S, тогда TOP(S) можно записать в терминах общих операторов списка как RETRIVE(FIRST(S),S). Если вершина стека соответствует последней позиции списка S, тогда TOP(S) можно записать как RETRIVE(LAST(S),S).
3. POP(S). Удаляет элемент из вершины стека (выталкивает из стека). Если вершина стека соответствует первой позиции списка S, тогда этот оператор можно записать как DELETE(FIRST(S),S). Если вершина стека соответствует последней позиции списка S, тогда POP(S) записывается как DELETE(LAST(S),S). Иногда оператор POP(S) реализуется в виде функции, возвращающей удаляемый элемент.
4. PUSH(x,S). Вставляет элемент x в вершину стека S (заталкивает элемент в стек). Элемент, ранее находившийся в вершине стека, становится элементом, следующим за вершиной, и т.д. Если вершина стека соответствует первой позиции списка S, то данный оператор можно записать как INSERT(x,FIRST(S),S). Если вершина стека соответствует последней позиции списка S, то PUSH(x,S) записывается как INSERT(x, NEXT(LAST(S),S), S).
5. EMPTYSTACK(S). Эта функция возвращает значение true (истина), если стек S пустой, и значение false (ложь) в противном случае. При реализации стека на списке S оператор EMPTYSTACK(S) эквивалентен EMPTYLIST(S).
Помехозащищенное кодирование. Код с проверкой на четность.
В процессе передачи и хранения информации, представленной в двоичном коде, могут возникнуть ошибки, связанные с изменением отдельных символов (0 вместо 1 и 1 вместо 0), вследствие действия помех. Обеспечить помехоустойчивость можно, применяя корректирующие или помехозащищенные коды, позволяющие обнаруживать или исправлять возникающие ошибки.
Проиллюстрируем
идею построения помехозащищенных кодов
на геометрической модели n-элементного
двоичного кода. Такой код представим в
виде n-мерного
куба (гиперкуба), каждая из вершин
которого соответствует одной из
возможных кодовых
комбинаций, и две вершины соединены
ребром, если соответствующие им кодовые
комбинации отличаются одним элементом,
длина каждого ребра равна единице. На
рис. 2.7 представлен трехмерный куб.
Кодовым
расстоянием (
)
чисел
и
называется число разрядов (символов),
в которых
отличается от
.
В геометрической интерпретации кодовое
расстояние - это минимальное число ребер
в n-мерном
кубе, разделяющих вершины соответствующие
числам
и
.
Если
все
кодовых комбинаций разрешены, то кодовое
расстояние между соседними комбинациями
.
В этом случае отсутствует какой либо
признак, позволяющий судить о появлении
ошибки в кодовой комбинации, и код не
является помехозащищенным.
Пусть
для
(см. рис. 2.7) из всех
возможных
кодовых комбинаций разрешены только
комбинации 001, 010, 100 и 111. Тогда
,
и искажение символа в одном из разрядов
приведет к получению запрещенной кодовой
комбинации 000, 011, 101 или 110, что легко
выявляется при проверке. Таким образом,
код 001, 010, 100, 111 обнаруживает ошибку в
одном разряде (одиночную ошибку).
68
Легко
построить код, обнаруживающий и двойные
ошибки. Для этого в качестве разрешенных
кодовых комбинаций необходимо выбрать
наборы с
,
например наборы 010 и 101. При этом одиночные
ошибки можно не только обнаруживать,
но и исправлять. Действительно, получение
запрещенных кодовых комбинаций 110, 000
или 011 указывает на наличие одиночной
ошибки, для исправления которой необходимо
перейти к ближайшей из разрешенных
кодовых комбинаций – 010. Если же получены
запрещенные кодовые комбинации 001,111
или 100, то для исправления одиночной
ошибки необходимо перейти к ближайшей
из разрешенных кодовых комбинаций -
101. Рассмотренный код и процесс исправления
одиночных ошибок проиллюстрирован на
рис.2.8.
Итак, построение помехозащищенных кодов связано с введением избыточности в передаваемые кодовые комбинации. При этом корректирующая способность кода, т.е. число обнаруживаемых и исправляемых ошибок, определяется главным образом кодовым расстоянием.
Простейшим
из помехозащищенных кодов является код
с проверкой на четность (
).
В этом коде к каждой комбинации
добавляется один дополнительный
проверочный разряд
,
значение которого определяется следующим
образом
Таким
образом, при отсутствии ошибок кодовая
комбинация
всегда содержит четное число единиц.
Если в результате проверки установлено,
что кодовая комбинация
содержит нечетное число единиц, то это
указывает на наличие одиночной ошибки
(или нечетного числа ошибок). Автоматическая
коррекция ошибок в данном коде невозможна.
Аналогично можно построить код с проверкой на нечетность.
Подобные коды используются при организации последовательной передачи данных в глобальных сетях. Следует отметить, что в больших и мини-ЭВМ почти всегда используется проверка на четность. В персональных компьютерах проверка на четность практически не используется. С этим связана одна из распространенных ошибок среди неопытных пользователей. Они забывают при связи с компьютерными службами типа CompuServe переключать свои терминальные программы в режим использования 7 бит для данных и 1 бита для проверки на четность.