![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
Мне удалось согнать мой вариант только до 1.60964894295 =(
Добавлено через 28 секунд при вашем 0.521440029144 |
|||
|
||||
| Simpliest |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
||||
|
||||
| sTa1kEr |
|
||||||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Раз так, то я тоже оптимизировал слегка 1. Убрал статическую переменную 2. Вынес в переменную count($array) 3. Поменял местами if и for, что бы сэкономить на проверке внутри цикла 4. Заменил счетчик мз цикла $total++, на $total += $count вне цикла.. Был не прав. В связи с п.3 - это уже не нужно, заменил на return $count; Почему не на return 1? Можно было бы и так, но в случае return $count PHP не придется создавать дополнительную переменную, что бы вернуть 1. Я тормоз... Там вообще цикл не нужен... Все, теперь конечный вариант. Итого:
NewDima, если не сложно, проверь какой теперь у тебя результат? Добавлено @ 15:59
Извини, не понял, что ты этим хотел сказать? Добавлено @ 16:01
Из-за этого бага, если разкомментировать echo, выводилось только последние 2 цифры. Это сообщение отредактировал(а) sTa1kEr - 5.12.2009, 16:12 |
||||||
|
|||||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
отлично
Completed. 40320 iterations. 0.249315023422 sec Добавлено через 1 минуту и 50 секунд В моем варианте время выполнения скрипта растет просто бешеными темпами при увеличении размера массива, так-что какашка у меня=( |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Еще одно место оптимизировал, убрал второй цикл
Все, больше не знаю, что еще можно оптимизировать... Если увидите, скажите |
|||
|
||||
| Simpliest |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
я про рассчет эффективности комбинации согласно задаче ТС Я дал профайлинг. посмотри методы которые вызываются по 273к раз один из них сортировка |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Все... вот последняя экстримальная оптимизация за счет уменьшения рекурсии на 2уровня и ухудшения читабельности
Так
Добавлено через 5 минут и 46 секунд Да... этот метод даже на моем тормазнутом AMD'шнике меньше секунды выполняется... Но это все равно не true way! |
|||
|
||||
| NFL |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 5.5.2009 Репутация: нет Всего: нет |
тааак, с перебором понятно
что с эффективностью то делать? я с ней вообще не пойму... превращать каждое в строку и проверять посимвольно? |
|||
|
||||
| Simpliest |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
||||
|
||||
| NFL |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 5.5.2009 Репутация: нет Всего: нет |
Simpliest, что то тему прочитал видимо невнимательно
ща перечитаю |
|||
|
||||
| sTa1kEr |
|
||||||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
В общем, я от нечего делать добил твою задачу
Если использовать вместо класса Sub массив, то можно увеличить производительность на ~20-30% Можно будет на досуге решить ее алгоритмом без перебора. |
||||||
|
|||||||
| NFL |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 5.5.2009 Репутация: нет Всего: нет |
sTa1kEr, спс огромное, преподу хватит
|
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Пара не очевидных моментов:
Sub::$depends - это процессы, которые по условию должны предшествовать текущему процессу Sub::$bonus - это время, которое мы экономим, если предшествует совместимый процесс Process:$nominalTime - это время, затрачиваемое на процесс без учета совместимости процессов Для максимально быстрого расчета эффективности, мы из номинального времени вычитываем бонусное (если процессы совпали) и из качества штраф за несоблюдение условия. Добавлено через 1 минуту и 18 секунд Я не для препода ее решал, а для себя |
|||
|
||||
| NFL |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 5.5.2009 Репутация: нет Всего: нет |
sTa1kEr,
да ну его, для себя такие задачи решать, никому не нужные |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Сама по себе задача может быть и никому не нужная, но мышление такие задачи развивают очень хорошо. Кстати, как можно легко доработать этот алгоритм, что-бы сократить перебор, в лучшем случае, до 2х итераций в независимости от количества процессов. Так как мы знаем "бонусы" для всех процессов и номинальное время, то можем легко высчитать так же минимально возможное время. Т.о. если вычесть из номинального качества минимальное время, мы получим максимально возможную эффективность. А так как условие задачи - найти последовательности с максимальной эффективностью, то нам достаточно сравнивать полученную эффективность с максимальной и, если они равны, то завершить перебор, т.к. дальнейшей перебор уже не имеет смысла. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |