Насколько я понимаю, когда вы пишете цикл for, подобный этому
Код: Выделить всё
for (int i = 0; i < SOME_NUM; i++) {
if (true)
do_something();
else
do_something_else();
}
На временную сложность этой операции в основном влияет оператор if (true), поскольку итерации цикла for фактически не включают в себя какие-либо сравнения i до SOME_NUM, компилятор просто выполнит код внутри цикла for SOME_NUM раз. Поправьте меня, если я ошибаюсь.
Однако, если это правильно, то как ведут себя следующие вложенные циклы for?
Код: Выделить всё
for (int i = 0; i < SOME_NUM; i++) {
for (int j = 0; j < i; j++) {
do_something();
}
}
J во внутреннем цикле for теперь имеет верхнюю границу i, значение, которое меняется каждый раз при перезапуске цикла. Как компилятор это скомпилирует? По сути, эти вложенные циклы for ведут себя как цикл for с циклом while внутри него? Если вы пишете алгоритм, использующий вложенные циклы for, где внутренняя переменная счета зависит от внешней переменной счета, стоит ли вам беспокоиться о том, как это повлияет на сложность вашего алгоритма?
Подробнее здесь:
https://stackoverflow.com/questions/239 ... hile-loops