Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

31

.pdf
Скачиваний:
5
Добавлен:
10.02.2016
Размер:
668.73 Кб
Скачать

x2

1

x5

 

 

 

 

2

0

2

 

x1

x4

x3

1

 

 

ϕ =3 (0,1,2)

 

рис.10.2.

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

X1

X2

X3

X4

X5

M

1

 

 

 

1

Y1

 

1

1

 

 

Y2

 

 

1

 

 

Y3

Несмежные вершины выбраны в таблице единицами. Далее решается задача построения одного кратчайшего покрытия (методом минимального столбца максимальной строки). Вершины, принадлежащие каждому подмножеству, вошедшему в найденное кратчайшее покрытие, окрашивается одной краской. Если некоторая вершина принадлежит нескольким вошедшим в покрытие подмножествам, то она в одном остаётся, из остального исключается.

Для нашего примера получим два подмножества: Y1,Y2,Y3 . Таким образом, получим три краски 0,1,2 соответственно. И действительно (как показано на рисунке 4.5.1): если x1 покрасить краской 0, то все смежные с ней вершины x2 , x3, x4 , x5 нельзя покрасить 0. x2 , x4 - смежные, для них необходимо две разные краски (1 и 2), x3, x4 - аналогично. Таким образом, изображенная на примере раскраска – минимальна.

Контрольные задачи.

1. Найти компоненты связности графа. Граф задан матрицей смежности.

 

 

1

 

X1

X2

X3

 

X4

X5

X6

X7

X8

X8

X10

X11

 

 

X1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

X2

 

 

 

 

1

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

X3

 

 

1

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

X4

 

 

 

 

 

 

 

1

 

 

 

 

 

 

1

 

 

 

 

 

 

X5

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X6

 

 

 

 

1

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

X7

 

 

1

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

X8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

X9

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X10

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

X11

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

1

 

 

 

 

2

 

X1

X2

X3

 

X4

X5

X6

X7

X8

X8

X10

X11

 

 

X1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

X2

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

X4

 

 

1

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

X5

1

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X6

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

1

 

 

 

 

X7

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

1

 

 

X8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

X9

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

X10

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

1

 

 

X11

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

X1

X2

X3

X4

X5

X6

X7

X8

X8

X1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

X1

 

 

 

 

1

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

X2

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

 

 

 

 

 

X3

 

1

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X4

 

 

 

 

1

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

X5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

X6

 

1

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X7

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

X8

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X9

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

X1

 

1

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Найти систему независимых циклов графа. Граф задан матрицей отношений.

1

X1

X2

X3

X4

X5

X6

X7

 

 

2

X1

X2

X3

X4

X5

X6

X7

 

X1

 

 

1

1

1

 

 

 

 

 

 

 

 

X1

 

 

1

1

 

 

 

 

1

 

 

 

X2

 

1

 

 

 

 

 

 

1

1

 

 

 

 

X2

 

1

 

 

1

 

 

 

 

 

 

 

 

 

X3

 

1

 

 

 

 

 

 

1

1

 

 

 

 

X3

 

1

1

 

 

1

 

 

 

 

 

 

 

X4

 

1

 

 

 

 

 

 

1

 

 

 

 

 

 

X4

 

 

 

 

1

 

 

 

 

 

 

 

 

 

X5

 

 

1

1

1

 

 

 

 

1

 

 

X5

 

 

 

 

 

 

 

 

 

 

1

 

 

 

X6

 

 

1

1

 

 

 

 

 

 

1

 

 

X6

 

1

 

 

 

 

 

 

1

 

 

1

 

X7

 

 

 

 

 

 

 

 

1

1

 

 

 

 

X7

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

X1

X2

X3

X4

X5

X6

X7

4

X1

X2

X3

X4

X5

X6

X7

 

X1

 

 

1

 

1

 

 

 

 

 

 

 

 

 

 

 

X1

 

1

 

1

 

1

 

 

 

 

 

 

 

 

X2

1

 

 

 

 

 

 

1

 

 

 

 

 

 

 

X2

1

 

 

 

1

 

 

 

1

 

 

 

 

 

 

X3

1

 

 

 

 

 

1

1

1

1

 

 

X3

1

1

 

 

 

 

 

1

 

 

1

 

 

X4

 

 

 

 

1

 

 

1

 

 

 

 

 

 

 

X4

1

 

 

 

 

 

 

 

 

 

1

 

 

 

 

X5

 

 

1

1

 

1

 

 

 

 

 

1

 

 

X5

 

1

1

 

 

 

 

 

1

1

 

 

X6

 

 

 

 

1

 

 

 

 

 

 

1

 

 

 

X6

 

 

 

 

 

 

1

 

1

 

 

 

 

 

 

X7

 

 

 

 

1

 

 

1

 

1

 

 

 

 

 

X7

 

 

 

 

1

 

 

 

1

 

 

 

 

 

3. Раскрасить граф, представленный в задании 2.

Практическая работа №11.

Тема: Сортировка.

Цель: Изучить основные методы сортировки.

Под сортировкой обычно понимают процесс перестановки объектов данного множества в определенном порядке. Цель сортировки – облегчить последующий поиск элементов в отсортированном множестве.

Сортировка простыми включениями.

Этот метод обычно используют игроки в карты. Элементы (карты) условно разделяются на готовую последовательность a1,..., ai1 и входную последовательность ai ,...,an . На каждом шаге, начиная с i=2 и увеличивая i на

единицу, берут i-й элемент входной последовательности и передают в готовую последовательность, вставляя его на подходящее место. Пример сортировки простыми включениями показан в таблице 11.1 на примере восьми случайно взятых чисел.

Таблица 11.1.

Н а ч а л ь н ы е к л ю ч и

4 4

5 5

1 2

4 2

9 4

1 8

0 6

6 7

 

 

 

 

 

 

 

 

 

 

i = 2

4 4

5 5

1 2

4 2

9 4

1 8

0 6

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i = 3

1 2

4 4

5 5

4 2

9 4

1 8

0 6

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i = 4

1 2

4 2

4 4

5 5

9 4

1 8

0 6

6 7

 

 

 

 

 

 

 

 

 

 

 

 

i = 5

1 2

4 2

4 4

5 5

9 4

1 8

0 6

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i = 6

1 2

1 8

4 2

4 4

5 5

9 4

0 6

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i = 7

0 6

1 2

1 8

4 2

4 4

5 5

9 4

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i = 8

0 6

1 2

1 8

4 2

4 4

5 5

6 7

9 4

Алгоритм сортировки простыми включениями выглядит следующим образом:

for i :=2 to n do begin x:= a[i];

{ вставить x на подходящее место в a1,..., ai } end;

При поиске подходящего места удобно чередовать сравнения и пересылки, т.е. как бы "просеивать" x, сравнивая его с очередным элементом ai и либо вставляя x, либо пересылая ai направо и продвигаясь налево. Заметим, что "просеивание" может закончиться при двух различных условиях:

1.Найден элемент ai с ключом меньшим, чем ключ x.

2.Достигнут левый конец готовой последовательности.

Этот типичный пример цикла с двумя условиями окончания дает нам возможность рассмотреть хорошо известный прием фиктивного элемента ("барьера"). Его можно легко применить в этом случае, установив барьер a0 = x .

(Заметим, что для этого нужно расширить диапазон индексов в описании а до

0, ...,n.)

 

 

Словесное описание алгоритма.

 

0. В готовую

под последовательность записывается a1 , во входную

a2,..., an .

 

 

1. i=2.

элемент x=ai

 

2. Переносим

из входной под последовательности в

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

Для этого:

а) расширяем готовую под последовательность слева : a0 = х- барьер.

б) просматривая элементы готовой под последовательности слева направо, находим такой номер j, что ai <=x<ai+1 .

в) если j=j-1, то переходим к пункту г), иначе расширяем готовую под последовательность справа, сдвигая ее элементы, начиная с aj , вправо .

г) aj+1 =x .

3. i=i+1 . Если i =n, то переходим на пункт 2, иначе сортировка заканчивается.

Алгоритм сортировки простыми включениями легко можно улучшить, пользуясь тем, что готовая последовательность a1,..., ai1 , в которую нужно включить новый элемент, уже упорядочена. Поэтому место включения можно найти значительно быстрее. Очевидно, что здесь можно применить бинарный поиск, который исследует средний элемент готовой последовательности и продолжает деление пополам, пока не будет найдено место включения. Модифицированный алгоритм сортировки называется сортировкой бинарными включениями.

Сортировка простым выбором. Этот метод основан на следующем правиле:

1.Выбирается элемент с наименьшим ключом.

2.Он меняется местами с первым элементом a1 .

Эти операции затем повторяются с оставшимися n-1 элементами, затем с n-2 элементами, пока не останется только один элемент – наибольший. Этот метод продемонстрирован на тех же восьми ключах в табл. 11.2.

