直觉上,我认为这三个表达式是等价的。
例如,如果算法在O(nlogn) + O(n)
或O(nlogn + n)
中运行(我感到困惑),我可以说这是O(nlogn)
算法吗?
真相是什么?
答案 0 :(得分:5)
是的,你可以说这是 O(nlogn)。
当您尝试估算算法的复杂性时,您可以从所有部分开始(选择每个部分中最差的操作并忽略快速操作 - 嘿它只是一个估计)。第一部分是nlogn,第二部分是n。
因为你不想/可以/需要它是准确的。
O(nlogn + n) - 或 - O(nlogn)+ O(n) - > nlogn比O(n)增长得快,因此你可以忽略O(n) - > O(nlogn)
关于功能增长的速度有多快 - 想想它就像它一样巨大然后你会明白为什么你可以忽略增长较慢的功能。
答案 1 :(得分:1)
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