Слайд 2Булевские функции. Инъективные, сюръективные и биективные функции. Обратимая функция
Множество
M с двумя введенными бинарными операциями (Ù-конъюнкцией ,Ú - дизъюнкцией), одной
унарной операцией (* - отрицанием. которая обозначается либо звёздочкой, либо чертой над элементом или выражением, или знаком минус перед рассматриваемым элементом) и двумя выделенными элементами называется булевой алгеброй, если выполнены следующие свойства (аксиомы булевой алгебры).
1. X Ù Y = YÙX, X Ú Y = Y Ú X – коммутативность.
2. (X Ù Y) Ù Z = X Ù (Y Ù Z), (X Ú Y) Ú Z = X Ú (Y Ú Z) – ассоциативность.
3. (X Ú Y) Ù Z = (X Ù Z) Ú (Y Ù Z), (X Ù Y) Ú (Y Ù Z) = (X Ú Z) Ù (Y Ù Z) – дистрибутивность.
4. Поглощение – X Ù X = X, X Ú X = X.
5. Свойства констант
X Ù 0 = 0
X Ù I = X, где I – аналог универсального множества.
6. Инвальтивность (двойное отрицание) (X*)* = X
7. Дополнимость X Ú X* = I, X Ù X* = 0.
8. Законы двойственности(законы де Моргана): (X Ù Y)* = X* Ú Y*, (X Ú Y)* = X* Ù Y*
Булева алгебра 2n всех подмножеств данного множества.
U = {a1, a2… an}
[U] = N - мощность U
[P(U)] = 2n - мощность подмножеств P множества U
Легко показать, что свойства операций над множествами совпадают со свойствами (аксиомами) булевой алгебры. То есть, множество P(U) с операциями объединения, пересечения и дополнения является булевой алгеброй.
Oбъединение эквивалентно Ú, пересечение - Ù дополнение - *, пустое множество – 0, а универсальное – I.
Все аксиомы булевой алгебры справедливы в операциях над множествами.
Различные определения булевой алгебры, включают: булевы алгебры - это частично- упорядоченные множества специального типа: булева алгебра - это алгебраическая система, которая в зависимости от обстоятельств может быть интерпретирована либо как система событий, либо как система высказываний, либо как дистрибутивная структура , то есть структура с двумя операциями, с неравными друг другу единицей (1) и нулём (0), в которой всякий элемент имеет дополнение
Формы представления булевой алгебры включают формы характеристических векторы, формы высказываний, формы множеств.
Слайд 19Анализ алгоритмов обхода
При разработке алгоритмов обходы мы стремились к
тому, чтобы посещать каждую вершину связного графа в точности один
раз. Посмотрим сначала, удалось ли нам этого достичь. При обходе по уровням мы начинали с исходной вершины и шли по всем доступным ребрам, если только вершина на втором конце ребра не оказывалась уже посещенной. Приводит ли это к каким-либо трудностям? Любой из узлов, в который можно попасть из данного, окажется посещенным - но вдоль самого прямого пути. Вернувшись к графу на рис. 1, мы замечаем, что мы не возвращались к узлу 8 после посещения узлов 2 и 3. Однако все те узлы, до которых можно добраться из вершины 8, оказываются посещенными, поскольку мы дошли до этой вершины на более раннем проходе. С другой стороны, может и в связном графе оказаться узел, до которого мы не дошли? Поскольку при каждом проходе мы делаем один шаг от вершин, посещенных на предыдущем проходе, узел может оказаться непосещенным только, если он не является соседом никакого из посещенных узлов. Но это означало бы, что граф несвязен, что противоречит нашему предположению; значит мы посетим все узлы.
Аналогичное рассуждение справедливо и для обхода в глубину. В этом случае мы заходим вглубь графа пока не наткнемся на тупик. Посетим ли мы, возвращаясь, все остальные узлы? Может ли так получиться, что в какую-то из вершин графа мы не зайдем? При каждом попадании в тупик мы возвращаемся до первого узла, из которого есть проход к еще не посещенному узлу. Тогда мы следуем этим проходом и снова идем по графу в глубину. Встретив новый тупик, мы вновь возвращаемся назад, пока не наткнемся на первую вершину с еще не посещенным соседом. Чтобы одна из вершин графа осталась непосещенной, нужно, чтобы она не была соседней ни для одной из посещенных вершин. А это и означает, что граф несвязен вопреки наши предположениям. При обходе в глубину мы также должны посетить все узлы.
Что можно сказать про эффективность такого алгоритма? Будем предполагать, что основная часть всей работы приходится на посещение узла. Тогда расходы на проверку того, посещали ли мы уже данный узел, и на переход по ребру можно не учитывать. Поэтому порядок сложности алгоритма определяется числом посещений узлов. Как мы уже говорили, каждая вершина посещается в точности один раз, поэтому на графе с N вершинами происходит N посещений. Таким образом, сложность алгоритма равна O(N).