Что такое постоянные факторы и термин низкого порядка в алгоритмах?

в следующем видео описаны некоторые асимптотические проблемы анализа: https://class.coursera.org/algo-004/lecture/169

но я не могу понять, что такое "термин низкого порядка" и "постоянный фактор"? (это на 4-й минуте видео).

сортировка слияния -6n*log2(n)+6n. Почему?--1--> является термином низкого порядка в случае, указанном в видео, а 6 -constant factor? Имеют ли эти термины конкретное определение?

3 ответов


термин нижнего порядка:

"порядок" здесь относится к порядок.

концепция проста в понимании и объяснении при работе с очень простыми терминами, такими как x или x2. x имеет порядок 1, так как его можно записать как x1 и x2 имеет порядок 2-порядок величины равен мощности переменной в члене. Но все становится немного туманно (по крайней мере для меня), когда вы усложняете ситуацию, например, добавляя log. [1]

в несколько неформальном выражении f(x) является более низким порядком, чем g(x) если f(x) < g(x) as x стремится к бесконечности.

это легко увидеть f(n) = 6n является более низким порядком, чем g(n) = 6n*log2(n) просто подставляя какое-то действительно большое значение для n (правильный подход-математически доказать это, но замена большого значения имеет тенденцию работать для простых терминов).

в условия по существу вещи, разделенные символами плюс / минус.

так более того, термин-это просто термин, который имеет более низкий порядок, чем какой-то другой термин.

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

[1]: я много имею дело с big-O, но прошло некоторое время (средняя школа?) поскольку я имел дело с основами порядка величины, поэтому извиняюсь если бы я мог что-то упустить или забыть об этой части.

постоянный фактор:

"фактор" - это термин в умножение. Для 6n, 6 и n факторы.

постоянный фактор-это просто все, что не зависит от входного параметра(ов) (т. е. n в данном случае).

здесь, независимо от того, что мы делаем n, 6 всегда останется 6, так что это постоянно.


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

O(6.N.Lg(N) + 6.N) Это то же самое, что O(6.N.Lg(N)) или O(N.Lg(N)) или O(0.01.N.Lg(N) + 42.sin(N) - 1.745 + 1/N)...

доминирующий термин всегда N.Log(N) (и основание логарифма не имеет значения).


обычно, вы бы лучше задавать вопросы, связанные с курсами Coursera на форумах, где другие студенты могут помочь вам тренировки все, что вы не могли понять самостоятельно.

предположим, что у нас есть полиномиальная функция F (n) = 5n3 + 8n + 3, n3 имеет самый высокий показатель, поэтому 5n3 является членом высшего порядка полинома. Все остальные термины, следовательно, являются терминами более низкого порядка.

Почему они не актуальны. Ну, вот определение большой O нотация

T(n) = O(F(n)) если мы можем найти c и n0, такие как для всех n >= n0 T(n)

  1. мы можем доказать, что для любой полиномиальной функции F(N) = Cn.N^n + Cn-1.N^(n-1) + ...+ Ц0 F(N) = O (C. n^n) это доказательство приведено в видео.

  2. мы также можем доказать, что для каждого C и K, C. N^K = O (N^K) (просто возьмите c=C)

  3. наконец, мы можем доказать, что если F (n) = O(G (n)) и G (n) = O(K (n)), то F (n)=O (K (n)), это свойство называется транзитивностью.

  4. затем мы заключаем, что каждая функция T(n) = O(F(n)), где F-многочлен, также O (n^k), где k-самый высокий показатель многочлена F.

для простоты мы сводим F к его члену высшего порядка и отбрасываем постоянный фактор, сохраняя математическую корректность.