algorithm - Big O Notation 的长度是用什么来衡量的?

标签 algorithm big-o

<分区>

我正在使用快速排序,即 NLog(N),并且有 20 个项目需要排序。

最坏的情况是 26.02.... 秒?真的,秒?我觉得很难相信,所以长度是多少?

最佳答案

Big O Notation 没有单位。它不会告诉您需要多长时间,也不会告诉您算法是快还是慢。 Big O 告诉你的只是事物如何随着 n 的变化而扩展。

给N填一个数字对Big O没有意义,它的目的不是给你一个数字,而是一个随着N变大它会增长多快的趋势。想象一下,如果你将 N 加倍到 40,你的数字将是原来的两倍多一点。采用另一种算法,即插入排序,其复杂度为 O(N^2)。从 20^2 到 40^2 的跳跃是巨大的,远远超过翻倍。所以我们可以看到,随着 N 的增加,插入排序与快速排序相比会按比例变慢。这就是您可以从 Big O 那里学到的所有东西,对于任何特定的 N,您都无法说出其中任何一个的速度有多快,甚至彼此之间的相对速度也是如此。

请记住,Big O 表示法仅查看最高阶项。它忽略较小的项和常数因子。 N^2 + N 就是 N^2,因为第一项盖过了第二项。 N + N + N 只是 N,因为它仍然只是线性增加,尽管它更陡峭。 N + 50 就是 N,因为 50 是一个常数因子,不会影响它随着 N 变大而缩放的方式。

关于algorithm - Big O Notation 的长度是用什么来衡量的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43193527/

相关文章:

algorithm - 这两个功能的Big-O

python - 寻找谁在遍历游戏中获胜的算法

regex - 如何根据给定的正则表达式构造一个CFG

ruby-on-rails - 在投票后禁用 acts_as_votable gem 中的投票按钮

python - 检查两个嵌套列表在替换时是否等效

c++ - 大 O 和树遍历

performance - 如何计算该程序的运行时效率?

c# - 如何以编程方式从值中删除/添加复合/非复合百分比和固定金额?

algorithm - 递归函数的大O

algorithm - 大 O 还是大 theta?