Таблица 11.2.

Н а ч а л ь н ы е к л ю ч и

4 4

5 5

1 2

4 2

9 4

1 8

0 6

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 6

5 5

1 2

4 2

9 4

1 8

4 4

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 6

1 2

5 5

4 2

9 4

1 8

4 4

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 6

1 2

1 8

4 2

9 4

5 5

4 4

6 7

 

0 6

1 2

1 8

4 2

9 4

5 5

4 4

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 6

1 2

1 8

4 2

4 4

5 5

9 4

6 7

 

0 6

1 2

1 8

4 2

4 4

5 5

9 4

6 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 6

1 2

1 8

4 2

4 4

5 5

6 7

9 4

Программу можно представить следующим образом:

for i :=1 to n-1 do begin

{ присвоить k индекс наименьшего элемента из a[i]... a[n]; } { поменять местами ai и ak }

end;

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

Словесное описание алгоритма.

1.i =1

2.k присваивается индекс наименьшего элемента под последовательности

ai,..., an .

3.ai и ak обмениваются местами .

4.i = i +1 . Если i n, то переход на пункт 2., иначе сортировка закончена.

Контрольные задачи.

1. Отсортировать заданный массив элементов М с помощью метода простыми включениями.

а) по возрастанию, b) по убыванию: 1.М={30,4,53,1,0,22,100,3}; 2.М={8,4,53,1,20,22,100,3}; 3.М={30,40,53,1,7,22,10,3}; 4.М={30,4,3,12,0,22,10,35};

5.М={30,4,3,1,0,22,10,50};

6.М={130,4,5,1,0,22,100,3}; 7.М={30,4,73,1,50,22,10,23};

8.М={32,14,53,1,0,122,10,3};

9.М={30,4,53,11,60,22,1,3};

10.М={0,4,5,1,50,2,100,3}; 11.М={30,24,53,1,70,2,14,3}; 12.М={30,4,3,1,8,22,10,9};

2.Отсортировать заданный в пункте 1. массив М методом бинарного включения: а) по возрастанию, b) по убыванию.

Практическая работа №12.

Тема: Сортировка (продолжение).

Цель: Изучить основные методы сортировки. Сортировка простым обменом.

Классификация методов сортировки не всегда четко определена. Оба представленных ранее метода можно рассматривать как сортировку обменом. Однако в этом разделе мы остановимся на методе, в котором обмен двух элементов является основной характеристикой процесса. Приведенный ниже алгоритм сортировки простым обменом основан на принципе сравнения и обмена пары соседних элементов до тех пор, пока не будут рассортированы все элементы. Как и в предыдущих методах простого выбора, мы совершаем повторные проходы по массиву, каждый раз просеивая наименьший элемент оставшегося множества, двигаясь к левому концу массива. Если, для разнообразия, мы будем рассматривать массив, расположенный вертикально, а не горизонтально и - при помощи некоторого воображения представим себе элементы пузырьками в резервуаре с водой, обладающими "весами", соответствующими их ключам, то каждый проход по массиву приводит к "всплыванию" пузырька на соответствующий его весу уровень (см. табл. 12.1).

Таблица 12.1.

Н ачальны е

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

клю чи

 

 

i= 2

 

 

i= 3

 

 

 

 

i= 4

 

i= 5

 

i= 6

 

i= 7

i= 8

-----------------------------------------------------------------------------

 

4 4

 

 

0 6

0 6

 

0 6

 

0 6

0 6

0 6

0 6

 

 

 

 

5 5

 

4 4

 

 

1 2

 

1 2

 

1 2

1 2

1 2

1 2

1 2

 

5 5

 

4 4

 

 

 

1 8

 

1 8

1 8

1 8

1 8

4 2

 

1 2

 

5 5

 

 

4 4

 

 

4 2

4 2

4 2

4 2

 

 

 

9 4

 

4 2

 

 

1 8

 

 

5 5

 

4 4

 

4 4

4 4

4 4

1 8

 

9 4

 

4 2

 

4 2

 

5 5

5 5

 

5 5

5 5

 

 

0 6

 

 

1 8

 

9 4

 

 

 

 

6 7

 

6 7

6 7

6 7

6 7

 

 

 

 

 

 

6 7

 

6 7

6 7

 

 

9 4

 

9 4

9 4

9 4

9 4

 

 

 

Этот метод широко известен как сортировка методом пузырька. Словесное описание алгоритма.

