我是在采访蛋糕练的一些问题,以及问题2给出的解决方案采用两个独立的回路(未嵌套)和解决方案供应商声称,他/她在O(n)时间解决了它。根据我的理解,这将是O(2n)次。我的想法是错误的,还是解决方案提供商犯了错误?从采访蛋糕两次通过数组为O(n)或O(2N)
回答
大O符号为您提供关于如何做你的算法执行时间取决于输入数据的提示。当你看到那个时间复杂度为O(n)的你明白,有输入和执行时间之间的线性依赖。常量没有提及。
根据定义&奥米克;(G(N))是每个的所述下面的语句保持组函数:存在这样的正的常数Ç和Ñ该0 ≤F(N)≤CG(n)的适用于所有ñ≥ñ。你看定义是使用任意常数Ç,如果你的克(N)本身具有恒定的,不会有任何区别。
最终,我们有:O(CG(n))的 = O(G(N))。在特定情况下O(CN) = O(2N) = 为O(n)。它们都代表相同的一组功能。
那么,如果面试官在采访中要求开发一个在O(n)时间运行的算法,并且我在O(2n)时间内写一个算法,那么这不应该是一个主要问题? – Hossam
@Hossam,它只是**冗余**说* O(2n)*,因为它与* O(n)*相同。我不认为这会影响你的采访结果:)。 –
大O符号是最有用的,看看如何代码规模。也就是说,如果我将数组的大小加倍,代码需要多长时间才能运行?如果您的代码是O(n)
,则需要两倍的时间,而如果是O(n^2)
,则需要4倍的时间,以此类推。在这种情况下,无论您是否通过循环两次,将数组的大小加倍会比以前长两倍(每个循环的长度是两倍)。
- 1. floor(√2n)的O(log log n)算法?
- 2. 为什么两个O(N)方法被认为是O(N)?
- 3. 时间复杂度:O(logN)或O(N)?
- 4. O(m + n)或O(mlgn)更好
- 5. 证明最大(O(f(n)),O(g(n)))= O(max(f(n),g(n))
- 6. 大O符号 - O(n日志(N))对O(的log(n^2))
- 7. O(nlog * n)和O(n)之间?
- 8. 正在将IEnumerable强制转换为ArrayList O(N)或O(1)?
- 9. 对于数组,PHP的count()函数是O(1)还是O(n)?
- 10. 计数no。 O(n)
- 11. 将素数过滤代码-O(n^2)改为O(n)并删除数组中的冗余元素
- 12. 如何确定的时间复杂度为O(M + N)或O(Math.max(M,N))
- 13. 在JavaScript中将O(n^3)更改为O(n^2)
- 14. 为什么TreeSet迭代O(n)而不是O(n * logn)?
- 15. 在渐近分析中,证明:O表示大O. O(f(n)+ g(n))= O(max {f(n),g(n)})
- 16. 在O(N)
- 17. 证明O(max {f(n),g(n)} = O(f(n)+ g(n))
- 18. 关于为O(n^2logn)
- 19. 为什么Data.Sequence.reverse O(n)?
- 20. 为什么这个函数/循环O(log n)而不是O(n)?
- 21. O(n^2)中是O(mn)吗?
- 22. 时间复杂度O(N日志(log n)的)+ N O(L)
- 23. 时间复杂度 - O(n^2)到O(n log n)搜索
- 24. 哪一个更好? O(n^1/2)或O(logn)
- 25. 是C++语句的大-O'delete [] Q;' O(1)或O(n)?
- 26. haskell长度运行时间O(1)或O(n)
- 27. O =(N²)执行十次时较慢?
- 28. 是log(n!)= O((log(n))^ 2)?
- 29. 排序在O(n)的单次通过的时间复杂度的整数elemets
- 30. 不应插入O(n)而不是O(1)或O(n)插入未排序的链表中?
O(n)== O(2n)== O(kn)。常量不重要,只有比例因子。 – azurefrog
O(2n)摊销到O(n),因为与“n”相比,因素“2”具有不成比例的小影响(在最坏的情况下) –
完美,谢谢! – Hossam