Задачка для интересу

Apr 19, 2016 00:38

Чёто вакансия вызвала интерес у удивительно малого количества народу, я даже затрудняюсь объяснить этот феномен :) Все так недолюбливают Эрланг? Но у меня же ещё Elm и Rust, и вообще, потенциально определённая свобода в этом плане. Пишите, когда ещё вам предложат попрограммировать с пользой на чём-то неунылом за деньги ( Read more... )

problem, erlang, work, candidate, vacancy, rust, lisp, elm

Leave a comment

Про NP fshashin April 21 2016, 08:33:52 UTC
Я тут обнаружил, что случай с двумя ядрами можно свести к известной задаче knapsack problem, сформулировав её следующим образом: как, имя набор задач с известными временами выполнения, загрузить одно ядро, чтобы время его работы было как можно ближе к половине суммарного времени выполнения всех задач? А для knapsack problem уже доказана NP-полнота. Имеем, что задача с произвольным числом ядер (больше одного) уже содержит в себе NP-полную.

Это, конечно, убавляет интерес к задаче, но для knapsack problem имеется более-менее эффективное решение с помощью динамического программирования. Можно, например, подумать, можно ли его использовать при произвольном количестве ядер.

Reply

Re: Про NP swizard April 21 2016, 11:50:59 UTC
Это хороший теоретический вопрос, на самом деле :)

Как мы уже выяснили, задача точно NP-полная, и она точно может решаться полным перебором.

С другой стороны, как мне кажется, у меня получилось её решить с помощью DP. По-крайней мере, я пока не могу найти контрпримеров. Но thesz уверяет, что решение таким образом я могу найти только приблизительное.

Я смутно подозреваю, что он прав (потому что чётко доказать корректность своего решения не могу), и, допускаю, что есть какие-то крайние случаи, где мой вариант может провраться.

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

Reply

Re: Про NP fshashin April 21 2016, 21:08:59 UTC
>> как мне кажется, у меня получилось её решить с помощью DP

Ради интереса прогони тесты, которые ты нам не показывал, вот на этом решении и сравни ответы со своей DP-реализацией

https://www.dropbox.com/s/lc0obw7jlp5qvjp/task3.tar.gz?dl=0

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

Reply

Re: Про NP fshashin April 21 2016, 21:11:02 UTC
ничего себе, ЖЖ меня анонимусом обозвал

Reply

Re: Про NP swizard April 21 2016, 22:04:49 UTC
Ого, ничего себе, ты прямо олимпиадный брутфорсер написал.

У меня там немного совсем дополнительных тестов, и все они пока совпадают с твоими результатами. Надо, наверно, генератор рандомных s-выражений написать, и на них погонять уже. Не хочешь такой спрограммировать? :)

Reply

Re: Про NP fshashin April 21 2016, 22:11:59 UTC
>> Надо, наверно, генератор рандомных s-выражений написать, и на них погонять уже. Не хочешь такой спрограммировать? :)

Я именно это и собирался сделать, но внезапно устал)

Завтра спрограммирую.

Reply

Re: Про NP fshashin April 22 2016, 20:53:14 UTC
Вот и генератор тестов. Запускается командой make и выдаёт пачку рандомных тестов и, вроде как, оптимальные решения для них. Если есть подозрение, что какое-то решение неправильное, то можно попросить генератор распечатать план выполнения по ядрам.

https://www.dropbox.com/s/lpjcs7okrz93h9x/expresso.tar.gz?dl=0

Reply

Re: Про NP swizard April 25 2016, 20:26:13 UTC
Круто, удобно!

Ну, как и следовало ожидать, мой вариант, действительно, подвирает на более длинных тестах =) Значит, вы с thesz были правы, и вправду только брутфорсом можно оптимальные расписания получать.

Reply

Re: Про NP tancorko April 21 2016, 21:39:03 UTC
А мой самый первый вариант где ярда по освобождению едят очередную задачу укладываются в примеры ).

Reply

Re: Про NP swizard April 21 2016, 21:55:12 UTC
А первый это какой - этот?

Если да, то не во все укладывается :) Например, interpret_cpu(sample_7(), 4) работает 16 секунд, хотя можно 15.

Или вот, пример от thesz:

(+ (+ 1 2) (+ 3 4) (+ 5 6) (+ 6 7) (+ 7 8) (+ 9 10) (+ 11 12) (+ 13 14) (* 1 (* 2 (* 3 4) 5) 6))
Оптимальное расписание там 32 секунды, а у вас получается 34 или 35.

Reply

Re: Про NP tancorko April 21 2016, 22:00:54 UTC
Ну оптимальное это с перебором, я его не хочу пока трогать. На выходных попробую ДП какое нить.

Reply

Re: Про NP tancorko April 22 2016, 08:50:31 UTC
https://gist.github.com/yury-pachin/15d1ffa705dfb43b375c0e47302841ce

Накидал вариант с тупым перебором, правда не всего графа, а только части что можем посчитать.

p:run_tests().
1[2]: 21 (delay 15 sec)
2[2]: 10 (delay 0 sec)
3[2]: -10 (delay 13 sec)
4[2]: 25 (delay 5 sec)
5[2]: 1 (delay 30 sec)
6[2]: 8 (delay 28 sec)
6[3]: 8 (delay 25 sec)
7[2]: 50 (delay 27 sec)
7[3]: 50 (delay 22 sec)
7[4]: 50 (delay 17 sec)
8[2]: 8 (delay 17 sec)
8[3]: 8 (delay 13 sec)
9[2]: 66 (delay 16 sec)

Так себе из меня сварщик ).

Reply

Re: Про NP theiced April 22 2016, 06:52:52 UTC
где мы выяснили. ну и dp она решается, конечно, как и про-рюкзак.

Reply


Leave a comment

Up