我想知道如何计算O(Log(N)): 我们有一个10个元素的排序数组[1 3 4 8 10 15 18 20 25 30] 当我们进行正常搜索时,我们复杂度为O(10),这意味着我们必须检查数组的每一个情况,所以O(10)= 10. 但是如果我们进行二分搜索,因为我们有一个排序数组,我们的复杂度为(O日志(10))什么是这个符号0的结果(日志(10))= ???? 我有一个missunderstand我们将使用Log基地10或2或究竟是什么? 感谢您的帮助如何计算O(Log(N))?
回答
您误解了算法增长的顺序的概念。请阅读关于算法的书籍,并强化您的概念。在任何情况下,我会尝试在高层次上进行解释,如果你有一个像你说的10个元素的数组,并且你做了一个“正常搜索”(这就是所谓的线性搜索),你正在遍历每一个元素数组,这意味着如果有'n'个元素'n'元素必须被检查。所以它是O(n)而不是O(10)。如果它是O(10)[btw,O(10)= O(1)],这意味着它总是需要10次迭代或更少,不管该阵列中有多少元素,情况并非如此。如果数组有100个元素,则需要100次迭代,所以我们说的顺序是O(n),其中n是输入大小(这里是数组的大小)。
上述方法适用于非排序数组,我们可以使用更快的方法进行搜索,就像在字典中查找单词一样,这种技术称为二进制搜索。这里发生的是,你查看数组的中间元素,看看你正在寻找的谎言的位置,无论是在上半年还是下半年。然后,你选择你想要的一半,并应用相同的方法分成一半和检查。由于这是递归执行的,它使用对数增长(在二进制搜索的情况下,它是以2为底的日志)。请阅读二进制搜索和对数增长的顺序以便更好地理解。
恐怕不是渐近线如何工作,Big-O符号旨在描述算法如何针对可变尺寸输入进行缩放,特别是n算法在固定输入上所需的操作数目(如上所述)总是恒定的,即O(1)。同样,大O符号对恒定的乘法是不变的。这意味着:
- O(1)= O(10)= O(日志(10))
- 您的对数的基础不要紧,因为改变基仅引入一个常数因子
感谢您的评论,在正常的阵列,以搜索项目我有充分的情况下,所以O(10)= 10右后看!但是对于二分体O(Log(10)),结果如何?谢谢?对于评论 – satyres 2013-02-23 18:58:46
我有一个missunderstand我们将使用日志基地10或2或究竟
没关系。复杂性不会改变。对数基2与
Log_2(N) = Log(N)/Log(2)
两者都是O(Log(N))
的元素。
我认为你为什么二进制搜索是log(n)以及它为什么是基数为2而感到困惑。想想看,在你的二进制搜索的每一步,你都会将输入大小减少2。你需要多少次这样做?你需要做2次这样的记录,以便将样本大小减少到1。
例如,如果您有4个元素,第一步将搜索减少到2,第二步将搜索减少到1你停下来。因此你必须将它记录(4)到基数2 = 2次。换句话说,如果log n base 2 = x,则2次幂x是n。
所以,如果你正在做一个二进制搜索你的基地将是2更清晰,你的情况日志(10)基地2将是东西3.3左右即你将最多4个比较来进行。
虽然我不反对其他答案,这一个接近解决问题。和@satyres一样关于算法课程,麻省理工学院的讲座会很好。或者尝试一下梦幻般的可汗学院,我认为他们也应该有这方面的话题 – 2013-08-11 18:08:50
- 1. 是log(n!)= O((log(n))^ 2)?
- 2. floor(√2n)的O(log log n)算法?
- 3. 如何计算n log n = c
- 4. 你如何看出O(log n)和O(n log n)之间的差异?
- 5. 寻找关于如何计算O(n log n)的复杂度的例子?
- 6. 大O符号 - O(n日志(N))对O(的log(n^2))
- 7. 显示n^2不是O(n * log(n))?
- 8. 为什么此循环返回值为O(n log log n)而不是O(n log n)?
- 9. 通用实用的排序算法比O(n log n)快吗?
- 10. 时间复杂度 - O(n^2)到O(n log n)搜索
- 11. 时间复杂度O(N日志(log n)的)+ N O(L)
- 12. 图形搜索O(log(N)(N + M)
- 13. 为O(n^log n)的碰撞检测
- 14. 这个计算^ n的算法如何被重写为在O(log n)时间运行?
- 15. 与log(n)相比,log(n^2)的大O是什么?
- 16. AVL Tree给我O(c^n)而不是O(log n)
- 17. 复杂度O(log(n))是否等于O(sqrt(n))?
- 18. 如何编写时间复杂度为O(log n)的计算m^n的迭代版本?
- 19. 算法复杂度,log^k n vs n log n
- 20. log(n!)=Ω(n * log(n))?
- 21. 是这个算法的渐近时间复杂度O(log n)?
- 22. O(log n)中的C++ bitset逻辑运算?
- 23. 在O(log n)中找到中位数
- 24. O(log n)中的二叉搜索树?
- 25. O(log n)摊销时间的数据结构设计?
- 26. 如何在时间O(log(n))中搜索一个列表的算法?
- 27. 计算log(n)+Ө(sqrt(n))的渐近极限
- 28. 有没有算法的时间复杂度为O(sqrt(n)* log(n))?
- 29. O(log(log(n)))) - 竞争意味着什么?
- 30. heapify O(n)算法
感谢,我的问题是我有一个我想解决一个算法问题,但我有1GHz的CPU以2秒执行的约束,所以我不知道如何精确计算的复杂性要知道,如果我的算法是正确与否当我有我想计算O(日志(N))我被阻止 – satyres 2013-02-23 19:05:54
@satyres:阅读“*增长*”,无论是从书籍或在线。只有这样才能帮助你更好地理解。你的想法是非常错误的。 – 2013-02-23 19:09:34
你能给我一个链接吗! – satyres 2013-02-23 19:14:12