Что такое постоянные факторы и термин низкого порядка в алгоритмах?
в следующем видео описаны некоторые асимптотические проблемы анализа: 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)
мы можем доказать, что для любой полиномиальной функции F(N) = Cn.N^n + Cn-1.N^(n-1) + ...+ Ц0 F(N) = O (C. n^n) это доказательство приведено в видео.
мы также можем доказать, что для каждого C и K, C. N^K = O (N^K) (просто возьмите c=C)
наконец, мы можем доказать, что если F (n) = O(G (n)) и G (n) = O(K (n)), то F (n)=O (K (n)), это свойство называется транзитивностью.
затем мы заключаем, что каждая функция T(n) = O(F(n)), где F-многочлен, также O (n^k), где k-самый высокий показатель многочлена F.
для простоты мы сводим F к его члену высшего порядка и отбрасываем постоянный фактор, сохраняя математическую корректность.