Logn究竟是什么意思?

时间:2011-05-01 09:57:33

标签: algorithm performance complexity-theory quicksort logarithm

我正在为算法中的班级学习,并一直关注QuickSort。我理解算法及其工作原理,但不知道如何在一天结束时获得它所做的比较次数,或实际记录的内容。

我理解基础知识的程度:

x=logb(Y) then
b^x = Y

但这在算法性能方面意味着什么?这是你需要做的比较的数量,我明白......尽管如此,整个想法似乎是如此难以理解。例如,对于QuickSort,每个级别的K调用都涉及2^k个调用,每个调用都涉及长度为n/2^K.的子列表

所以,总结找到比较的数量:

log n
Σ 2^k. 2(n/2^k) = 2n(1+logn)
k=0

为什么我们总结记录n? 2n(1 + logn)来自哪里?很抱歉我的描述含糊不清,我很困惑。

5 个答案:

答案 0 :(得分:4)

如果考虑一个完整的,平衡的二叉树,那么逐层,你有1 + 2 + 4 + 8 + ...顶点。如果树中的顶点总数是2 ^ n - 1那么你有1 + 2 + 4 + 8 + ... + 2 ^(n-1)个顶点,逐层计数。现在,设N = 2 ^ n(树的大小),然后树的高度为n,n = log2(N)(树的高度)。这就是log(n)在这些Big O表达式中的含义。

答案 1 :(得分:1)

下面是一个示例树:

      1
    /   \ 
   2     3
  / \   / \
 4   5 6   7

树中的节点数是7,但树的高数是log 7 = 3,当你有分治方法时,日志就会出现,快速排序你将列表分成2个子列表,并继续这个直到丰富的小列表,划分需要logn时间(在平均情况下),因为除法的高位是log n,每个级别的分区需要O(n),因为在每个级别中你平均划分N个数字,(可能有用于分区的列表太多,但是每个级别的平均数字数是N,实际上一些列表的数量是N)。因此,对于简单的观察,如果你有平衡的分区树,你有log n时间进行分区,这意味着树的高度。

答案 2 :(得分:1)

1忘记了b-trees for sec

这里'数学:log2 N = k是相同的2 ^ k = N ..它是log的定义 ,它可以是自然对数(e)N = k又名e ^ k = n ,,或十进制log10 N = k是10 ^ k = n

2看到完美,平衡的树

1
  1+ 1 1 + 1 + 1+ 1 8个 16个 等

有多少元素? 1 + 2 + 4 + 8..etc,因此对于2级b树,有2 ^ 2-1个元素,3级树2 ^ 3-1等等。所以这里的魔法公式:N_TREE_ELEMENTS =级别数^ 2 -1,或者使用log的定义:log2 number OF levels = number_of_tree_elements(可以忘记-1)

3假设有一项任务是在N个元素中找到元素b-tree,w / K level(又名高度)

如何构造b-tree log2 height = number_of_tree elements

最重要的是

所以通过如何构造b树,你不需要'高度'操作来找到所有N个元素中的元素,或者更少..所以什么是高度等于:log2 number_of_tree_elements ..

所以你需要log2 N_number_of_tree_elements ..或log(N)来缩短

答案 3 :(得分:0)

要理解O(log(n))意味着您可能想要阅读Big O notaion。在镜头中,这意味着,如果您的数据集大了1024倍,那么运行时间只会长10倍(或更少)(对于基数2)。

MergeSort在O(n * log(n))中运行,这意味着它将花费10 240倍的时间。 Bubble sort在O(n ^ 2)中运行,这意味着它将需要1024 ^ 2 = 1 048 576倍。所以有一段时间安全:)


要了解您的总和,您必须将mergesort算法视为树:

         sort(3,1,2,4)
        /            \
   sort(3,1)      sort(2,4)
    /     \        /     \
sort(3) sort(1) sort(2) sort(4)

总和遍历树的每个级别。 k = 0它是顶部,k = log(n)是底部。树将始终具有高度log2(n)(因为它是平衡的binary tree)。

做一些数学运算:

Σ 2^k * 2(n/2^k) = 
2 * Σ 2^k * (n/2^k) =
2 * Σ n*2^k/2^k = 
2 * Σ n = 
2 * n * (1+log(n)) //As there are log(n)+1 steps from 0 to log(n) inclusive

这当然要做很多工作,特别是如果你有更复杂的算法。在那些情况下,你会对Master Theorem感到非常高兴,但目前它可能会让你更加困惑。这是非常理论化的,所以如果你不理解它就不要担心。

答案 4 :(得分:0)

对我来说,要理解这样的问题,this is a good way to think about it