Будет ли O() быть только O (N²)
Да.
Для больших N термин N² будет доминировать во время выполнения, так что другие условия больше не имеют значения.
Например, для N = 10 в вашем примере 150⋅N² уже составляет 15000, тогда как 3⋅N = 30 и 11⋅log₂ (N) = 36,5, поэтому члены, не относящиеся к N², составляют только 0,44% общее количество шагов.
Для N = 100, 150⋅N² = 1500000, 3⋅N = 300, 11⋅log₂ (N) = 73,1, поэтому члены, не относящиеся к N², составляют всего 0,025% от общего количества шагов.
Таким образом, для более высоких N значение младших членов уменьшается.
Также следует использовать алгоритм с более низким порядком сложности?
Нет. Поскольку примечание Big-O описывает только асимптотическое поведение по мере того, как N становится большим и не включает в себя какие-либо накладные расходы с постоянным коэффициентом, вам часто может быть лучше использовать менее оптимальный алгоритм с более низкими накладными расходами.
В вашем примере, если у меня есть альтернативный алгоритм для проблемы, которую вы пытаетесь решить, которая имеет время выполнения T '(N) = 10⋅N³, то для N = 10 это займет всего 10000 шагов, в то время как ваш пример потребуется 150067 шагов. В основном, for any N ≤ 15, алгоритм T '(N) будет быстрее, и для любого N> 15 ваш алгоритм T (N) будет быстрее. Поэтому, если вы заранее знаете, что не увидите N> 15, вам будет лучше, выбирая теоретически менее эффективный алгоритм T '(N).
Конечно, на практике существует много других соображений, а, например, как:
- Наличие алгоритмов, которые можно повторно использовать в библиотеках, в Интернете и т.д.
- Если вы реализовать его самостоятельно : простота реализации
- Будь или не алгоритм масштабируется для нескольких ядер или нескольких машин легко
большое спасибо. Помогли кучу! – user1874239