二进制搜索的平均案例性能为O(log n)
,快速排序O(n log n)
为O(n log n)
与O(n)+ O(日志n)相同
答案 0 :(得分:35)
想象一下与世界上每个人的数据库。这是67亿条目。 O(log n)是对索引列(例如主键)的查找。 O(n log n)在未索引的列上按排序顺序返回整个总体。
想象它的另一种方式:
log n
与n中的位数成比例。
n log n
是n倍。
尝试编写一次1000
次,而不是写一千次。第一个需要O(log n)时间,第二个需要O(n log n)时间。
现在再次使用6700000000
进行尝试。写一次仍然是微不足道的。现在尝试写入67亿次。即使你每秒钟写一次,你也会在你完成之前就死了。
答案 1 :(得分:24)
您可以在绘图中将其可视化,例如参见here:
答案 2 :(得分:3)
不,O(n log n)
= O(n) * O(log n)
在数学中,当你有一个表达式(即e = mc ^ 2)时,如果没有运算符,那么你就乘以。
通常,可视化O(n log n)的方法是“做一些需要log n
次计算n
次的事情。”
如果您有一个首先在列表上迭代的算法,那么对该列表进行二进制搜索(这将是N + log N
),您可以表达,就像{{1}因为O(n)
使n
的大值log n
相形见绌n
相形见绌
答案 3 :(得分:2)
(log n)
图增加,但是向下凹,这意味着:
(n log n)
图增加,并且(略微)向上凹,这意味着:
答案 4 :(得分:0)
取决于您是否倾向于将n
视为具有具体价值。
如果您倾向于将n
视为具有具体价值,并且f(n)
的单位是时间或指示,则O(log n)
比n
快O(n log n)
倍1}}用于大小为n
的给定任务。对于内存或空间单位,O(log n)
对于大小为n
的给定任务,n
小f(n)
倍。在这种情况下,您将关注某些已知n
的{{1}}的密码域。您可以直观地看出问题的答案,这些问题涉及事情需要多长时间或此操作消耗多少内存。
如果您倾向于将n
可视化为具有任何值的参数,那么O(log n)
可扩展n
倍O(log n)
。 n
可以完成n
次f(n)
次任务。在这种情况下,您将专注于n
的域。您可以直观地查询有关f(n)
可以获得多大的问题的答案,或者您可以并行运行多少{{1}}个实例。
两种观点都不比另一种好。前者可用于比较解决特定问题的方法。后者可用于比较给定方法的实际局限性。