- •1.3.6. Экстремальные характеристики отношения
- •3.2.3. Связь между исчислением высказываний и алгеброй
- •3.2.4. Основные результаты исследования исчисления
- •Предисловие
- •1.1. Понятие компьютинга и дискретной математики
- •1.2. Теория множеств
- •1.2.1. Основные понятия теории множеств
- •1.2.2. Способы задания множеств
- •1.2.3. Операции над множествами
- •1.2.4. Свойства операций над множествами
- •1.2.5. Аксиоматика теории множеств
- •1.3. Бинарные отношения и их свойства
- •1.3.1. Декартово произведение и бинарное отношение
- •1.3.2. Функции и операции
- •1.3.3. Способы задания бинарных отношений
- •1.3.4. Свойства бинарных отношений
- •1.3.5. Типы бинарных отношений
- •1.3.7. Отношение толерантности
- •1.3.8. Операции над отношениями
- •Контрольные вопросы и задания
- •2.1. Фундаментальные алгебры
- •2.2. Алгебра высказываний
- •2.3. Формализация логических высказываний
- •2.4. Таблицы истинности сложных высказываний
- •2.5. Равносильности алгебры высказываний
- •2.6. Булевы функции
- •2.7. Формы представления логических функций
- •2.7.1. Дизъюнктивные нормальные формы
- •2.7.2. Конъюнктивные нормальные формы
- •2.8.1. Законы алгебры Буля
- •2.8.2. Упрощение логических функций
- •2.8.3. Метод Квайна – МакКласки
- •2.9.1. Теорема о полноте системы булевых функций
- •2.10. Построение логических схем
- •Контрольные вопросы и задания
- •Глава 3. Формальные теории
- •3.1. Основные свойства формальных теорий
- •3.1.1. Выводимость
- •3.1.2. Интерпретация
- •3.1.3. Разрешимость
- •3.1.4. Общезначимость
- •3.1.5. Непротиворечивость
- •3.1.6. Полнота
- •3.1.7. Независимость
- •3.2. Исчисление высказываний
- •3.2.1. Интерпретация
- •3.2.2. Правило подстановки
- •3.2.3. Связь между исчислением высказываний
- •3.2.5. Другие формализации исчисления высказываний
- •3.3. Исчисление предикатов
- •3.3.2. Кванторные операции над предикатами
- •3.3.3. Формальное определение исчисления предикатов
- •Контрольные вопросы и задания
- •4.1. Прямые доказательства
- •4.1.1. Правило подстановки
- •4.1.2. Правило вывода
- •4.1.3. Дедукция
- •4.1.4. Математическая индукция
- •4.2. Косвенные доказательства
- •4.2.1. Доказательство «от противного»
- •4.2.2. Доказательство через контрпример
- •Контрольные вопросы и задания
- •Глава 5. Основы комбинаторики
- •5.1. Правила суммы и произведения
- •5.2. Перестановки
- •5.3. Размещения и сочетания
- •5.4. Разбиения
- •5.5. Формула включений и исключений
- •5.6. Рекуррентные соотношения
- •5.7. Производящие функции
- •5.8. Числа Стирлинга второго и первого рода
- •Контрольные вопросы и задания
- •Глава 6. Основы теории графов
- •6.1. Основные понятия
- •6.1.1. Классификация графов
- •6.1.2. Способы задания графов
- •6.2. Операции над графами
- •6.2.1. Удаление вершин и ребер
- •6.2.2. Дополнение
- •6.2.3. Объединение графов
- •6.2.4. Сложение графов
- •6.2.5. Произведение графов
- •6.3. Связность в графах
- •6.3.1. Компоненты связности
- •6.3.2. Вершинная и реберная связность
- •6.3.3. Сильная связность в графах
- •6.4. Цикломатика графов
- •6.4.1. Ациклические графы
- •6.4.2. Базисные циклы и цикломатическое число
- •6.4.3. Базисные разрезы и ранг
- •6.4.4. Эйлеровы графы
- •6.4.5. Гамильтоновы графы
- •6.5. Диаметр графа
- •6.5.1. Основные определения
- •6.5.2. Алгоритм нахождения диаметра
- •6.5.3. Поиск диаметра при операциях над графами
- •6.6. Устойчивость графов
- •6.6.1. Внутренняя устойчивость
- •6.6.1. Внешняя устойчивость
- •6.7. Хроматика графов
- •6.7.1. Хроматическое число
- •6.7.3. Двудольное представление графов
- •6.7.4. Хроматический класс
- •6.8. Преобразование графов
- •6.8.1. Реберные графы
- •6.8.2. Изоморфизм графов
- •6.8.3. Гомеоморфизм графов
- •6.8.4. Автоморфизм графов
- •6.9. Планарность
- •6.9.1. Основные определения
- •6.9.2. Критерии непланарности
- •6.10. Построение графов
- •6.10.1. Преобразование прилагательных в числительные
- •6.10.3. Оценка количества ребер сверху и снизу
- •Контрольные вопросы и задания
- •7.1. Введение в теорию нечетких моделей
- •7.1.1. Принятие решений в условиях неопределенности
- •7.1.2. Основы нечетких моделей
- •7.2. Нечеткие множества. Базовые определения
- •7.2.1. Базовые и нечеткие значения переменных
- •7.2.2. Основные определения
- •7.2.3. Типовые функции принадлежности
- •7.3. Операции над нечеткими множествами
- •7.3.1. Операция «дополнение»
- •7.3.2. Операция «пересечение»
- •7.3.3. Операция «объединение»
- •7.3.4. Операция «включение»
- •7.3.5. Операции «равенство» и «разность»
- •7.3.6. Операция «дизъюнктивная сумма»
- •7.3.7. Операции «концентрирование» и «растяжение»
- •7.3.8. Операция «отрицание»
- •7.3.9. Операция «контрастная интенсивность»
- •7.3.10. Операция «увеличение нечеткости»
- •7.4. Обобщенные нечеткие операторы
- •7.4.1. Треугольные нормы
- •7.4.2. Треугольные конормы
- •7.4.3. Декомпозиция нечетких множеств
- •7.5. Индекс нечеткости
- •7.5.1. Оценка нечеткости через энтропию
- •7.5.2. Метрический подход к оценке нечеткости
- •7.5.3. Аксиоматический подход
- •7.6. Нечеткие бинарные отношения
- •7.6.1. Нечеткие бинарные отношения
- •7.6.2. Свойства нечетких бинарных отношений
- •7.6.3. Операции над нечеткими отношениями
- •7.7. Нечеткие числа
- •7.8. Приближенные рассуждения
- •7.8.1. Нечеткая лингвистическая логика
- •7.8.2. Композиционное правило вывода
- •7.8.3. Правило modus ponens
- •Контрольные вопросы и задания
- •Список литературы
С62 = |
6! |
|
=15. |
|
2!(6 − 2)! |
||||
|
|
После того, как выбор произведен, из пары букв <x, y> составляют слова. Количество таких слов вычисляем по формуле для перестановок: P2 = 2! = 2.
Мы совершаем два события последовательно: выбираем буквы и составляем слова, следовательно, по правилу произведения полу-
чаем решение: N1 = С62 P2 =15 2 = 30.
В случае выбора одинаковых букв, слов столько, сколько раз-
личных букв, т.е. n: N2 = n = 6.
Таким образом, общее количество слов
N = N1+N2 = 30+6 = 36.
5.4. Разбиения
Разбиение множества X из n элементов на k блоков – это формирование множества Q = {B1, …, Bk}, в котором B1 B2 ...
Bk = X , Bi ∩ Bj = , Bi ≠ для 1 ≤ i < j ≤ k. Обозначим множе-
ство всех разбиений множества X на k блоков через Πk(X), а через Π(X) – множество все разбиений.
Существует алгоритм построения разбиений, описанный в рекуррентной форме.
Можно показать, что разбиение Q множества {1, …, n} однозначно определяет разбиение Qn−1 множества {1, …, n−1}, которое получается из Q после удаления элемента n (или пустого блока) из соответствующего блока. Также если имеется разбиение W={B1, …, Bk} множества {1, …, n−1}, то можно отыскать все разбиения Q множества {1, …, n}, для которых Qn−1 = W, т.е. такие разбиения:
B1 {n},..., Bk ,
…
B1 ,..., Bk {n},
B1 ,..., Bk ,{n}.
Обозначим такую последовательность через E. Тогда алгоритм разбиений выглядит следующим образом: если у нас есть список
132
Ln−1 всех разбиений множества {1, …, n−1}, то список Ln разбиений множества {1, …, n} будем создавать, заменяя каждое разбиение Q
всписке Ln−1 на соответствующую ему последовательность E.
5.5.Формула включений и исключений
Рассмотрим классическую задачу о количестве элементов, получаемых при объединении множеств (рис. 5.1).
Рис. 5.1
Основная формула, по которой находят количество элементов в объединении двух множеств, вычисляется по диаграмме Эйлера– Венна, так как часть элементов принадлежат одновременно А и В и не могут учитываются дважды:
| A B |=| A | + | B | −| A ∩ B | .
Для трех множеств А, В и С формула пересчета выглядит следующим образом:
| A B C |=| A| +| B | +| C | −| A ∩ B | −| A ∩C | −
−| B ∩C | +| A ∩ B ∩C | .
Теорема 5.4 (формула включений и исключений). Если X1, X2, …, Xn некоторые множества и их мощность равна |X1|, |X2,|,…,|Xn|, тогда
| X1 X2 ... Xn |=| X1 | +| X2 | +...+ | Xn | − −{| X1 ∩ X2 | + | X1 ∩ X3 | +...+ | Xn−1 ∩ Xn |} + +{| X1 ∩ X2 ∩ X3 | +...+| Xn−2 ∩ Xn−1 ∩ Xn |} + +(−1)n−1 | X1 ∩ X2 ∩... ∩ Xn | .
Обобщая, получаем формулу включения и исключения для N объектов со свойствами, которыми эти объекты могут обладать или не обладать. Пусть имеется N объектов, которые могут обладать n
133
свойствами a1, a2,..., an. Обозначим через N (ai, aj,..., ak) число предметов, обладающих свойствами ai, aj,..., ak и, быть может, какимилибо другими свойствами. Тогда число N предметов, не обладающих ни одним из свойств, a1, a2,..., an, даётся формулой
N= N – N (a1) – N (a2) –... – N (an) + N (a1, a2) + N (a1, a3) +...
...+ N (an-1, an) – N (a1, a2, a3) –... – N (an-2, an-1, an) +...
...+(–1) n N (a1,..., an).
Задача 5.12. В аудитории находится несколько программистов. Шестеро знают VISIAL BASIC, шестеро – PHP, семеро умеют программировать на JAVA. Четверо знают VISIAL BASIC и PHP, трое
VISIAL BASIC и JAVA, двое – PHP и JAVA. Один из них умеет программировать на всех языках. Сколько человек в аудитории? Сколько из них знают только VISIAL BASIC?
Решение. По условию задачи каждый из присутствующих знает хотя бы один язык программирования.
Зададим PVB – свойство знать VISIAL BASIC, PP – свойство знать PHP, PJ – свойство знать JAVA.
Тогда количество программистов в аудитории n
n = n(PVB ) + n(PP ) + n(PJ ) + n(PVB & PP ) − n(PVB & PJ ) −
−n(PP & PJ ) + n(PVB & PP & PJ ) = 6 + 6 + 7 − 4 −3 − 2 +1 =11.
При этом по формуле включений и исключений получается, что людей, знающих только VISIAL BASIC, нет:
n(PVB , PP , PJ ) = n(PVB ) − n(PVB & PP ) − n(PVB & PJ ) +
+n(PVB & PP & PJ ) = 6 − 4 −3 +1 = 0.
5.6.Рекуррентные соотношения
При решении многих комбинаторных задач пользуются методом сведения данной задачи к другой задаче, решаемой для меньшего числа предметов. Метод сведения к аналогичной задаче для меньшего числа предметов называется методом рекуррентных соотношений (от латинского recurrere).
Понятие рекуррентных соотношений проиллюстрируем классическим решением определения чисел Фибоначчи.
134
Сам Фибоначчи в 1202 году поставил задачу в форме рассказа о скорости роста популяции кроликов при следующих предположениях. Все начинается с одной пары кроликов. Каждая пара становится фертильной через месяц, после чего каждая пара рождает новую пару кроликов каждый месяц. Кролики никогда не умирают, и их воспроизводство никогда не прекращается.
Пусть Fn – число пар кроликов в стае по прошествии n месяцев, и пусть эта стая состоит из Nn пар приплода и On «старых» пар, т.е.
Fn = N n + On .
Таким образом, в очередном месяце произойдут следующие события: On+1 = Nn + On = Fn . Старая стая в (n+1)-й момент увеличит-
ся на число родившихся кроликов в момент времени n. В последующий месяц эта картина повторяется:
On+2 = On+1 + Nn+1 = Fn+1, Nn+2 = On+1.
Объединяя эти равенства, получим следующее рекуррентное соотношение:
Fn+2 = On+2 + Nn+2 = Fn+1 + On+1 , Fn+2 = Fn+1 + Fn .
Будем предполагать F0 = 0, F1 =1(иногдаF0 = F1 =1 ).
Выбор начальных условий для последовательности чисел Фибоначчи не важен; существенное свойство этой последовательности определяется рекуррентным соотношением.
Иначе, это рекуррентное соотношение имеет вид:
F (n +1) = F (n) + F(n −1) ,
где F(n) – называются числа Фибоначчи.
Другим примером являются числа Каталана. Они появляются в контексте следующей задачи: нужно найти число различных последовательных действий, чтобы вычислить сумму S0, …, Sn, складывая любые два рядом стоящих числа и результат помещая на их место. Тогда если обозначить искомое число через Сn, то производящая функция будет выглядеть, как
Cn = C0Cn - 1 + C1Cn - 2 + C2Cn - 3 +...+ Cn - 2C1 + Cn - 1C0.
Для чисел Каталана известно и нерекуррентное соотношение:
135