1. 程式人生 > >關於時間複雜度的幾個典型證明

關於時間複雜度的幾個典型證明

0x01 證明O(f)+O(g)=O(f+g)O(f)+O(g) = O(f+g)

F(n)=O(f)F(n)=O(f),則存在自然數n1n_1、正數c1c_1,使得任意自然數nn1n\geq n_1,有:

  • F(n)c1f(n)F(n)\leq c_1f(n)

同理,令G(n)=O(g)G(n)=O(g),存在自然數n2n_2,正數c2c_2,使得對任意自然數nn2n\geq n_2,有:

  • G(n)c2g(n)G(n)\leq c_2g(n)

c3=max(c1,c2)c_3=max(c_1,c_2)n3=max(n1,n2)n_3=max(n_1,n_2),則對所有的nn3n\geq n_3,有:

  • F(n)c1f(n)c3f(n)F(n)\leq c_1f(n)\leq c_3f(n)
  • G(n)c2g(n)c3g(n)G(n)\leq c_2g(n) \leq c_3g(n)

故:

  • O(f)+O(g)=F(n)+G(n)c3f(n)+
    c3g(n)=c3(f(n)+g(n))O(f)+O(g)=F(n)+G(n)\leq c_3f(n)+c_3g(n)=c_3(f(n)+g(n))

即得證。

0x02 證明θ(f)+θ(g)=θ(f+g)\theta(f)+\theta(g) = \theta(f+g)

F(n)=θ(f)F(n)=\theta (f),則存在自然數n1n_1和正數c1c_1c2c_2,使得任意自然數nn1n\geq n_1,有:

  • c1f(n)F(n)c2f(n)c_1f(n)\leq F(n)\leq c_2f(n)

同理,令G(n)=θ(g)G(n)=\theta (g),存在自然數n2n_2和正數c3c_3c4c_4,使得對任意自然數nn2n\geq n_2,有:

  • c3g(n)G(n)c4g(n)c_3g(n)\leq G(n)\leq c_4g(n)

得:

  • c1f(n)+c3g(n)F(n)+G(n)c2f(n)+c4g(n)c_1 f(n)+c_3 g(n) \leq F(n) + G(n) \leq c_2 f(n) + c_4 g(n)

存在c1=c3c_1=c_3c2=c4c_2=c_4,使得:

  • c1(f(n)+g(n))F(n)+G(n)c2(f(n)+g(n))c_1 (f(n)+g(n)) \leq F(n) + G(n) \leq c_2 (f(n) + g(n))

即得證。

0x03 證明max(θ(f),θ(g))=θ(f+g)max(\theta (f),\theta (g))=\theta (f+g)

網上看到的一些類似證明,我覺得都不是很合理,可能本人智商欠費的原因QAQ

F(n)=θ(f)F(n)=\theta (f),則存在自然數n1n_1和正數c1c_1c2c_2,使得任意自然數nn1n\geq n_1,有:

  • c1f(n)F(n)c2f(n)c_1f(n)\leq F(n)\leq c_2f(n)

同理,令G(n)=θ(g)G(n)=\theta (g),存在自然數n2n_2和正數c3c_3c4c_4,使得對任意自然數nn2n\geq n_2,有:

  • c3g(n)G(n)c4g(n)c_3g(n)\leq G(n)\leq c_4g(n)

得:

  • c1f(n)+c3g(n)F(n)+G(n)c2f(n)+c4g(n)c_1 f(n)+c_3 g(n) \leq F(n) + G(n) \leq c_2 f(n) + c_4 g(n)

存在c1=c3c_1=c_3c2=c4c_2=c_4,使得: