Разделы презентаций


Лекция 7_2 непересекающиеся подмножества.ppt

Содержание

31.03.2014Непересекающиеся подмножестваОперации с непересекающимися подмножествамиЖадный алгоритм нахождения МОД (фрагмент): Vs - множество множеств Wi узлов (множество деревьев остовного леса)**********************************************************************************************if (u и v принадлежат разным подмнож.W1 и W2 из Vs )

Слайды и текст этой презентации

Слайд 131.03.2014
Непересекающиеся подмножества
Лекция 7.2
Раздел: Алгоритмы на графах
Тема лекции:
Операции с непересекающимися подмножествами
Построение

и анализ алгоритмов

31.03.2014Непересекающиеся подмножестваЛекция 7.2Раздел: Алгоритмы на графахТема лекции:Операции с непересекающимися подмножествамиПостроение и анализ алгоритмов

Слайд 231.03.2014
Непересекающиеся подмножества
Операции с непересекающимися подмножествами

Жадный алгоритм нахождения МОД (фрагмент):
Vs

- множество множеств Wi узлов (множество деревьев остовного леса)
**********************************************************************************************
if (u

и v принадлежат разным подмнож.W1 и W2 из Vs )
{ Заменить W1 и W2 на W1 ∪ W2 в Vs;
T := T ∪ {e};
}
**********************************************************************************************
Сначала Vs = { {v1}, {v2}, …, {vn} }. В конце Vs = { {v1,v2, …,vn}}.
Используются только операции:
Найти подмножество W1, такое, что u ∈ W1,
Найти подмножество W2, такое, что v ∈ W2,
Объединить W1 и W2 (получить W1 ∪ W2 )
31.03.2014Непересекающиеся подмножестваОперации с непересекающимися подмножествамиЖадный алгоритм нахождения МОД (фрагмент): Vs - множество множеств Wi узлов (множество деревьев

Слайд 331.03.2014
Непересекающиеся подмножества
1. Простая реализация на базе массивов,
т.е. подмножество –

массив элементов, тогда:
Поиск W1 и W2, таких, что для ребра

{u, v} имеем u ∈ W1 и v ∈ W2 → O(n)
Объединение массивов – O(n1+n2).

Т.о. вся обработка ребер из очереди с приоритетами
даст O(m*n), что хуже, чем O( m * log m )
и при m =O(n), и при m =O(n2),
т.к. O( m * log m ) = O( m * log n2 ) = O( m * log n )

Операции с непересекающимися подмножествами

31.03.2014Непересекающиеся подмножества1. Простая реализация на базе массивов, т.е. подмножество – массив элементов, тогда:Поиск W1 и W2, таких,

Слайд 431.03.2014
Непересекающиеся подмножества
2. Реализация на базе массивов «быстрый поиск – медленное

объединение»
Пример из лекции 5. Задача о связности графа (об остовном

дереве)

for (i = 1; i <= n; i++) w[i] = i; // w[i] – метка дерева
while (cin >> p>> q)
{
i = w[p]; j = w[q];
if (i != j)
{ cout << p <<‘ ‘<< q<< endl;
w[p] = j;
for (k = 1; k <= n; k++)
if (w[k] == i) w[k] = j;
}
}

Поиск: O(1)
Объединение: O(n)

31.03.2014Непересекающиеся подмножества2. Реализация на базе массивов  «быстрый поиск – медленное объединение»Пример из лекции 5. Задача о

Слайд 53. Реализация на базе массивов : не очень быстрый поиск

– быстрое объединение
17.03.2014
Алгоритмы на графах Начало
int i,

j, p, q, w[N];
for (i = 0; i < N; i++) w[i] = i;
while (fin >> p >> q){
for (i = p; i != w[i]; i = w[i]) ; // i == w[i]
for (j = q; j != w[j]; j = w[j]) ; // j == w[j]
if (i == j) continue;
w[i] = j;
cout << "+ребро: " << p << " " << q << endl;
}


int i, j, p, q, w[N];
for (i = 0; i < N; i++) w[i] = i;
while (fin >> p >> q){
for (i = p; i != w[i]; i = w[i]) ; // i == w[i]
for (j = q; j != w[j]; j = w[j]) ; // j == w[j]
if (i == j) continue;
w[i] = j;
cout << "+ребро: " << p << " " << q << endl;
}



Обобщение этой идеи см. далее

3. Реализация на базе массивов :  не очень быстрый поиск – быстрое объединение 17.03.2014Алгоритмы на графах

Слайд 631.03.2014
Непересекающиеся подмножества
Пусть исходное множество:
{ a, b, c, d, e, f,

g, h, i, j, k }
Подмножества:
{ a, b, c },

{ d, e }, { f, g, h, i, j }, { k }
Имя (по «представителю») подмножества:
{ a , b, c }, { d, e }, { f, g, h, i, j }, { k }
Пусть x - элемент, тогда
Make ( x ) → { val ( x ) } и x - представитель
Find ( x ) → имя (представитель)
Например, при x = ‘k’: Make ( x ) = { k },
при x = ‘g’: Find ( x ) = h


Операции с непересекающимися подмножествами

31.03.2014Непересекающиеся подмножестваПусть исходное множество:{ a, b, c, d, e, f, g, h, i, j, k }Подмножества:{ a,

Слайд 731.03.2014
Непересекающиеся подмножества
Пусть x, y – подмножества (различные!), заданные именами, тогда

Union (x, y) - порождает новое подмножество (объединение) с именем

x или y.
Например, при x = a, y = d
Union (x, y) дает { a , b, c } U { d, e } в виде
{ a , b, c, d, e } или { a , b, c, d, e } .
Например, объединить множество, содержащее u, с множеством, содержащим v:
x = Find(u);
y = Find(v);
if x ≠ y then Union (x, y)
Какая СД для представления подмножеств эффективна?

Операции с непересекающимися подмножествами

31.03.2014Непересекающиеся подмножестваПусть x, y – подмножества (различные!), заданные именами, тогда Union (x, y) - порождает новое подмножество

Слайд 831.03.2014
Непересекающиеся подмножества
Пусть
n – число операций Make (мощность базового множества)

k – суммарное число операций Make, Find и Union.
k ≥

n,
число операций Union ≤ n – 1 (попарно ⎡log2 n⎤)

Операции с непересекающимися подмножествами

Реализация 1
Линейные списки

Абстрактная реализация (ссылки на представителя). Пример Union









31.03.2014Непересекающиеся подмножестваПусть n – число операций Make (мощность базового множества) k – суммарное число операций Make, Find

Слайд 931.03.2014
Непересекающиеся подмножества
Линейные списки. Конкретная реализация 1.











Базовое множество
Перечень подмножеств


Формуляр списка
a
a
b
d
c
e
g
f
h
i
j
h
d

31.03.2014Непересекающиеся подмножестваЛинейные списки. Конкретная реализация 1. Базовое множествоПеречень подмножествФормуляр спискаaabdcegfhijhd

Слайд 1031.03.2014
Непересекающиеся подмножества

Make, Find - O(1)
Union – переустановка указателей на представителя;
оказывается,

что в худшем случае O(n2).
Пример. Пусть Union (x, y) -

порождает новое подмножество с именем y.
for (i =1; i≤n; i++) Make ( x(i) );
for (i =1; i < n; i++) Union ( x(i), x(i+1) );

Реализация 1. Линейные списки






i

i -1

2

1

i + 1





Суммарная стоимость n + Σi=1..n-1 i = Θ(n2)

31.03.2014Непересекающиеся подмножестваMake, Find - O(1)Union – переустановка указателей на представителя;оказывается, что в худшем случае O(n2).Пример. Пусть Union

Слайд 1131.03.2014
Непересекающиеся подмножества
В формуляре множества дополнительно хранится число элементов.
Union – более

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

в коротком списке).
Утверждение.
Пусть система непересекающихся подмножеств сначала пуста. Далее k – суммарное число операций Make, Find и Union, а n – число операций Make.
Тогда суммарная сложность есть O(k + n log2 n)

Реализация 1. Линейные списки
Весовая эвристика

31.03.2014Непересекающиеся подмножестваВ формуляре множества дополнительно хранится число элементов.Union – более короткий список добавляется к более длинному (ссылки

Слайд 1231.03.2014
Непересекающиеся подмножества
Доказательство: 1) Стоимость Make, Find, сравнения размеров, сцепления списков,

обновления размера – O(1)
2) Какова стоимость обновления указателей на представителя?


