Вы находитесь на странице: 1из 6

Конспект лекций по предмету “Проектирование алгоритмов”

Лекция 15

ВЫБОР СВОБОДНЫХ ВЕРШИН ГРАФА, РАСКРАСКА. ОПРЕДЕЛЕНИЕ


ПОДМНОЖЕСТВ МНОЖЕСТВА. ОБЪЕДИНЕНИЕ

При изучении теории графов, в разделе раскраски графов, мы


рассматривали вопросы раскраски вершин графов при условии, что-бы ни
одно ребро графа на имена вершины одного цвета. При этом возникал вопрос
определения минимального числа цветов необходимого для решения этой
задачи. Такая же задача возникает в задаче раскраски ребер графа при
условии. Что-бы ни в одной из вершин не пересекались ребра одного цвета.
Данную задачу можно решить визуально, при наличии геометрического
изображения графа, методом подбора.

Пусть задан граф G – с шестью вершинами V={1,2,3,4,5,6} и с


одиннадцатью ребрами U={a,b,c,d,e,f,g,h,k,e,n}.

Рисунок 1. 4 e

2 2 f

a 1 b 5 g1 3

2
1 c k 5 n

3
d 4 4

1 l

Одним из возможных вариантов раскраски вершин граф можно взять


следующую комбинацию. Вершину 1 раскрасим в зеленый цвет. Возникает
вопрос ещё какую из вершин можно раскрасить в зеленый цвет, то есть найти
свободную вершину. При этом получим вершину 3 так как вершины 2, 4, 5, 6
1
связаны с вершиной 1 ребрами. Таким образом раскрасили вершины 1 и 3 в
зеленый цвет. Для раскраски остальных вершин мы должны выбрать другой,
например желтый цвет для вершины 2. Таким образом мы раскрасили три
вершины 1, 2, 3. На следующем этапе мы пытаемся найти свободную, то есть
на связанную с этими вершинами вершину. Такой вершины нет,
следовательно придется выбрать ещё один новый цвет для раскраски. Так для
вершины 6 мы выберем красный цвет. Тогда соблюдая требования задачи для
вершины 4 можно выбрать желтый цвет, а для вершины 5 красный. В
результате приходим к выводу, что для раскраски вершин достаточно трех
цветов. Для автоматизации данного процесса необходимо составить
алгоритм выбора цветов вершин на основе матрицы смежности и составить
программу.

0 1 0 1
1 1
1 0 2 1
0 0

0 2 0 1
1 0
Aсм   
1 0 1 0
1 1
1 0 0 1 0 0
 
1 1 1 1 0 0

При раскраске ребер графа мы можем начать с вершины наибольшей


кратности и для исходящих из этой вершины ребер выбрать различные цвета.
Далее комбинировать эти цвета при раскраске остальных ребер, пока это
возможно. В частности для нашего примера получим вариант раскраски
ребер вида

a b c d e f g h k l n
1 2 3 4 4 2 1 3 4 1 5

Здесь цифрами 1,2,3,4,5, обозначены различные цвета.

Одним из практически актуальных проблем в информационной


технологии является вопрос определения количества необходимых символов
2
для решения задач определенного класса. С такой проблемой столкнулись и
на преддверии создания электронной вычислительных машин. Это проблема
имена как практический, техническая реализация, так и информационный
характер. С этой точки зрения наиболее приемлемым оказалась двоичная
система исчисления, которая строится на базе всего двоих цифр 0 и 1
строится вся информационная и операционная система. Чтобы прояснить
суть проблемы, мы рассмотрим вопросқ построения подмножеств некоторого
множества.

1. Пусть задано множество A={a1,a2,…,an} состоящее из n элементов.

Сколько различных подмножеств можно построить из элементов этого


множества? Будем исходить из мощности этих подмножеств. А 1 – множество
подмножеств состоящих из одного элемента. Количество таких подмножеств
будет равно n, так как таковыми будут {a1}, {a2},…,{an}. Для общности
можно рекомендовать формуле m(A1)=Cn1. Аналогично для Аk – множества
подмножеств состоящих из k элементов можно рекомендовать формулу
m(Ak)=Cnk. Таким образом для мощности множества всех подмножеств
множества состоящего из n множеств получим формулу

n
M   Cnk .
k 0

Примечание: Здесь Cn0  1 соответствует пустому множеству, Cnn  1


