📜  渐近符号的性质

📅  最后修改于: 2021-09-27 14:31:42             🧑  作者: Mango

先决条件:渐近符号
假设 f(n)、g(n) 和 h(n) 是渐近函数,数学定义为:

  1. 如果f(n) = Θ(g(n)) ,则存在正常数 c1, c2, n0 使得0 ≤ c1.g(n) ≤ f(n) ≤ c2.g(n) ,对于所有 n ≥ n0
  2. 如果f(n) = O(g(n)) ,则存在正常数 c, n0 使得0 ≤ f(n) ≤ cg(n) ,对于所有 n ≥ n0
  3. 如果f(n) = Ω(g(n)) ,则存在正常数 c, n0 使得0 ≤ cg(n) ≤ f(n) ,对于所有 n ≥ n0
  4. 如果f(n) = o(g(n)) ,则存在正常数 c, n0 使得0 ≤ f(n) < cg(n) ,对于所有 n ≥ n0
  5. 如果f(n) = ω(g(n)) ,则存在正常数 c, n0 使得0 ≤ cg(n) < f(n) ,对于所有 n ≥ n0

特性:

  1. 反射性:
    如果给出 f(n) 那么
    f(n) = O(f(n))

    例子:
    如果 f(n) = n 3 ⇒ O(n 3 )
    相似地,

    f(n) = Ω(f(n)) 
    f(n) = Θ(f(n)) 
  2. 对称:
    f(n) = Θ(g(n)) if and only if g(n) = Θ(f(n))

    例子:
    如果 f(n) = n 2且 g(n) = n 2则 f(n) = Θ(n 2 ) 且 g(n) = Θ(n 2 )
    证明:

    • 必要的部分:
      f(n) = Θ(g(n)) ⇒ g(n) = Θ(f(n))
      根据 Θ 的定义,存在正常数 c1, c2,没有使得 c1.g(n) ≤ f(n) ≤ c2.g(n) 对于所有 n ≥ no
      ⇒ g(n) ≤ (1/c1).f(n) 且 g(n) ≥ (1/c2).f(n)
      ⇒ (1/c2).f(n) ≤ g(n) ≤ (1/c1).f(n)
      由于 c1 和 c2 是正常数,因此 1/c1 和 1/c2 是明确定义的。因此,根据 Θ 的定义,g(n) = Θ(f(n))
    • 充足部分:
      g(n) = Θ(f(n)) ⇒ f(n) = Θ(g(n))
      根据 Θ 的定义,存在正常数 c1, c2,没有使得 c1.f(n) ≤ g(n) ≤ c2.f(n) 对于所有 n ≥ no
      ⇒ f(n) ≤ (1/c1).g(n) 且 f(n) ≥ (1/c2).g(n)
      ⇒ (1/c2).g(n) ≤ f(n) ≤ (1/c1).g(n)
      根据 Theta(Θ) 的定义,f(n) = Θ(g(n))
  3. 传递性:
    f(n) = O(g(n)) and g(n) = O(h(n)) ⇒ f(n) = O(h(n))

    例子:
    如果 f(n) = n,g(n) = n 2且 h(n) = n 3
    ⇒ n 是 O(n 2 ) 并且 n 2是 O(n 3 ) 那么 n 是 O(n 3 )
    证明:
    f(n) = O(g(n)) 和 g(n) = O(h(n)) ⇒ f(n) = O(h(n))
    根据 Big-Oh(O) 的定义,存在正常数 c,没有使得 f(n) ≤ cg(n) 对于所有 n ≥ no
    ⇒ f(n) ≤ c1.g(n)
    ⇒ g(n) ≤ c2.h(n)
    ⇒ f(n) ≤ c1.c2h(n)
    ⇒ f(n) ≤ ch(n),其中,c = c1.c2 根据定义,f(n) = O(h(n))
    相似地,

    f(n) = Θ(g(n)) and g(n) = Θ(h(n)) ⇒ f(n) = Θ(h(n))
    f(n) = Ω(g(n)) and g(n) = Ω(h(n)) ⇒ f(n) = Ω(h(n))
    f(n) = o(g(n)) and g(n) = o(h(n)) ⇒ f(n) = o(h(n))
    f(n) = ω(g(n)) and g(n) = ω(h(n)) ⇒ f(n) = ω(h(n))
  4. 转置对称:
    f(n) = O(g(n)) if and only if g(n) = Ω(f(n))

    例子:
    如果 f(n) = n 且 g(n) = n 2则 n 为 O(n 2 ) 且 n 2为 Ω(n)
    证明:

    • 必要的部分:
      f(n) = O(g(n)) ⇒ g(n) = Ω(f(n))
      根据 Big-Oh (O) ⇒ f(n) ≤ cg(n) 对于某些正常数 c ⇒ g(n) ≥ (1/c).f(n) 的定义
      根据欧米茄 (Ω) 的定义,g(n) = Ω(f(n))
    • 充足部分:
      g(n) = Ω(f(n)) ⇒ f(n) = O(g(n))
      根据 Omega (Ω) 的定义,对于某些正常数 c ⇒ g(n) ≥ cf(n) ⇒ f(n) ≤ (1/c).g(n)
      根据 Big-Oh(O) 的定义,f(n) = O(g(n))

    相似地,

    f(n) = o(g(n)) if and only if g(n) = ω(f(n)) 
  5. 由于这些性质适用于渐近符号,因此可以在函数 f(n) 和 g(n) 与两个实数 a 和 b 之间进行类比。
    • g(n) = O(f(n)) 类似于 a ≤ b
    • g(n) = Ω(f(n)) 类似于 a ≥ b
    • g(n) = Θ(f(n)) 类似于 a = b
    • g(n) = o(f(n)) 类似于 a < b
    • g(n) = ω(f(n)) 类似于 a > b
  6. 观察:
    max(f(n), g(n)) = Θ(f(n) + g(n)) 

    证明:
    不失一般性,假设 f(n) ≤ g(n), ⇒ max(f(n), g(n)) = g(n)
    考虑,g(n) ≤ max(f(n), g(n)) ≤ g(n)
    ⇒ g(n) ≤ max(f(n), g(n)) ≤ f(n) + g(n)
    ⇒ g(n)/2 + g(n)/2 ≤ max(f(n), g(n)) ≤ f(n) + g(n)
    根据我们的假设,我们可以写
    ⇒ f(n)/2 + g(n)/2 ≤ max(f(n), g(n)) ≤ f(n) + g(n)
    ⇒ (f(n) + g(n))/2 ≤ max(f(n), g(n)) ≤ f(n) + g(n)
    根据 Θ 的定义,max(f(n), g(n)) = Θ(f(n) + g(n))

  7. O(f(n)) + O(g(n)) = O(max(f(n), g(n)))

    证明:
    不失一般性,假设 f(n) ≤ g(n)
    ⇒ O(f(n)) + O(g(n)) = c1.f(n) + c2.g(n)
    根据我们的假设,我们可以写
    O(f(n)) + O(g(n)) ≤ c1.g(n) + c2.g(n)
    ≤ (c1 + c2) g(n)
    ≤ cg(n)
    ≤ c.max(f(n), g(n))
    根据 Big-Oh(O) 的定义,
    O(f(n)) + O(g(n)) = O(max(f(n), g(n)))

笔记:

  1. 如果lim n→∞ f(n)/g(n) = c ,c ∈ R+ 然后f(n) = Θ(g(n))
  2. 如果lim n→∞ f(n)/g(n) ≤ c ,c ∈ R (c 可以是 0) 那么f(n) = O(g(n))
  3. 如果lim n→∞ f(n)/g(n) = 0 ,则f(n) = O(g(n))g(n) = O(f(n))
  4. 如果lim n→∞ f(n)/g(n) ≥ c ,c ∈ R (c 可以是 ∞) 那么f(n) = Ω(g(n))
  5. 如果lim n→∞ f(n)/g(n) = ∞ ,则f(n) = Ω(g(n))g(n) = Ω(f(n))