1.i =2.

2.Просматривается каждая пара рядом стоящих элементов ai,..., an ,

начиная от конца ( от n к I ). Если элемент с меньшим номером больше элемента с большим номером, то они обмениваются местами.

3. i = i +1. Если i = n,то переход на пункт 2, иначе сортировка закончена. Возможна другая формулировка пункта 2:

2. Просматривается каждая пара рядом стоящих элементов ai,..., an , начиная от конца (от n к i ). Если aj aj1 aj-1 (j=n,… i ), то aj меняется

местами с aj1

Этот алгоритм легко оптимизировать. Пример в табл.2.3. показывает, что три последних прохода никак не влияют на порядок элементов, поскольку те уже рассортированы. Очевидный способ улучшить данный алгоритм – это

запоминать, производился ли на данном проходе какой-либо обмен. Если нет, то это означает, что алгоритм закончил работу. Этот процесс улучшения можно продолжить, если запоминать не только сам факт обмена, но и место (индекс)

последнего обмена. Ведь ясно, что все пары соседних элементов с индексами, меньшими этого индекса k, уже расположены в нужном порядке. Поэтому следующие проходы можно заканчивать на этом индексе, вместо того чтобы двигаться до установленной заранее нижней границы i. Однако внимательный программист заметит здесь странную асимметрию: один неправильно расположенный «пузырек» в «тяжелом» конце рассортированного массива всплывет на место за один проход, а неправильно расположенный элемент в «легком» конце будет опускаться на правильное место только на один шаг на каждом проходе.

Например, массив

12 18 42 44 55 67 94 06

будет рассортирован при помощи метода пузырька за один проход, а сортировка массива

94 06 12 18 42 44 55 67

потребует семи проходов. Эта неестественная асимметрия подсказывает третье улучшение: менять направление следующих один за другим проходов. Мы назовем полученный в результате алгоритм шейкер-сортировкой. Его работа показана в табл. 12.2 на тех же восьми ключах, которые использовались в табл.12.1.

Таблица 12.2

l =

2

3

3

4

4

r =

8

8

7

7

4

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

4 4

 

 

0 6

 

0 6

0 6

 

0 6

 

 

 

 

5 5

 

4 4

 

4 4

 

1 2

 

1 2

1 2

 

5 5

 

 

1 2

 

 

4 4

 

1 8

 

 

 

 

 

4 2

 

1 2

 

 

4 2

 

 

1 8

 

4 2

 

 

 

9 4

 

4 2

 

 

 

5 5

 

4 2

 

 

4 4

 

 

 

 

1 8

 

9 4

 

 

1 8

 

 

5 5

 

5 5

 

 

 

 

 

0 6

 

1 8

 

 

6 7

6 7

 

6 7

 

 

 

 

6 7

 

6 7

 

 

 

9 4

9 4

 

9 4

 

 

 

 

Словесное описание алгоритма. 1. l =2 , r = n.

2.Просматривается каждая пара рядом стоящих элементов под последовательность ai ,...,ar , начиная от конца: если aj a j1 (j= l ,…, r ), то aj

меняется местами с a j1 .

3. l = j+1, где j – номер элемента aj при последнем обмене.

4.Просматривается каждая пара рядом стоящих элементов под последовательности ai ,...,ar от начала : если aj a j1 ( j= l ,…,r ), то aj

меняется местами с a j1 .

5.r = j-1 , где j – номер элемента aj при последнем обмене.

6.Если r = l , то переходим на пункт 2, иначе сортировка окончена.

Контрольные задачи.

1. Отсортировать заданный массив элементов М методом “пузырька”: а) по возрастанию, b) по убыванию:

1.М={30,4,53,1,0,22,100,3};

2.М={8,4,53,1,20,22,100,3};

3.М={30,40,53,1,7,22,10,3};

4.М={30,4,3,12,0,22,10,35};

5.М={30,4,3,1,0,22,10,50};

6.М={130,4,5,1,0,22,100,3}; 7.М={30,4,73,1,50,22,10,23};

8.М={32,14,53,1,0,122,10,3};

9.М={30,4,53,11,60,22,1,3};

10.М={0,4,5,1,50,2,100,3};

11.М={30,24,53,1,70,2,14,3};

12.М={30,4,3,1,8,22,10,9}; 2 Отсортировать заданный в пункте 1. массив М шейкер-сортировкой: а) по

возрастанию, b) по убыванию.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]