Зафиксируем какой-либо элемент x. Указатель от x к представителю изменяется, если только x входит в меньшее из объединяющихся подмножеств (в силу эвристики). При этом размер объединения не менее, чем вдвое превышает размер множества, включавшего x.
Т.о. x участвует не более чем в ⎡log2 n⎤ «результативных» объединениях.
Суммарно по всем элементам – не более O(n log2 n) изменений указателей.
В итоге общая стоимость есть O(k + n log2 n) . В жадном алгоритме O(2m + (n-1) + n log2 n) = O(m + n log2 n)

Реализация 1. Линейные списки. Весовая эвристика

31.03.2014Непересекающиеся подмножестваДоказательство: 1) Стоимость Make, Find, сравнения размеров, сцепления списков, обновления размера – O(1)2) Какова стоимость обновления

Слайд 1331.03.2014
Непересекающиеся подмножества
Замечание. Отметим, что в жадном алгоритме МОД фактически работа

с внутрисписковыми указателями не нужна. Важна лишь работа с указателями

на представителя!

Реализация 1. Линейные списки



Ср. не оч. быстрый поиск – быстрое объединение
(лекция 5)

31.03.2014Непересекающиеся подмножестваЗамечание. Отметим, что в жадном алгоритме МОД фактически работа с внутрисписковыми указателями не нужна. Важна лишь

Слайд 1431.03.2014
Непересекающиеся подмножества
Реализация 2. Лес непересекающихся подмножеств
{ c, a, b, d

} U { f, e, g } = { f,

e, g, c, a, b, d }
Union → O(1). Find(x) → O(n) (!!!).

Union