самому множеству А, которые тоже являются подмножествами множество А.
Для определения значения М вспомним формулу бинома Ньютона

n
 a  b    Cnk  a k  bnk .
n
(1)
k 0

Если в обеих частях формулы (1) принять a=1; b=1, то получим

n
 1  1   Cnk  М или М  2n .
n
(2)
k 0

3
Таким образом мы получили формулу для числа всех подмножеств. По виду
формулы (2) можно сделать вывод, что задача определения и хранения всех
подмножеств множества тоже относится к классу NP – задач и по времени и
по объему.

Формулу (2) можно классифицировать и по другому. Пусть у нас


имеется всего два символа a и b сколько слов длины n можно составить из
этих символов? Примечание: символы в слове могут повторяться и любая
последовательность символов воспринимается как слово, независимо от
наличия словарного смысла.

В результате мы получаем важную формулу для определения длины


машинного слова необходимой для изображения все важных символов
входящих в алфавит используемого алгоритмического языка. Из неравенства

N  2n  S

находим минимальное n, удовлетворяющее этому неравенству. Это и будет


длиной слова. Здесь S – количество символов языка.

В качестве длины слова компьютеров используется термин байт,


соответствующий восьми бит, где бит это один символ (0 или 1). Таким
образом если принять n=8 (один байт), получаем по формуле число
символов, которые можно при этом охватить.

N  28  256.

Это означает, что каждой десятичной цифре 0,1,2,…,9 латинской, или


русской букве, символам арифметических операций и т.д. отводится по
одному байту. Кодировка и расшиврока машинной информации
производится согласно принятому правилу кодировки.

С вопросами кодировки мы встречаемся и в сфере информационной


безопасности. В мире имеется огромное количество базы данных, к

4
некоторым из которых имеется свободный доступ. Мы можем в сфере
интернет пользоваться этим и получать информацию по многим вопросам.
Вместе с тем существуют такие сферы данных, к которым доступ должен
быть ограничен. В таких случаях, в целях защиты пользуются различными
шифрами (паролями), которые играют роль замка. Надежность замка
оценивается числом возможных вариантов, после перебора которых
случайный пользователь может проникнуть в эту базу. Так называемым
хакерам иногда удается проникнуть в такие базы данных. Следствием чего
может быть утечка ценной информации или больших сумм денег. Все это
требует совершенствования систем безопасности информации.

Мы здесь остановимся только на вариантах использования цифр и букв


для выбора пароля. Для этого определим число вариантов при выбора пароля
в виде n злачного десятичного числа. При этом число вариантов будет

N  10n (3)

так как возможные варианты при этом будут

  n  
 0,0,0,...,0
 0,0,0,...,0,1

 9,9,9,...,9 .
Если пароль строить из букв и цифр, например первые два символа
буквы латинского алфавита остальные четыре символа десятичные цифры, то
числов возможных вариантов будет N  262  104  6760000.

Из формулы (3) и примера видим что и в этом случае мы сталкиваемся


с задачи NP – класса. Так, если увеличить число символов пароля при
сохранении так же 26 букв и 10 цифр, то получим для числа вариантов
пароля при n символик, k из которых цифры

5
N  26nk  10k . (4)

Как видим, здесь тоже получаем алгоритм экспоненциальной сложности.

С алгоритмами такого типа мы встречаемся и при обработке текстовой


информации на определенном языке. При этом символами будут буквы
соответствующего языка и они составляют множество. Любое подмножество
элементов расположенное в определенном порядке представляет слово. Оно
может быть и смысловым или просто последовательность символов. Если
число символов алфавита равно m, то число слов из k букв будет

N k  mk .

Тогда число всех слов состоящих из не более n букв будет

n
N   mk .
k 1

При составлении энциклопедических словарей языка мы сталкиваемся


с задачей обработки такого объема информации. При m=26 и n=6 по формуле
(5) получим

N=321272406.

Отметим, что если возьмем n=7, то есть добавим слова состоящие из семи
букв, то к этой информации добавляется ещё информация о 8.031.810.176
словах. Нетрудно представить себя с какой сложной проблемой
сталкиваются специалисты составляющие программы обработки таких
данных или программ перевода с одного языка на другой. Хотя для человека
знающего эти языки задача кажется элементарной но с точки зрения
программной реализации эти задачи относится к достаточно сложным задача.