Тверской государственный университет
Опубликован: 21.08.2007 | Доступ: свободный | Студентов: 3170 / 268 | Оценка: 4.08 / 3.92 | Длительность: 15:40:00
ISBN: 978-5-9556-0110-6
Специальности: Программист, Математик
Лекция 6:

Хорновские формулы и задача получения продукции

< Лекция 5 || Лекция 6: 123 || Лекция 7 >

Алгоритм БыстроеЗамыкание(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) строит замыкание Cl(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 процессов:

  1. a,b,c,h -> d;
  2. b,c,d -> a;
  3. g,b -> e;
  4. e,f -> c;
  5. f,e -> d;
  6. b,f -> g.

Тогда при инициализации будут построен массив СЧЕТ = [4, 3, 2, 2, 2, 2] и следующие списки:

\begin{array}{lll}
СПИСОК[a] = (1)        &      СПИСОК [d] = (2) &  СПИСОК[g] = (3 )\\
СПИСОК[b] = (1, 2, 3, 6)  & СПИСОК[e] = (4, 5)  &  СПИСОК [h] = (1) \\
СПИСОК[c] = (1,2)     &    СПИСОК [f] = (4, 5, 6)
\end{array}

Множества ДОБАВКА и НОВЫЕ будут инициализированы в стр. 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. Докажите, что последовательность процессов \tau _{i} в доказательстве теоремы 6.1 определена корректно, т.е. все исходные продукты каждого процесса в этой последовательности имеются перед его запуском.

Задача 6.2. Докажите теорему 6.2.

Указание. Пусть Xk - это состояние множества НОВЫЕ после k итераций основного цикла алгоритма ЗАМЫКАНИЕ в строках 2-6. Покажите, что для каждого продукта z \in  Cl(X,F), который может быть получен из X последовательностью процессов длины k, z входит в Xk.

Задача 6.3. Алгоритм ПрямаяВолна(X,y,F) позволяет ответить на вопрос о возможности производства y из исходных продуктов X с помощью процессов F, но в случае положительного ответа не строит последовательность процессов, приводящую к y. Измените алгоритм ЗАМЫКАНИЕ(X,F) так, чтобы по его результату для любого продукта a \in  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:

  1. a,b,d -> h;
  2. a,c,d,g -> f;
  3. d,g -> b;
  4. e,f -> c;
  5. b,k -> a;
  6. d,c -> k;
  7. h,d,c -> g;
  8. d,g ,a -> e;
  9. c, d, k -> h.

Определите, какая последовательность процессов приводит к получению e.

Задача 6.7. Докажите теорему 6.3.

Указание. Пусть Xk - это состояние множества НОВЫЕ после k итераций основного цикла алгоритма БыстроеЗамыкание в строках 7-17. Покажите, что

  • если на (k+1) -ой итерации основного цикла для некоторого процесса t обнаруживается, что СЧЕТ[t] = 0, то L_{t} \subseteq  X_{k} ;
  • для каждого продукта z \in  Cl(X,F), который может быть получен из X последовательностью процессов длины k, z входит в Xk ;
  • условие ОБНОВА = \varnothing выхода из основного цикла выполнено после (k+1) -ой итерации тогда и только тогда, когда Xk= Xk+1.

Задача 6.8. Измените алгоритм БыстроеЗамыкание так, чтобы по его результату для любого продукта a \in  Cl(X,F) можно было построить последовательность процессов, приводящую к a.

Задача 6.9. Используя алгоритм БыстроеЗамыкание, вычислить замыкание для набора исходных атрибутов X = { a,f} и следующей системы зависимостей F:

  1. a,b,c -> h;
  2. a,c,d,g -> h;
  3. e,f -> c;
  4. f,a -> d;
  5. g,d -> e;
  6. d,f ,a -> g.

Определите, какая последовательность процессов приводит к получению h.

< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Елена Алексеевская
Елена Алексеевская

Это в лекции 3.

Татьяна Дембелова
Татьяна Дембелова

Почему в вводной лекции курса Основы дискретной математики одним из свойств отношения частичного порядка упоминается антирефлексивность? Посмотрела в других источниках, там -0  рефлексивность... http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0