31.03.2014Непересекающиеся подмножестваРеализация 2. Лес непересекающихся подмножеств{ c, a, b, d } U { f, e, g }

Слайд 1531.03.2014
Непересекающиеся подмножества
Эвристики:
«Объединение по рангу» (аналог весовой эвристики)
«Сжатие путей»
Ранги
r(x) – ранг

узла х – высота поддерева с корнем x (точнее –

верхняя оценка высоты…)
Make (x) → r(x) = 0
Find (x) не меняет рангов (!)
При Union (x, y) – дерево с меньшим рангом «подвешивается» к корню дерева с не меньшим рангом, при этом ранг нового корня изменяется (увеличивается на 1) только при равенстве рангов объединяемых подмножеств (деревьев леса)

Реализация 2. Лес непересекающихся подмножеств

31.03.2014Непересекающиеся подмножестваЭвристики:«Объединение по рангу» (аналог весовой эвристики)«Сжатие путей»Рангиr(x) – ранг узла х – высота поддерева с корнем

Слайд 1631.03.2014
Непересекающиеся подмножества



Реализация 2. Лес непересекающихся подмножеств
0
0
0

31.03.2014Непересекающиеся подмножестваРеализация 2. Лес непересекающихся подмножеств000

Слайд 1731.03.2014
Непересекающиеся подмножества
Сценарий 1
for (i =1; i ≤ n; i++) Make

( x(i) );
for (i =1; i < n; i++) Union

( x(i), x(i+1) );

Всего O(n). Здесь: Find ~ O(1)

!!! Ср. с предыдущим слайдом (отличие при Union с равными рангами). Здесь корнем будет первый аргумент.

31.03.2014Непересекающиеся подмножестваСценарий 1for (i =1; i ≤ n; i++) Make ( x(i) );for (i =1; i <

Слайд 1831.03.2014
Непересекающиеся подмножества
Сценарий 2
n/2 пар. r = 1
n/22 четверок. r =

2
n/23 восьмерок. r = 3

31.03.2014Непересекающиеся подмножестваСценарий 2n/2 пар. r = 1n/22 четверок. r = 2n/23 восьмерок. r = 3

Слайд 1931.03.2014
Непересекающиеся подмножества
На k-ом шаге в каждом из n/2k деревьев по

2k элементов,
а ранг r = k.
Пусть n =

2q. Тогда на q-ом шаге получим одно дерево из n элементов.
Вопросы:
Сколько тратится на операцию Find (в худшем случае)?
Сколько всего действий (в худшем случае)?

Сценарий 2 (продолжение)

31.03.2014Непересекающиеся подмножестваНа k-ом шаге в каждом из n/2k деревьев по 2k элементов, а ранг r = k.

Слайд 2031.03.2014
Непересекающиеся подмножества
Сжатие путей
При работе Find (x) все указатели по пути

от x к корню устанавливаются на корень.
Реализация 2. Лес непересекающихся

подмножеств



Find ( a )

31.03.2014Непересекающиеся подмножестваСжатие путейПри работе Find (x) все указатели по пути от x к корню устанавливаются на корень.Реализация

Слайд 2131.03.2014
Непересекающиеся подмножества
x – ссылка на узел (элемент)
p(x) – ссылка на

отца, r(x) – ранг узла
Реализация 2. Лес непересекающихся подмножеств
(псевдокод)
Proc

Make (x);
{создан узел со ссылкой x}
begin
p(x) := x;
r(x) := 0
end {Make}

Proc Union (x, y);
begin
Link ( Find (x), Find (y) )
end {Union}
{Link – объединение по
рангам, см. далее}

31.03.2014Непересекающиеся подмножестваx – ссылка на узел (элемент)p(x) – ссылка на отца, r(x) – ранг узлаРеализация 2. Лес

Слайд 2231.03.2014
Непересекающиеся подмножества
Реализация 2. Лес непересекающихся подмножеств
Proc Link (x, y); {объединение

по рангам}
begin
if r(x) < r(y) then p(x) := y
else


begin
p(y) := x;
if r(x) = r(y) then r(x) := r(x) +1
end
end {Link}
31.03.2014Непересекающиеся подмножестваРеализация 2. Лес непересекающихся подмножествProc Link (x, y); {объединение по рангам}begin	if r(x) < r(y) then p(x)

Слайд 2331.03.2014
Непересекающиеся подмножества
Реализация 2. Лес непересекающихся подмножеств
Func Find (x); {со сжатием

путей}
begin
if p(x) ≠ x then p(x) := Find (p(x));
Return (p(x))
end

{Find}

Без доказательства:
Только объединение по рангу → O ( k log n)
+ сжатие путей → O ( k α(k, n) ), где α(k, n) ≤ 4 (практически)

31.03.2014Непересекающиеся подмножестваРеализация 2. Лес непересекающихся подмножествFunc Find (x); {со сжатием путей}begin	if p(x) ≠ x then p(x) :=

Слайд 2431.03.2014
Непересекающиеся подмножества

31.03.2014Непересекающиеся подмножества

Слайд 2531.03.2014
Непересекающиеся подмножества
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ

ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ

31.03.2014Непересекающиеся подмножестваКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика