109: (Default)
109 ([personal profile] 109) wrote2002-11-29 02:53 pm

задачка

вот, кстати, задачка, с которой я в своё время столкнулся по поводу игрушки vga planets.

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

иными словами, имеется квадратная матрица NxN, удовлетворяющая условиям:
- все элементы матрицы принадлежат отрезку [0,1]
- сумма элементов каждой строки равна 1
- строки можно переставлять местами

требуется: найти алгоритм, вычисляющий максимальное значение суммы элементов главной диагонали и порядка строк, соответствующего этой сумме, имеющий наименьший порядок зависимости от N. N2 вполне пойдёт.

простое неправильное решенÐ

[identity profile] 109.livejournal.com 2002-11-29 12:26 pm (UTC)(link)
а вот как я в своё время неправильно её решил.

я решил, что
1. любую N-арную перестановку можно разложить на совокупность бинарных.
2. если N-арная перестановка является "улучшающей", то хотя бы одна из составляющих её бинарных перестановок также должна является "улучшающей".
3. если ни одной "улучшающей" бинарной перестановки не осталось, то мы достигли абсолютного максимума.

таким образом, мой алгоритм перебирал все возможные бинарные перестановки, а если находил "улучшающую", то производил её, и начинал перебор сначала. такой алгоритм лучше простого перебора, поскольку простой перебор пропорционален N!, а данный алгоритм - N3.

но как оказалось, цепочка рассуждений 1-3, несмотря на кажущуюся очевидность, неверна. в чём тут кидалово, говорить пока не буду, надеясь на гениальность читателей :-)

Re: простое неправильное решеÐ

[identity profile] manco.livejournal.com 2002-12-03 07:25 am (UTC)(link)
Цепочка рассуждений неверна в п3 - это еще называется ловушка локального минимума.
А еще есть подозрение, что задача эквивалентна знаменитой задаче о рюкзаке, которая NP-полна, поэтому есть шанс, что если вы ее решите, то докажете, что P=NP :)

Re: простое неправильное решеÐ

[identity profile] 109.livejournal.com 2002-12-03 07:30 am (UTC)(link)
а можно поподробнее? почему 3 неверно, если оно непосредственно следует из 1 + 2?

и каков же правильный алгоритм?

Re: простое неправильное решеÐ

[identity profile] manco.livejournal.com 2002-12-03 07:56 am (UTC)(link)
Не следует потому что в 2) говорится что хотя бы 1 бинарная улучшающая есть, а Вы пытаетесь построить перестановку из одних только улучшающих бинарных.

Ловушка локального минимума это такая штука:
Допустим у вас есть некоторая неровная поверхность, и нужно найти на ней самую низкую точку - вы берете стальной шарик, кладете его в произвольную точку на поверхности, он начинает катится под действием силы тяжести - когда остановится это и будет искомый минимум. Но это не всегда верно - представьте, что вам повезло первым шагом положить его в неглубокую ямку на вершине высокой горы. И все это несмотря на то, что шарик всегда катился только вниз.

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

А как насчет суммы элементов

[identity profile] network-angel.livejournal.com 2002-11-29 07:08 pm (UTC)(link)
Она равна 1 или нет?

Re: А как насчет суммы элементо

[identity profile] 109.livejournal.com 2002-11-30 07:20 am (UTC)(link)
нет, эта сумма не равна 1 (см. происхождение задачи)

ОК.

[identity profile] network-angel.livejournal.com 2002-11-30 08:13 am (UTC)(link)
Как насчет такого варианта -

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

Re: ОК.

[identity profile] 109.livejournal.com 2002-12-01 10:11 pm (UTC)(link)
ну так, поставим мы максимальный элемент одного столбцп на диагональ. а дальше?

А дальше

[identity profile] network-angel.livejournal.com 2002-12-02 06:52 am (UTC)(link)
делаем то же самое со следующим.

Re: А дальше

[identity profile] 109.livejournal.com 2002-12-02 06:58 am (UTC)(link)
что делать, если установка максимального элемента следующего столбца на диагональ требует свопа со строкой, чей диагональный элемент уже установлен?

Хранить не только максималь

[identity profile] network-angel.livejournal.com 2002-12-02 02:10 pm (UTC)(link)
И если надо трогать уже поставленную на место строку - смотреть насколько улучшится общее решение?

Re: Хранить не только максимал

[identity profile] 109.livejournal.com 2002-12-03 06:00 am (UTC)(link)
получаем бинарный алгоритм, описанный в самом первом моём комментарии. к сожалению, он не гарантирует нахождение абсолютного максимума.

[identity profile] dma.livejournal.com 2002-12-03 07:55 pm (UTC)(link)
Задача о назначениях, только чуть в другой постановке. К классическому виду приводится путем отнимания от 1 всех элементов матрицы, чтобы получилось "нежелание играть за расу Х", тогда goal - "Минимизация несчастья" :)

Решается венгерским методом, смотреть тут (новое окно) (http://rain.ifmo.ru/~kalugin/StartApplet_koi8.html)
(ОСТОРОЖНО, КОИ-8!). Там даже и апплет есть, показывающий на примерах работу алгоритма.

Трудоемкость не помню, но полиномиальная, мамой клянус :)

[identity profile] averros.livejournal.com 2002-12-04 01:16 am (UTC)(link)
Sorry for writing in English --

this problem is the same as finding maximal cost Hamiltonian cycle in an fully meshed oriented graph. (This is easy to see because ordering of rows in the matrix is the same as order of visiting the graph nodes, and element a[i,j] of the original matrix is the "cost" of going from node j to node i).

Because max and min cost problems are easily converted to each other, this is equivalent to Traveling Salesman Problem (TSP), which is NP-complete. I.e. an algorithm guaranteeing the optimal solution is not going to be better than O(2N).

Because the graph is fully connected, the standard sparse-graph heuristic algorithms (http://web.cs.ualberta.ca/~joe/Theses/vandegriend.html) won't work very well. I would suggest using simulated annealing or genetic algorithms.