|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.06.2013, 16:16 | #1 |
Форумчанин
Регистрация: 11.01.2013
Сообщений: 149
|
Не большой вопрос по оптимизации
Как сильно влияет на производительность проверки находящиеся в цикле?
1) Речь идет об огромных циклах. 2) Проверка осуществляется следующим образом, если найдется хоть один параметр удовлетворяющий условию, то происходит выход из цикла. 3) Расстраивается крайний случай, когда параметр удовлетворяющий условию находится в конце цикла.
Может это и чушь, но это моя чушь и я ее никому не отдам.
|
05.06.2013, 16:20 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Что-то не очень понятно. Влияют - по сравнению с какой альтернативой? Хотя бы в общих чертах пример можно?
|
05.06.2013, 16:55 | #3 |
Форумчанин
Регистрация: 11.01.2013
Сообщений: 149
|
Вот две ситуации
1) Код:
Код:
Может это и чушь, но это моя чушь и я ее никому не отдам.
Последний раз редактировалось Stilet; 06.06.2013 в 12:16. |
05.06.2013, 17:01 | #4 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Второе предпочтительнее только в том случае, если вероятность срабатывания условия архимизерная (и, разумеется, блоки функционально эквивалентны). Одна проверка - это быстро, особенно в относительном выражении.
Но, разумеется, насколько-то выполнение итерации цикла при этом замедляется. Я бы сказал, что первый вариант универсальнее, а потому до тестов производительности предпочтительнее. |
06.06.2013, 09:20 | #5 |
Форумчанин
Регистрация: 11.01.2013
Сообщений: 149
|
Вообще эту тему я поднял для того что бы был оценен мой изврат. Вот есть функция, которая выполняет то что я говорил выше.
Код:
Предлагаю заменить ее на такую. Сразу скажу что не пробовал ее еще но все же. Код:
Блин тут опечатался строчку while (!buffer[i] ^ !i); заменить на while (!buffer[--i] ^ !i); а то все зациклится)))
Может это и чушь, но это моя чушь и я ее никому не отдам.
Последний раз редактировалось Stilet; 06.06.2013 в 12:17. Причина: Опечатка. |
06.06.2013, 09:50 | #6 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
В идеале, функция
Код:
Почему? Потому, что не имеет внутреннего счётчика итераций. Функцию while, можно рассматривать как: Код:
Код:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
06.06.2013, 10:01 | #7 |
Форумчанин
Регистрация: 11.01.2013
Сообщений: 149
|
К этому и шел. Конечно с небольшими массивами это не заметно будет что работать будет быстрее, но иногда приятно просто по напрягать мозги и придумать подобные извраты не зацикливаясь на шаблонах.
Может это и чушь, но это моя чушь и я ее никому не отдам.
|
06.06.2013, 11:58 | #8 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Код:
В любом случае, такого рода оптимизации находятся скорее в ведении оптимизатора. Вы не избавляетесь от проверки, Вы переносите её в другое место. Если извращаться, то мой вариант: Код:
Код:
|
06.06.2013, 12:09 | #9 | |
Форумчанин
Регистрация: 11.01.2013
Сообщений: 149
|
Цитата:
Предположим когда мы проходим по массиву у нас содержимое его нули и тогда получаем что эта запись имеет следующий вид true ^ false = true; следующий случай когда все таки встречается в массиве не ноль тогда получаем false ^ flase = flase и успешно выходим из цикла. И последний случай когда когда все таки все нули в массиве, то есть buffer[0] = 0, тогда получаем true ^ true = false и также успешно выходим из цикла, по этому не вижу никаких выходов за приделы массива. Может я не все варианты рассмотрел и чего то не учел, буду рад узнать о них)))
Может это и чушь, но это моя чушь и я ее никому не отдам.
|
|
06.06.2013, 12:15 | #10 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не большой вопрос по модулю GRAPH | An4ix.Murad | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 29.05.2012 21:29 |
Не большой вопрос | ziganurov2011 | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 22.07.2011 22:31 |
Вопрос оптимизации работы с MS Word | Mixasik | Общие вопросы Delphi | 1 | 15.06.2009 12:13 |
Вопрос оптимизации программы на С++ | argrus | Помощь студентам | 9 | 29.03.2008 23:54 |