Почему нельзя опустить m в O (n ^ 2 + m)? - PullRequest
0 голосов
/ 18 октября 2019

Поскольку Big O является мерой масштабирования кода, не должно ли n ^ 2 масштабироваться намного быстрее, чем m? Я не вижу, как конкретные значения имеют отношение

1 Ответ

0 голосов
/ 25 октября 2019

Иногда сложность и большой O имеют, или, скорее, зависят от двух переменных. Например, многие алгоритмы графов используют E и V для количества ребер и вершин. Если бы m было постоянным или было получено из n , тогда обычный анализ мог бы позволить уменьшить его. Тем не менее, мы можем себе представить (возможно, довольно искусственные) случаи, скажем, m = n ^ 3 и, следовательно, более высокого порядка, чем член m ^ 2 .

Один придуманный пример, который я привел, имеет массив N из n элементов и огромный список M из m элементов, чтобы проверить,элементы находятся в первом массиве. Мы наивно предпочитаем использовать пузырьковую сортировку ( O n ^ 2 ) и использовать двоичный поиск по отсортированному массиву N для каждого элемента в пределах M .

У нас будет O (n ^ 2 + m + log (n)) . После уменьшения log n как более низкого порядка мы получим O (n ^ 2 + m) .

Вместо массива, подобного байку, мы могли быиметь перекрестное самостоятельное соединение, которое необходимо проверить m раз.

...