Доброго времени суток!
Я новичок в оценке алгоритмов и хотел бы разобраться что к чему. Пусть есть код, написанный на Java:
Код:
for (int i = 1; i < k; i++) {
for (int j = (n-k)/(k-1); j >= 0; j=j-2) {
List<Task> tasks = new ArrayList<Task>();
initTheList(tasks, j); // fills the list with j tasks
someFunction(tasks);
}
}
private void someFunction(List<Task> tasks) {
...
Collections.sort(tasks, new ConstantTimeComparator());
...
}
Как видите, тут 2 цикла: внутренний и внешний. Во внутреннем цикле создается список объектов Task и заполняется этими объектами случайно. Важно, что длина этого списка равна

. Кроме того, во внутреннем цикле присутствует функция someFunction(), самой трудоемкой (и важной) частью которой является сортировка (по умолчанию в Java применяется сортировка слиянием), вычислительная сложность которой

, где

- размер входного массива.
1) Верно ли, что если

, где

- некоторая константа, то общая вычислительная сложность алгоритма равна

?
Я рассуждал так: раз

выражается через

, то выражение

равно

, аналогично, внутренний цикл даст

, и, наконец, внешний цикл даст

2) Верно ли, что если

- константа, то общая сложность алгоритма -

, где

Рассуждение такое: внешний цикл даст

, внутренний цикл -

, а функция someFunction() даст

, где

.
Не могли бы вы проверить рассуждения, и, если неправильно, объяснить где ошибка, и как правильно нужно было вести рассуждение? Заранее спасибо.