Вопрос о длине массива - PullRequest
0 голосов
/ 13 марта 2011

Этот вопрос касается оптимизации. Предположим, мне нужна длина массива массива A в двух местах в моем коде. Должен ли я использовать функцию a.length () в двух местах, или это быстрее, чтобы присвоить локальной переменной значение a.length () и использовать его в двух местах.

Под «быстрее» я имею в виду время работы. Более того, я говорю асимптотически.

Ответы [ 3 ]

2 голосов
/ 13 марта 2011

Асимптотическая сложность вызова функции дважды одинакова - любое постоянное число вызовов одной и той же (чистой) функции с одинаковыми аргументами имеет такую ​​же асимптотическую сложность, что и один вызов этой функции, поскольку вы можете просто броситьпостоянное количество вызовов в скрытой константе big-O.

Что касается того, что будет быстрее, то нет гарантии, какой из них будет быстрее.Это зависит от языка и компилятора.Я бы посоветовал просто написать обоими способами и рассчитать время, чтобы увидеть, есть ли заметная разница.Тем не менее, если вы пишете что-то, что настолько критично для производительности, что вы не можете позволить себе звонить .length() дважды, вам, возможно, придется пересмотреть свой подход в целом, чтобы посмотреть, есть ли лучшее глобальное решение проблемы.Микрооптимизация редко стоит усилий, если у вас нет веских оснований полагать, что ваша программа заметно медленнее в неоптимизированной версии.

1 голос
/ 13 марта 2011

Если вам нужно задать вопрос, вы еще не в той точке, где он имеет значение. Если бы вы были, у вас уже был бы код, который вы профилировали, и вы могли бы просто попробовать и посмотреть. Подобные вещи сильно зависят от вашего языка и компилятора, и единственные значимые результаты - это те, которые вы видите.

Не беспокойтесь о микрооптимизациях, пока вам не понадобится сокращать циклы, и даже в этом случае алгоритм - это первое, что нужно проверить.

0 голосов
/ 13 марта 2011

На каком языке?Во многих языках такие вызовы оптимизируются (либо во время компиляции, либо с помощью JIT-компилятора) для прямого доступа к полю длины объекта массива.

...