![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| cru3l |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
есть такой скрипт
выполняется ооооочень долго (я так и не дождался, пришлось тестировать с цифрами меньше) и вешает браузер, что впрочем не удивительно. Как можно это все оптимизировать? Потоков вроде бы в яваскрипте нет, как с этим борятся люди? |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 15 Всего: 315 |
если бы вы описали реальную задачу, то можно было бы предложить более-менее оптимальное решение
а с вашим кодом борются очень просто - не пишут его |
|||
|
||||
| Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 12 Всего: 34 |
Мне интересно, какой результат Вы ожидаете для
Может в приращении цикла всетаки ошибка? Да и вообще странный алгоритм, для получения результата совершенно не обязательно перебирать все возможные значения. Но для полного понимания, всетаки необходимо видеть исходную задачу |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: нет Всего: 146 |
||||
|
||||
| cru3l |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
да напортачил я там с этими +0.00001.
вот задача, есть такое выражение a/b * c/d = x где, x — входные данные и есть массив чисел например (20,20,20,21,35,36,40,50,70,85,90,88) — каждое значение можно использовать только один раз a,b,c,d — это подобранные числа из массива, таким образом чтобы выражение было правильным, если конечно это возможно. И есть условие a+b>72 ; c+d>72 можно упростить формулу до a/b=x (т.е. представить что c=1 и d=1) если решить задачу можно только таким образом x может быть не целым, например "78.875" я в коде в качестве массива чисел просто забил массив значениями от нуля до ста (для примера). Ну и я не придумал ничего лучше кроме как "скопировать" массив 4 раза и перебирать все возможные варианты. Там в коде еще не учтено чтобы каждое значение можно было использовать один раз. Ну что, можно такое сделать на яваскрипте, чтобы быстро работало? Это сообщение отредактировал(а) cru3l - 8.11.2009, 17:19 |
|||
|
||||
| cru3l |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
ну что, такое задание остудило ваш пыл?
скажите хотя бы, такое вообще резонно делать на javascript'e, может все таки использовать что-нибудь более нативное для ОС |
|||
|
||||
| brother79 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: 1 Всего: 6 |
||||
|
||||
| sTa1kEr |
|
||||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: нет Всего: 146 |
Решение перебором (с учетом условия уникальности значений):
Вывод:
Profile (115.684ms, 13346 calls) Function Calls Percent Own Time Time Avg Mi Max File calculate 13345 99.85% 115.511ms 115.511ms 0.009ms 0m 115.511ms 4 (line 9) eval() 1 0.15% 0.173ms 117.765ms 117.765ms 117.765ms 117.765ms 4 (line 1) |
||||
|
|||||
| cru3l |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
sTa1kEr, спасибо за решение, работает действительно офигенно. но вот если подставить входной массив с такими данными
то на выходе получаем опять ужасные тормоза. What's the trick? |
|||
|
||||
| cru3l |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
и да, опять же — я как бы и не против таких тормозов. Но как сделать так, чтобы браузер при этом не зависал намертво. Просто вывести надпись - "Идет расчет" и считать себе спокойно как бы в отдельном треде.
время рассчета не сильно критично (в разумных пределах, конечно) |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: нет Всего: 146 |
||||
|
||||
| cru3l |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
sTa1kEr, эх, мне бы до 100 включительно ((
|
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: нет Всего: 146 |
||||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: нет Всего: 146 |
Слегка улучшенный алгоритм все того же перебора (при большом значении k сильно уменьшает количество итераций):
Profile (115.684ms, 13346 calls) Function Calls Percent Own Time Time Avg Min Max File calculate 274529 100% 52749.617ms 53553.856ms 0.195ms 0ms 53553.856ms 24 (line 14) Что-же касается фонового выполнения расчета, то для этого можно воспользоваться хаком с таймером, как описано здесь. |
|||
|
||||
| cru3l |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
k можно было и не делать переменной. Оно всегда будет равно 72м.
Алгоритм очень клевый. Работает быстро. Спасибо |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |