2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Изменение сложности алгоритма от природы переменной
Сообщение29.09.2013, 21:58 


26/10/10
11
Доброго времени суток!

Я новичок в оценке алгоритмов и хотел бы разобраться что к чему. Пусть есть код, написанный на 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 и заполняется этими объектами случайно. Важно, что длина этого списка равна $j$. Кроме того, во внутреннем цикле присутствует функция someFunction(), самой трудоемкой (и важной) частью которой является сортировка (по умолчанию в Java применяется сортировка слиянием), вычислительная сложность которой $O(g_i \cdot (\log{g_i}))$, где $g_i$ - размер входного массива.

1) Верно ли, что если $k = \frac{n}{b}$, где $b$ - некоторая константа, то общая вычислительная сложность алгоритма равна $O(n)$?
Я рассуждал так: раз $k$ выражается через $n$, то выражение $O(\frac{n-k}{k-1}\cdot\log{\frac{n-k}{k-1}})$ равно $O(1)$, аналогично, внутренний цикл даст $O(1)$, и, наконец, внешний цикл даст $O(k) = O(n)$

2) Верно ли, что если $k$ - константа, то общая сложность алгоритма - $O(n^2 \cdot \log{f})$, где $f = \frac{n-k}{k-1} $
Рассуждение такое: внешний цикл даст $O(1)$, внутренний цикл - $O(n)$, а функция someFunction() даст $O(n \cdot \log{f})$, где $f = \frac{n-k}{k-1} $.

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

 Профиль  
                  
 
 Re: Изменение сложности алгоритма от природы переменной
Сообщение30.09.2013, 18:57 
Аватара пользователя


31/10/08
1244
1) Верно
2) Не верно. В ответе не должно быть констант, в частности k.

Может я придираюсь, но не плохо бы учесть при решение что деление в коде целочисленное. А в решение оно у вас сразу указывается дробным.

 Профиль  
                  
 
 Re: Изменение сложности алгоритма от природы переменной
Сообщение30.09.2013, 20:27 


26/10/10
11
Pavia, большое спасибо за ответ!

Тогда получается, что во втором случае ответ просто $O(n^2 \cdot \log{n})$?

Если честно, я не понял, что Вы имели ввиду на счет целочисленного деления. Не могли бы Вы уточнить?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group