QalOGUGtk0
.pdf
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.1. |
x z |
|
x y |
|
x y |
x y |
x y |
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
5.2. |
x z |
|
x y |
|
x y |
|
y z |
x y |
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
5.3. |
x z |
|
x z |
|
x y |
x y |
x y |
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
5.4. |
x z |
|
x z |
|
x y |
|
y z |
x y |
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
5.5. |
y z |
|
x y |
|
x y |
x y |
x y |
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
5.6. |
y z |
|
x y |
|
x y |
|
y z |
x y |
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
5.7. |
y z |
|
x z |
|
x y |
x y |
x y |
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
5.8. |
y z |
|
x z |
|
x y |
|
y z |
x y |
|||||||||||||||||||||||||
|
|
|
|
|
|
6. Упрощая каждую из формул по правилу: a a=a, видим, что раз- |
|||||||||||||||||||||||||||||||||
личных ДНФ получилось три: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
x z |
x y |
x y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
x z |
x y |
|
y z |
x y |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
y z |
x y |
x y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В качестве минимальной ДНФ выбираем ту, в которой наименьшее количество литер (литерой называется переменная или её отрицание). Для данной функции ответов будет два:
f(x, y, z) = x z x y x y = y z x y x y .
Задача № 5. С помощью алгоритма Прюфера восстановить по вектору дерево. Нарисовать диаграмму. Сделать проверку.
Пример решения. (1, 2, 2, 1, 4, 4, 4).
Данный вектор содержит 7 компонент, значит, деревоТдолжно иметь 7 + 2
= 9 вершин. Выпишем последовательность номеров этих вершин: |
|
||||||||
1, |
2, |
3, |
4, |
5, |
6, |
7, |
8, |
9. |
(*) |
Выпишем также последовательность компонент данного вектора: |
|
||||||||
|
|
1, 2, 2, 1, 4, 4, 4 |
|
(**) |
Просматривая последовательность (*) слева направо, находим первое встретившееся число, которое не содержится в последовательности (**). Это число «3». Получаем ребро (1,3).
Зачёркиваем «1» в (**), «3» в (*); остаётся: |
|
|||||||
1, |
2, |
4, |
5, |
6, |
7, |
8, |
9. |
(*) |
|
|
2, 2, 1, 4, 4, |
4 |
|
(**) |
Первое число в (*), которое не содержится в (**), это «5». Получаем следующее ребро (2,5). Зачёркиваем «2» в (**), «5» в (*); остаётся:
121
1, |
2, |
4, |
6, |
7, |
8, |
9. |
(*) |
|
|
2, 1, 4, 4, 4 |
|
(**) |
Повторяя эту процедуру ещё 3 раза, получим рёбра (2,6), (1,2), (4,1), (4,7), (4,8). После чего в последовательности (*) останутся два числа 4 и 9. Они определяют последнее ребро (4,9). Так как все рёбра известны, восстанавливаем деревоТ, схема которого приведена на рисунке.
Процедура проверки заключается в нахождении вектора по построенному дереву.
Согласно одному из свойств деревьев, в дереве Т найдутся хотя бы две концевые вершины. Обозначим через b1 первую концевую вершину в последовательности (*), а через e1 = (a1, b1) – соответствующее концевое ребро. Удалив из дерева Т ребро e1 и вершину b1, мы получим новое дерево T1. Для T1 найдётся первая в последовательности (*) концевая вершина b2 с ребром e2 = (a2, b2), удалив которое, получим дерево T2 и т.д. Наконец, после удаления ребра en 2 = (an 2, bn 2) останется единственное ребро en 1 = (an 1, bn 1), соединяющее две оставшиеся вершины. Тогда вектор (a1, a2,...,an 2) однозначно определяется деревом Т, и двум различным деревьям соответствуют разные векторы.
В нашем случае концевая вершина с самым маленьким номером 3, а соответствующее ей концевое ребро – (1, 3); поэтому принимаем a1 = 1 и отсекаем это ребро.
Концевая вершина с самым маленьким номером из оставшихся 5, а
соответствующее ей концевое ребро (2, 5). Принимаем a2 = 2 и отсекаем ребро. Дальше действуем аналогично.
В итоге получим вектор (1, 2, 2, 1, 4, 4, 4), заданный в условии зада-
чи.
Задача № 6. По данной матрице смежности неориентированного графа а) нарисовать диаграмму; б) восстановить матрицу инцидентности;
122
в) определить степени всех вершин; г) проверить, имеются ли среди вершин графа точки сочленения, а среди его рёбер – мосты.
Пример решения
№вершины |
1 |
2 |
3 |
4 |
5 |
6 |
|
|
|
|
|
|
|
1 |
0 |
1 |
1 |
0 |
0 |
0 |
2 |
1 |
0 |
1 |
0 |
0 |
1 |
3 |
1 |
1 |
0 |
0 |
0 |
0 |
4 |
0 |
0 |
0 |
0 |
1 |
1 |
5 |
0 |
0 |
0 |
1 |
0 |
1 |
6 |
0 |
1 |
0 |
1 |
1 |
0 |
а) Для неориентированного графа элемент cij матрицы смежности Cравен «1», если вершины i и j смежные; иначе cij = 0. Обозначив вершины числами от «1» до «6», построим диаграмму данного графа:
б)Для неориентированного графа элемент bijматрицы инцидентности B равен «1», если ребро ei инцидентно вершине j, в противном случае bij=0. Обозначив рёбра графа латинскими буквами: «a», «b»,…, «h», составим его матрицу инцидентности:
Вер- |
1 |
|
2 |
3 |
4 |
5 |
6 |
шина\ |
|
||||||
|
|
|
|
|
|
|
|
Ребро |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
1 |
|
0 |
1 |
0 |
0 |
0 |
b |
0 |
|
1 |
1 |
0 |
0 |
0 |
c |
0 |
|
1 |
0 |
0 |
0 |
1 |
d |
0 |
|
0 |
0 |
0 |
1 |
1 |
e |
0 |
|
0 |
0 |
1 |
1 |
0 |
f |
0 |
|
0 |
0 |
1 |
0 |
1 |
g |
1 |
|
1 |
0 |
0 |
0 |
0 |
|
|
123 |
|
|
|
|
в) Степень i вершины i неориентированного графа равна количеству вершин, смежных с вершиной i; поэтому
1 = 2, 2 = 3, 3 = 2, 4 = 2, 5 = 2, 6 = 3.
г) Вершина, удаление которой вместе с инцидентными ей ребрами увеличивает число компонент связности графа, называется разделяющей (или точкой сочленения); ребро с таким же свойством называется мостом.
В данном графе две точки сочленения – «2» и «6» и один мост – ребро «с».
Литература:
1.Иванов Б.Н. Дискретная математика. Алгоритмы и программы: Учеб.пособие. - М.: Лаборатория базовых знаний, 2001. - 288 с.
2.Матросов В.А., Стеценко В.А. Лекции по дискретной математике. - М.:
МПГУ, 1997.
3.Новиков Ф.А. Дискретная математика для программистов. Спб: Питер,
2000. - 304 с.
4.Харари Ф. Теория графов. М.: Едиториал УРСС, 2003. - 296 с.
5.Яблонский С.В. Введение в дискретную математику: Учеб.пособие для вузов. М.: Высш. шк., 2001. - 384 с.
124
Н.Р. Ланина
Индивидуальные задания по курсу «Комбинаторные алгоритмы» (24 варианта)
Вариант № 1.
1. Разработать и отладить программу, с помощью алгоритма с возвратом
решающую задачу об обходе конём шахматной доски. Найти только пер-
вое из возможных решений. Исходные данные размер доски и начальное положение коня ввести с экрана. Матрицу, описывающую «заполненную» доску, вывести в выходной текстовый файл.
2.На входе: два множества А и В, элементами которых являются цифры: {0, 1, …, 9}.
1) Сформировать объединение D этих множеств;
2) сгенерировать и пронумеровать все перестановки из элементов множества D;
3) для каждой перестановки подсчитать сумму цифр, делящихся на три без остатка; 4) результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения сильно ветвящегося дерева на заданный. Представление дерева на входе (из входного файла): имя вершины; ссылки на всех ее сыновей. Представление дерева на выходе: имя вершины; ссылки на самого левого сына и правого брата.
4.Неориентированный граф задан списками смежности. Прочитав списки смежности из входного текстового файла, определить количество компонент связности графа и указать номера вершин, содержащихся в каждой из компонент.
Указание. Использовать процедуру обхода графа в глубину.
Вариант № 2.
1. Разработать и отладить программу, по заданным n и m генерирующую все перестановки с повторениями. Каждая комбинация должна состоять из элементов множества {1, 2, ..., n} и содержать m элементов (m n). Для каждой комбинации подсчитать сумму S ее элементов.
Пронумеровав все комбинации, вывести их и соответствующие им суммы S в выходной текстовый файл.
2. На входе: два множества А и В, элементами которых являются символы; символ x.
1) Проверить, принадлежит ли x множеству А. Если “да”, то перенести его в множество В;
125
2)сгенерировать все трёхэлементные сочетания с повторениями из элементов изменённого множества А;
3)результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения ориентированного псевдографа на заданный. Представление псевдографа на входе (из входного файла): матрица смежности. Представление псевдографа на выходе: матрица инцидентности.
4.Неориентированный граф задан списками смежности. Прочитав списки смежности из входного текстового файла, определить, является ли данный граф деревом?
Указание. Использовать процедуру обхода графа в глубину, а также
формулу соотношение между количеством вершин и рёбер дерева.
Вариант № 3.
1. Разработать и отладить программу, с помощью алгоритма с возвратом решающую задачу о ферзях. Найти только одно из возможных решений. Исходные данные размер доски ввести из входного текстового файла. Вектор решение вывести на экран.
2.На входе: два множества А и В, элементами которых являются цифры: {0, 1, …, 9}.
1)Сформировать разности D = A\B и F = B\A этих множеств;
2)сгенерировать и пронумеровать все перестановки из элементов множества D;
3)для каждой перестановки подсчитать произведение чётных цифр;
4)результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения сильно ветвящегося дерева на заданный. Представление дерева на входе (из входного файла): имя вершины; ссылка на отца. Представление дерева на выходе: имя вершины; ссылки на всех ее сыновей.
4.Неориентированный граф представлен списком ребер. Прочитав список рёбер из входного текстового файла, найти все вершины графа, у
которых степени равны.
Вариант № 4.
1. Разработать и отладить программу, по заданным n и m генерирующую все размещения. Каждая комбинация должна состоять из элементов множества {1, 2, ..., n} и содержать m элементов (m n). Для каждой комбинации подсчитать сумму S ее чётных элементов.
Пронумеровав все комбинации, вывести их и соответствующие им суммы S в выходной текстовый файл.
126
2.На входе: два множества А и В, элементами которых являются символы: {0, 1, …, 9}.
1)Сформировать декартово произведение D = A×B этих множеств;
2)сгенерировать и пронумеровать все трёхэлементные сочетания из элементов множества D;
3)результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения ориентированного псевдографа на заданный. Представление псевдографа на входе (из входного файла): матрица инцидентности. Представление псевдографа на выходе: список рёбер.
4.Неориентированный граф, содержащий 5 или более вершин, представлен списками смежности. Прочитав списки смежности из входного текстового файла, проверить, существует ли в этом графе цикл, содержа-
щий 4 заданные вершины?
Вариант № 5.
1. Разработать и отладить программу, с помощью алгоритма с возвратом решающую задачу о велосипедном замке, если известно, что включено не менее четверти переключателей. Найти все возможные решения.
Исходные данные количество переключателей (n 8) ввести с экрана. Вектора решения пронумеровать и вывести в выходной текстовый файл.
2.На входе: два множества А и В, элементами которых являются цифры: {0, 1, …, 9}.
1)Сформировать дополнения D = !A и F = !B к каждому из этих множеств;
2)сгенерировать и пронумеровать все перестановки из элементов множества D;
3)для каждой перестановки подсчитать разность между произведением всех чётных цифр и произведением всех нечётных цифр;
4)результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения сильно ветвящегося дерева на заданный. Представление дерева на входе (из входного файла): имя вершины; ссылки на левого сына, правого брата, отца. Представление дерева на выходе: имя вершины; ссылки на всех ее сыновей.
4.Неориентированный граф задан списками смежности. Прочитав списки смежности из входного текстового файла, определить, является ли данный граф лесом?
Указание. Использовать процедуру обхода графа в глубину, а также
формулу соотношение между количеством вершин и рёбер дерева.
127
Вариант № 6.
1. Разработать и отладить программу, по заданным n и m генерирующую все сочетания с повторениями. Каждая комбинация должна состоять из элементов множества {1, 2, ..., n} и содержать m элементов. Для каждой комбинации подсчитать сумму S ее повторяющихся элементов.
Пронумеровав все комбинации, вывести их и соответствующие им суммы S в выходной текстовый файл.
2.На входе: два множества А и В, элементами которых являются цифры: {0, 1, …, 9}.
1)Сформировать объединение первого из них с дополнением ко второму D = A U !B;
2)сгенерировать и пронумеровать все трёхэлементные сочетания из элементов множества D;
3)для каждого сочетания подсчитать разность между суммой всех чётных цифр и суммой всех нечётных цифр;
4)результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения ориентированного псевдографа на заданный. Представление псевдографа на входе (из входного файла): список рёбер. Представление псевдографа на выходе: списки смежности.
4.Неориентированный граф, имеющий 5 или 6 вершин, задан списками смежности. Прочитав списки смежности из входного текстового файла, определить, является ли данный граф планарным?
Указание. Использовать критерий Понтрягина-Куратовского.
Вариант № 7.
1. Разработать и отладить программу, методом полного перебора по заданной матрице стоимостей «С» решающую задачу коммивояжера для n 7 городов. Исходные данные матрицу С считать из входного текстового файла. Вывести решение на экран.
Указание. С помощью алгоритма с возвратом сгенерировать все возможные гамильтоновы циклы и для каждого подсчитать его стоимость. Выбрать гамильтонов цикл с минимальной стоимостью.
2. На входе: два множества А и В, элементами которых являются цифры: {0, 1, …, 9}.
1)Сформировать объединение D этих множеств;
2)сгенерировать и пронумеровать все (n+2)-элементные перестановки с повторениями из элементов множества D (где n – мощность множества D);
3)для каждой комбинации подсчитать сумму цифр, делящихся на три без остатка;
4)результат вывести в выходной текстовый файл.
128
3.Изменить исходный способ хранения сильно ветвящегося дерева на заданный. Представление дерева на входе (из входного файла): имя вершины; ссылки на самого левого сына и правого брата. Представление дерева на выходе: имя вершины; ссылки на левого брата и отца.
4.Неориентированный граф представлен матрицей смежности. Прочитав матрицу смежности из входного текстового файла, найти степени всех вершин графа и указать вершины с чётными степенями.
Вариант № 8.
1. Разработать и отладить программу, генерирующую все разбиения натурального числа n. Для каждой комбинации подсчитать произведение П ее чётных элементов.
Пронумеровав все комбинации, вывести их и соответствующие им произведения П в выходной текстовый файл.
2.На входе: два множества А и В, элементами которых являются символы; символы x и y.
1)Если x принадлежит множеству А, а y – множеству В, то поменять их местами;
2)сгенерировать и пронумеровать все трёхэлементные сочетания из элементов изменённого множества А;
3)результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения ориентированного псевдографа на заданный. Представление псевдографа на входе (из входного файла): списки смежности. Представление псевдографа на выходе: матрица инцидентности.
4.Неориентированный граф представлен списком ребер. Прочитав список рёбер из входного текстового файла, составить матрицу смежности для графа, являющегося дополнением к данному графу.
Вариант № 9.
1. Разработать и отладить программу, методом полного перебора по заданным весам и ценам решающую задачу оптимального выбора для n 10 объектов. Исходные данные веса и цены считать с экрана. Вывести решение в выходной текстовый файл.
Указание. С помощью алгоритма с возвратом сгенерировать все возможные выборки (подмножества для множества A={1, 2, ..., n}), для каждой проверить ограничение на вес и подсчитать её стоимость. Выбрать выборку с максимальной стоимостью из тех, для которых выполняется ограничение на вес.
2. На входе: два множества А и В, элементами которых являются цифры: {0, 1, …, 9}.
129
1)Сформировать разности D = A\B и F = B\A этих множеств;
2)сгенерировать и пронумеровать все (n+2)-элементные перестановки с повторениями из элементов множества D (где n – мощность множества D);
3)для каждой комбинации подсчитать сумму чётных цифр;
4)результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения сильно ветвящегося дерева на заданный. Представление дерева на входе (из входного файла): имя вершины; ссылки на левого сына, правого брата. Представление дерева на выходе: имя вершины; ссылки на отца и левого брата.
4.Неориентированный псевдограф задан списками смежности. Прочитав списки смежности из входного текстового файла, определить:
1)является ли данный псевдограф эйлеровым;
2)содержит ли данный псевдограф эйлерову цепь?
Вариант № 10.
1. Разработать и отладить программу, по заданным n и m генерирующую все композиции (z1, z2, …, zn) натурального числа m. Слагаемые композиции должны отвечать условию: zi 0. Для каждой композиции подсчитать
n
сумму S вида: ( 1)i zi .
i 1
Пронумеровав все комбинации, вывести их и соответствующие им суммы S в выходной текстовый файл.
2.На входе: два множества А и В, элементами которых являются символы.
1)Сформировать декартово произведение D = A×B этих множеств;
2)сгенерировать и пронумеровать все трёхэлементные сочетания с повторениями из элементов множества D;
3)результат вывести в выходной текстовый файл.
3.Изменить исходный способ хранения ориентированного псевдографа на заданный. Представление псевдографа на входе (из входного файла): матрица смежности. Представление псевдографа на выходе: списки смежности.
4.Неориентированный граф задан списками смежности. Прочитав списки смежности из входного текстового файла, найти все точки сочленения данного графа.
Указание. Для каждой вершины поочерёдно проделать следующее: удалив эту вершину вместе со всеми инцидентными ей рёбрами, получить новый граф. Для этого графа, использую процедуру обхода в глубину, подсчитать количество компонент связности.
130