Теория игр и исследование операций. Модели, алгоритмы, сложность: Конспект лекций, страница 3

В скобках до двоеточия стоит j - точка раздела зон, а после двоеточия - fij + Fjk.

Изменив критерий, упростим поиск одного центра: минимум функционала Swi× ||xi-c||2 достигается в точке z = Swi·xi/ Swi - центре тяжести множества X.

Swi × ||xi-c||2 = Swi × ||xi-z||2 +Swi × ||z-c||2 +2Swi × (xi-z, z-c).

Но z-cне зависит от i, а Swi× (xi-z) = Swi·xi-Swi×Swi·xi/ SwI =0 Þ слагаемое3 = 0. Если точки равномерно покрывают компактную область и веса примерно равны, то решения задач с обоими критериями очень близки. ???

Далее рекуррентное уравнение соответствует нерекуррентному алгоритму!!


Алгоритм сортировки с трудоемкостью O (nlogn)  в худшем случае.

Разобьем множество элементов на пары и упорядочим каждую пару. Затем склеим пары в упорядоченные четверки, потом четверки в восьмерки и т.д. Склейка производится следующим образом: записываем наименьший из меньших элементов из двух склеиваемых множеств, затем записанный элемент вычеркиваем и повторяем операцию, пока не опустеют оба множества.

Посчитаем трудоемкость: , где Tсклейки=cn, c=const.

Пример:  Даны числа: 15 3 6 24 18 13 15 5 7 81 8. Упорядочим пары чисел и сольем пары в упорядоченные четверки: 3 15  6 24  13 18  5 15  7 81  8 и  3 6 15 24  5 13 15 18  7 8 81. Формируем упорядоченные восьмерки. Сравниваем первые числа четверок 3 и 5. Минимум слева Þ пишем его в восьмерку и сдвигаем указатель левой четверки. Далее сравниваем 6 и 5, минимум справа Þ в восьмерку пишем 5 и сдвигаем указатель правой четверки и т.д. Когда одна из четверок закончится, остаток другой запишем в хвост восьмерки. На выходе упорядоченные восьмерки:  3 5 6 13 15 15 18 24  7 8 81. Склеивая таким же образом восьмерки, в итоге получим упорядоченное множество:  3 5 6 7 8 13 15 15 18 24 81.

В частных случаях бывают более быстрые методы упорядочения. Например, для массива из 109 элементов с целыми значениями из интервала [1,100] заведем 100 счетчиков и за линейное время посчитаем кратность каждого числа.

№2. ПОИСК k-ого элемента ЗА ЛИНЕЙНОЕ ВРЕМЯ. (Кнут, т.3, стр. 261)

1)  Будем считать, что n=7*(2q+1), где q – произвольное натуральное число. Если это не выполнено, то добавим нужное число максимальных элементов.

2)  Запишем данные по 7 чисел в строке и упорядочим строки по возрастанию.

3)  Найдем медиану Z в среднем столбце.

4)  Фильтруем строки по среднему столбцу относительно Z,
т.е. делим строки на две части: больше или меньше Z в столбце.

5)  Обозначим получившиеся зоны как показано на рисунке.
Очевидно, a £ Z £ d для всех aÎA и dÎD. Остались B и C.

6)  Фильтруем все xÎBÈC относительно Z: если x £ Z,то xÎA*, иначе xÎD*.

7)  Пусть r ¾ число элементов множества A+A*. Если k=r, то искомое число равно Z. Если k<r, то ищем k-ое число в A+A*, иначе ищем (k-r)-ое число в D+D*. В обоих случаях остается не более 5n/7 чисел.

Оценим трудоемкость этого рекурсивного алгоритма: Tn £ c·n + . У нас S ai = 1/7 + 5/7 = 6/7 < 1, ÞTn £ 7·c·n.    Если в строки записывать по 5 чисел, то
Tn £ c·n + и S ai = 1/5 + 7/10 = 9/10 Þ  Tn £ 10·c·n .

7

9

3

1

6

5

18

2

4

8

9

6

1

3

6

7

9

2

4

5

8

18

6

9

18

18

18

Пример: Дан неупорядоченный массив чисел.

Разобьем массив на пятерки, упорядочим их, и дополним последнюю строку максимальными элементами.

В среднем столбце найдем средний по значению элемент Z=6. Фильтруем строки относительно Z по среднему столбцу и выделяем множества A,B,C,D.