Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

QalOGUGtk0

.pdf
Скачиваний:
2
Добавлен:
15.04.2023
Размер:
4.97 Mб
Скачать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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