Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вложение циклов for{}

3.2K
11 января 2007 года
Gazzy
38 / / 02.08.2006
Есть 4 вложенных цикла. как можно увеличить быстродействие? может есть какие-либо специальные приемы? Могут ли помочь всякие динамические структуры данных (очереди, деревья...)? если да, то как и где про них можно прочитать...
9
11 января 2007 года
Lerkin
3.0K / / 25.03.2003
Цитата: Gazzy
Есть 4 вложенных цикла. как можно увеличить быстродействие? может есть какие-либо специальные приемы?


Есть. Один из них - развёртка циклов.

Цитата: Gazzy
Могут ли помочь всякие динамические структуры данных (очереди, деревья...)?


Это структуры данных, а ты говоришь про итерации цикла. Все зависит от задачи. Опимизация возможна всегда.

Цитата: Gazzy

если да, то как и где про них можно прочитать...


http://forum.codenet.ru/showthread.php?t=22178 - полно всего.

547
11 января 2007 года
Hydra
488 / / 20.06.2006
А вообще все от задачи зависит.
3.2K
11 января 2007 года
Gazzy
38 / / 02.08.2006
Цитата: Lerkin

Есть. Один из них - развёртка циклов.



Это как? :confused:

9
11 января 2007 года
Lerkin
3.0K / / 25.03.2003
Цитата: Gazzy
Это как? :confused:



Можно взять какой-нить мощный оптимизирующий компилятор, например Intel C++ Compiler, и посмотреть генерируемый им код. А для выяснения причины тормозов, т.е. для выявления "горячих точек" программы, очень желательно пользоваться профилировщиками, например Intel VTune Performance Analyzer. Можно применять различные технологии, например OpenMP, векторизацию и т.д.

Короче, вот, по этой теме:
http://www.codenet.ru/progr/optimize/kk/index.php

Очень рекомендую ознакомиться.

309
11 января 2007 года
el scorpio
1.1K / / 19.09.2006
Способы оптимизации циклов:
1. Чаще использовать ссылки либо указатели на элемент массива цикла высшего порядка. Для простых типов лучше копировать их значения
 
Код:
const TMyClass &Item = Array ;
Item.Action();

Отсутствуют расходы на вычисление индексации массива в каждой строке внутри цикла - определяется один раз.

2. Если кол-во элементов не меняется, то определить конечное значение один раз в начале цикла
 
Код:
for (int i = 0, Size = Array.Get_Size(); i < Size; i++)

Отсутствуют расходы на вычисление границы цикла при каждой проверке условия цикла.
3. Частный случай 2, если направление цикла не имеет значения, и одной из границ является ноль, то декремент переменной предпочтительнее
 
Код:
for (int i = Array.Get_Size()-1; i >= 0; i--)

Сравнивать значение переменной цикла с нулём быстрее, чем с другим значением.
3
11 января 2007 года
Green
4.8K / / 20.01.2000
4 вложенных цикла?!
Это означает сложность четвертой степени!
Это необычный случай. Точнее, обычно (в большинстве случаев) в таком не бывает необходимости. Не думаю, что твоя задача исключение.

Поэтому наипервейшие "методы оптимизации" - это подумать и отказаться от некоторых циклов вовсе и/или кешировать результаты работы на итерациях.

Приведи условие задачи. Уверен, что её можно будет значительно упростить с т.з. сложности алгоритма.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог