O(nlogn)+O(n)、O(nlogn) 和 O(nlogn + n) 之间的关系是什么?
what are the relationship between O(nlogn)+O(n), O(nlogn) and O(nlogn + n)?
直觉上,我认为这三个表达式是等价的。
例如,如果一个算法运行在O(nlogn) + O(n)
或O(nlogn + n)
(我很困惑),我可以说这是一个O(nlogn)
算法吗?
真相是什么?
是的,你可以说这是一个 O(nlogn)。
当您尝试估计算法的复杂性时,您会从所有部分开始(选择每个部分中最差的操作并忽略快速的操作 - 嘿,这只是一个估计)。第一部分是 nlogn,第二部分是 n。
因为你不want/can/need它是准确的。
O(nlogn + n) - 或 - O(nlogn) + O(n) -> nlogn 增长速度比 O(n) 快,因此你可以忽略 O(n) -> O(nlogn)
一切都与函数增长的速度有关 - 把它想象成巨大的 n 然后你就会明白为什么你可以忽略增长较慢的函数。
O(nlogn)= O(nlogn) + O(n) =O(nlogn+n)
事实上,如果 O(expression1) > O(expression2)
那么你有:
O(expression1)= O(expression1) + O(expression2) =O(expression1+expression2)
在这种情况下 expression1 = nlogn
和 expression2 = n
直觉上,我认为这三个表达式是等价的。
例如,如果一个算法运行在O(nlogn) + O(n)
或O(nlogn + n)
(我很困惑),我可以说这是一个O(nlogn)
算法吗?
真相是什么?
是的,你可以说这是一个 O(nlogn)。
当您尝试估计算法的复杂性时,您会从所有部分开始(选择每个部分中最差的操作并忽略快速的操作 - 嘿,这只是一个估计)。第一部分是 nlogn,第二部分是 n。
因为你不want/can/need它是准确的。
O(nlogn + n) - 或 - O(nlogn) + O(n) -> nlogn 增长速度比 O(n) 快,因此你可以忽略 O(n) -> O(nlogn)
一切都与函数增长的速度有关 - 把它想象成巨大的 n 然后你就会明白为什么你可以忽略增长较慢的函数。
O(nlogn)= O(nlogn) + O(n) =O(nlogn+n)
事实上,如果 O(expression1) > O(expression2)
那么你有:
O(expression1)= O(expression1) + O(expression2) =O(expression1+expression2)
在这种情况下 expression1 = nlogn
和 expression2 = n