
- •Лекция: Предварительные сведения
- •Множества
- •Операции над множествами
- •Как доказывать равенство множеств?
- •Отношения и функции. Мощность множества
- •2. Лекция: Индукция и комбинаторика Содержание
- •Метод математической индукции
- •Элементы комбинаторики
- •Размещения, перестановки, сочетания
- •Принцип включения и исключения
- •Лекция: Булевы функции и их представления Содержание
- •Булевы функции от n переменных
- •Геометрическое представление
- •Табличное представление
- •Булевы функции от 1-ой и 2-х переменных
- •Формулы
- •Булевы функции и логика высказываний
- •Эквивалентные преобразования формул Соглашения об упрощенной записи формул.
- •Дизъюнктивные и конъюнктивные нормальные формы Определение днф и кнф
- •Совершенные днф и кнф
- •Сокращенные днф
- •Многочлены Жегалкина
- •Лекция: Полные системы функций и теорема Поста Содержание
- •Замкнутые классы функций
- •Критерий полноты (теорема Поста)
- •6. Лекция: Хорновские формулы и задача получения продукции Содержание
- •Хорновские формулы
- •Задача получения продукции
- •Решение задачи о продукции
- •Алгоритм замыкание(X,f)
- •Алгоритм ПрямаяВолна(X,y,f)
- •Алгоритм БыстроеЗамыкание(X,f)
- •Лекция: Язык логики предикатов
- •Утверждения о свойствах объектов и отношениях между ними
- •Язык логики предикатов
- •Синтаксис: формулы логики предикатов
- •Семантика: системы и значения формул на их состояниях
- •Эквивалентные формулы и нормальные формы
Алгоритм БыстроеЗамыкание(X,f)
I) Инициализация:
1. ДЛЯ КАЖДОГО процесса t F ВЫПОЛНЯТЬ
2. { СЧЕТ[t] := |Lt|;
3. ДЛЯ КАЖДОГО a Lt ВЫПОЛНЯТЬ
4. добавить t в СПИСОК[a];
5. } ;
6. НОВЫЕ := X; ОБНОВА := X;
II) Вычисление:
7. ПОКА ОБНОВА ВЫПОЛНЯТЬ
8. { выбрать a ОБНОВА; ОБНОВА := ОБНОВА \ {a};
9. ДЛЯ КАЖДОГО t СПИСОК[a] ВЫПОЛНЯТЬ
10. { СЧЕТ[t] := СЧЕТ[t] - 1;
11. ЕСЛИ СЧЕТ[t] = 0
12. ТО
13. ЕСЛИ {bt} НОВЫЕ
14. ТО { НОВЫЕ := НОВЫЕ { bt};
15. ОБНОВА := ОБНОВА {bt} }
16. }
17. };
18. вернуть(НОВЫЕ).
Следующая теорема утверждает корректность приведенного алгоритма.
Теорема
6.3.
Алгоритм БыстроеЗамыкание(X,F) строит
замыкание
.
Доказательство этого утверждения аналогично доказательству теоремы 6.2 (см. задачу 6.3).
Отметим, что число шагов алгоритма БыстроеЗамыкание(X,F) пропорционально размеру его входа, т.е. числу продуктов в F и X или числу букв в записи формулы (*). Такие алгоритмы называются работающими в линейное (от размера входа) время или, просто, линейными. Действительно, при инициализации каждый элемент F рассматривается 2 раза, а в основном цикле общее число рассматриваемых элементов и операций уменьшения на 1 значений СЧЕТ[t] в стр.10 алгоритма не больше суммы размеров всех Lt, т.е. также не превосходит размера входа.
Пример 6.3. Рассмотрим работу алгоритма БыстроеЗамыкание на следующем примере. Пусть A={a, b, c, d, e, f, g, h}, X = { b,f}, а множество F состоит из следующих 6 процессов:
a,b,c,h d;
b,c,d a;
g,b e;
e,f c;
f,e d;
b,f g.
Тогда при инициализации будут построен массив СЧЕТ = [4, 3, 2, 2, 2, 2] и следующие списки:
Множества ДОБАВКА и НОВЫЕ будут инициализированы в стр. 6 булевскими массивами 01000100 с 1 на местах, соответствующих продуктам b и f. Дальнейшие изменения этих структур представлены в следующей таблице.
СЧЕТ |
ДОБАВКА |
НОВЫЕ |
|||||
1 |
2 |
3 |
4 |
5 |
6 |
abcdefgh |
abcdefgh |
4 |
3 |
2 |
2 |
2 |
2 |
01000100 |
01000100 |
3 |
2 |
1 |
2 |
2 |
1 |
00000100 |
01000100 |
3 |
2 |
1 |
1 |
1 |
0 |
00000010 |
01000110 |
3 |
2 |
0 |
1 |
1 |
0 |
00001000 |
01001110 |
3 |
2 |
0 |
0 |
0 |
0 |
00110000 |
01111110 |
2 |
1 |
0 |
0 |
0 |
0 |
00010000 |
01111110 |
2 |
0 |
0 |
0 |
0 |
0 |
10000000 |
11111110 |
1 |
0 |
0 |
0 |
0 |
0 |
00000000 |
11111110 |
Алгоритм завершает работу, когда множество ДОБАВКА становится пустым. В этот момент результат Cl(X,F) представлен множеством НОВЫЕ. В нашем примере оно равно {a,b,c, d,e,f,g}.
Задачи
Задача 6.1. Докажите, что последовательность процессов τi в доказательстве теоремы 6.1 определена корректно, т.е. все исходные продукты каждого процесса в этой последовательности имеются перед его запуском.
Задача 6.2. Докажите теорему 6.2.
Указание. Пусть Xk - это состояние множества НОВЫЕ после k итераций основного цикла алгоритма ЗАМЫКАНИЕ в строках 2-6. Покажите, что для каждого продукта z Cl(X,F), который может быть получен из X последовательностью процессов длины k, z входит в Xk.
Задача 6.3. Алгоритм ПрямаяВолна(X,y,F) позволяет ответить на вопрос о возможности производства y из исходных продуктов X с помощью процессов F, но в случае положительного ответа не строит последовательность процессов, приводящую к y. Измените алгоритм ЗАМЫКАНИЕ(X,F) так, чтобы по его результату для любого продукта a Cl(X,F) можно было построить последовательность процессов, приводящую к a.
Задача 6.4. Назовем сложным технологическим процессом (или производством)} такой процесс t, который по набору исходных продуктов Lt производит некоторое множество продуктов Bt (а не один продукт bt). Обобщите алгоритм ЗАМЫКАНИЕ(X,F) так, чтобы он строил замыкание X относительно системы сложных технологических процессов F.
Задача 6.5. Определите, какая последовательность процессов в примере 6.3 приводит к получению a.
Задача 6.6. Используя алгоритм ЗАМЫКАНИЕ (X,F), вычислить замыкание для набора исходных продуктов X = { c,d} и следующей системы технологических процессов F:
a,b,d h;
a,c,d,g f;
d,g b;
e,f c;
b,k a;
d,c k;
h,d,c g;
d,g ,a e;
c, d, k h.
Определите, какая последовательность процессов приводит к получению e.
Задача 6.7. Докажите теорему 6.3.
Указание. Пусть Xk - это состояние множества НОВЫЕ после k итераций основного цикла алгоритма БыстроеЗамыкание в строках 7-17. Покажите, что
если на (k+1)-ой итерации основного цикла для некоторого процесса t обнаруживается, что СЧЕТ[t] = 0, то Lt Xk;
для каждого продукта z Cl(X,F), который может быть получен из X последовательностью процессов длины k, z входит в Xk;
условие ОБНОВА = выхода из основного цикла выполнено после (k+1)-ой итерации тогда и только тогда, когда Xk= Xk+1.
Задача 6.8. Измените алгоритм БыстроеЗамыкание так, чтобы по его результату для любого продукта a Cl(X,F) можно было построить последовательность процессов, приводящую к a.
Задача 6.9. Используя алгоритм БыстроеЗамыкание, вычислить замыкание для набора исходных атрибутов X = { a,f} и следующей системы зависимостей F:
a,b,c h;
a,c,d,g h;
e,f c;
f,a d;
g,d e;
d,f ,a g.
Определите, какая последовательность процессов приводит к получению h