Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekt1_sd4_1.doc
Скачиваний:
40
Добавлен:
12.03.2015
Размер:
2.44 Mб
Скачать
    1. Словарь (Dictionary, Map), другое название – ассоциативный массив [7 п.4.5-8; 3 гл.12; 2 п.4.10; 13 гл.8.].

  • Множество возможных значений – конечные множества элементов одинакового типа, вида [Key, Value], где Key – уникальный ключ элемента, Value - собственно значение.

  • Набор операций:

  • Вставить элемент (с ключом) во множество.

  • Удалить элемент (заданный ключом) из множества.

  • Найти элемент – функция, возвращающая по ключу значение элемента или «пустое» значение, если элемента с таким ключом нет во множестве.

АТД «Словарь» - это специализированный вариант понятия (хранимое) отображение (ключей в значения), широко используемый в практическом программировании. Но для некоторых предметных областей возможно более удобным окажется оформление АТД «Отображение» (Mapping), более близкое классическому математическому определению [7 п.2.5,4.9.].

    1. Очередь с приоритетом (Priority queue). [7 п.4.10-11, п.5.6; 3 гл.9; 4 п.6.5; 2 п.4.10-13; 13 гл.7.]

  • Множество возможных значений – конечные множества элементов одинакового типа. На множествах (возможных значениях) задано отношение линейного порядка, которое трактуется как сравнение элементов по приоритетности. Уровень приоритета может быть выделен как составная часть значения элемента или вычислим заданной функцией от значения элемента.

Отметим, что такое множество возможных значений можно трактовать и как множество последовательностей (с перечислением её элементов в заданном линейном порядке).

  • Набор операций:

  • Вставить элемент в (линейно упорядоченное) множество.

  • Удалить минимальный 15 элемент из множества.

  • Найти минимальный – функция, возвращающая значение минимального элемента во множестве.

Рассматриваются также (существенные) вариации этого АТД с дополнительными операциями:

  • Расцепить очередь на две по заданному значению (приоритету) элемента – на очередь элементов с меньшим приоритетом и очередь остальных.

  • Сцепить две очереди, у одной из которых все элементы имеют приоритет больший, чем у всех элементов другой очереди в одну очередь с приоритетом без сохранения исходных сцепляемых очередей.

  • Объединить два непересекающихся упорядоченных множества (слить две такие очереди) в одно упорядоченное множество (одну очередь с приоритетом), также без сохранения исходных объединяемых.

  • Уменьшить значение (приоритет) заданного элемента.

  • Удалить (произвольно) заданный элемент из множества.

    1. Непересекающиеся множества (Disjoint Sets, Partitions, Разбиения) [7 п.5.5; 4 гл.21; 2 п.4.6-8.].

  • Множество возможных значений – конечные множества (семейства) непересекающихся конечных множеств. Элементы семейства идентифицированы, т.е. каждое множество из семейства имеет (уникальное) имя.

  • Набор операций:

  • Объединить(А,В) – операция вида А:= А  В без сохранения исходных объединяемых множеств (а значит новое значение семейства останется семейством непересекающихся множеств, причем их количество уменьшится).

  • Найти множество – функция, возвращающая для заданного х имя такого множества Х в семействе, что х  Х.

    1. Деревья, графы и отношения общего вида. [13 гл.6,12; 7 гл.3, п.4.12, гл.6-7; 3 гл.17.]

В дискретной математике особое внимание уделяется (конечным) отношениям вида - дерево, граф и сеть (мультиграф, гиперграф), имеющим определенно выраженную геометрическую трактовку:

  • Граф – (конечное) бинарное отношение (симметричное – в случае неориентированных графов), E  V2, где V – множество вершин, а E – множество ребер графа.

В дискретной математике обычно E определяется не как множество, а как набор ребер графа, это позволяет рассматривать графы, в которых пару вершин может связывать несколько ребер (например, как-то по-разному помеченных).

  • Дерево – это бинарное отношение (строгого) частичного порядка, дополнительно удовлетворяющее требованиям (иерархичности, древесности):

  • из того, что х<у,z следует, что у и z сравнимы, т.е. либо уz либо zу (х<у трактуется как: х встречается раньше у в пути к корню дерева, х – потомок, у - предок);

  • во множестве V (вершин дерева) существует наибольший элемент (корень дерева).

Деревья можно различать, если порядок сыновей (хотя бы для одной) вершины дерева различен. Упорядоченное дерево – дерево, в котором для каждой вершины задан порядок на множестве дочерних вершин, т.е. детей можно определить как первый, второй и т.д.

  • Сеть – это отношение общего вида, которое можно трактовать как обобщение – E  VV2...Vk, а можно – как отношение (E  Vk) с множеством элементов V, имеющим «пустой» (фиктивный) элемент.

Эти понятия, конечно, широко используются при разработке моделей задач предметных областей. Но также как и в случае множеств по ряду причин прагматического характера в программировании такое АТД общего (универсального) вида представляет ограниченный интерес. Точнее, разнообразные виды представления деревьев, графов и сетей, конечно, широко используются в практике программирования. Но совмещение их с универсальным набором операций и оформление такого универсального АТД представляется полезным только в простых ситуациях.

Фундаментальная роль деревьев и графов проявляется скорее в контексте прикладной задачи при выборе структур данных для эффективной реализации выбранных АТД и алгоритма решения задачи в целом. Но в таком контексте и их способ представления, и набор операций с этими деревьями, графами и сетями, естественно специализирован в соответствии с конкретным контекстом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]