Проблема с переборкой

B
На сайте с 23.05.2006
Offline
95
387

Вот возникла проблема, не могу справится самостоятельно.

Идет переборка (на php)

Примерно такого вида

Есть масив символо $podbor , размер 40

for($x1=0;$x1<count($podbor)&&$b==false;$x1++)

for($x2=0;$x2<count($podbor)&&$b==false;$x2++)

for($x3=0;$x3<count($podbor)&&$b==false;$x3++)

for($x4=0;$x4<count($podbor)&&$b==false;$x4++)

.............

код который должен отрабатывать.

Вообщем здесь проблем не возникает, все работает, но когда добавляю еще один цикл (пятый), т.е. пятый порядок делаю, то прога выбивает.

Идет сообщение, что работа длится более 30 сек.

Это чисто сервер выбивает или php не дает работать с таким большим колличеством операций?

Спасибо.

-
На сайте с 07.12.2005
Offline
97
-K-
#1
bestbetor:

Вообщем здесь проблем не возникает, все работает, но когда добавляю еще один цикл (пятый), т.е. пятый порядок делаю, то прога выбивает.
Идет сообщение, что работа длится более 30 сек.

Цикл бесконечный получился. Покажи целиком как сделал 5-й цикл.

И еще вопрос, зачем? :)

B
На сайте с 23.05.2006
Offline
95
#2
-K-:
Цикл бесконечный получился. Покажи целиком как сделал 5-й цикл.

И еще вопрос, зачем? :)

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

Цикл не бесконечный

for($x1=0;$x1<count($podbor)&&$b==false;$x1++)

for($x2=0;$x2<count($podbor)&&$b==false;$x2++)

for($x3=0;$x3<count($podbor)&&$b==false;$x3++)

for($x4=0;$x4<count($podbor)&&$b==false;$x4++)

На определенном этапе находится котировка и срабатывает $b=false.

Пятый точно также ниже добавил

стало

for($x1=0;$x1<count($podbor)&&$b==false;$x1++)

for($x2=0;$x2<count($podbor)&&$b==false;$x2++)

for($x3=0;$x3<count($podbor)&&$b==false;$x3++)

for($x4=0;$x4<count($podbor)&&$b==false;$x4++)

for($x5=0;$x5<count($podbor)&&$b==false;$x5++)

Kolyaj
На сайте с 28.03.2006
Offline
69
#3

У вас при 4 вложенных циклах делается 2,560,000 проходов массива. При добавлении пятого становится 102,400,000 проходов. Неужели вы думаете это все быстренько обработается? Озвучьте задачу, должен быть другой подход.

Mmonger
На сайте с 01.12.2005
Offline
165
#4
bestbetor:

Это чисто сервер выбивает или php не дает работать с таким большим количеством операций?

Вообще время исполнения программы в php.ini можно настроить параметрами max_execution_time и max_input_time.

На мой взгляд целесообразнее было бы в сам скрипт внести:

set_time_limit(120);
Всё будет хорошо, но мы приложим усилия!
B
На сайте с 23.05.2006
Offline
95
#5
Kolyaj:
У вас при 4 вложенных циклах делается 2,560,000 проходов массива. При добавлении пятого становится 102,400,000 проходов. Неужели вы думаете это все быстренько обработается? Озвучьте задачу, должен быть другой подход.

Я это тоже считал.

Но я просто не думал что ограничения существуют.

мне сейчас тут вроде бы скинули работающий код, сейчас проверю :)

-
На сайте с 07.12.2005
Offline
97
-K-
#6

Согласен с Kolyaj, надо менять алгоритм, а не увеличивать время на выполнение скрипта. Тем более не на всех хостингах это можно сделать.

Kolyaj
На сайте с 28.03.2006
Offline
69
#7
bestbetor:
Я это тоже считал.
Но я просто не думал что ограничения существуют.

Все равно это не выход. При шести вложенных циклах у вас будет уже 4,096,000,000 проходов цикла, и еще неизвестно, что вы делаете при каждом проходе последнего цикла. А если вам придется увеличить число элементов в массиве до 50? Вобщем, низя так делать.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий