精确分析复杂的递推关系(n*logn*logn算法的由来)

本文探讨了复杂的递推关系a(n)=2*a(n/2)+n*logn,通过求解得到b(k)=A*k^2*2^k+B*k*2^k+C*2^k,并利用数学推理确定了A、B、C的值。通过编程验证,展示了算法的时间复杂度主要由A决定,随着n增大,这一趋势愈发明显。

精确分析复杂的递推关系(n*logn*logn算法的由来)

设置a(n)=2*a(n/2)+n*logn,按照以前的相同的处理方式有:

b(k)=2*b(k-1)+2^k*k

Go

通过解答这个方程可以获得b(k)=A*k^2*2^k+B*k*2^k+C*2^k

现在做假设a(1)=1,a(2)=4,a(4)=16,(这些值是通过原始方程推的,当然第一个是假定的)

这样有:

A=1/4

B=-1/4

C=1/2

在这里特别值得提下的是在解这个线性方程的过程中发现C的值在中间过程中可以被消掉。也就是说A,B具有特定的关系,这种关系不因C的值而改变。

 

 

 

下面写程序来证明:

(defun pow (num count)

(if (or (> count 1) (eq  count  1) )

      (* num 

         (pow num 

              (- count 1) ) )

      1))

 

(defun slayer ( count)

(if (or (> count 1) (eq  count  1) )

      (* count 

         (slayer  

              (- count 1) ) )

      1))

 

 

 

(defun  expr (n)

(if (eq  n 1)

       1    

         (+  (*  2

                 (expr (/  n  

                           2)))

             (*  n

                 (/  (log n)

                     (log 2))))))

 

(setq  A  1/4)

(setq  B  -1/4)

(setq  C  1/2)

 

(defun  formula (n)

(+  (*   A 

         (pow  n  2)

         (pow  2  n))

    (*   B

         n

         (pow  2  n))

    (*   C

         (pow  2  n))))

 

 

(defun  test (n)

(if (> n 0)

  (progn 

       (print (expr  (pow 2 (1- n))))

       (print  'compare)

       (print (formula n))   

       (test (- n 1)))

  (print 'over)))

[11]> (test  20)

 

1.0013901E8

COMPARE

100139008

4.508877E7

COMPARE

45088768

2.0185088E7

COMPARE

20185088

8978432.0

COMPARE

8978432

3964928.0

COMPARE

3964928

1736704.0

COMPARE

1736704

753664.0

COMPARE

753664

323584.0

COMPARE

323584

137216.0

COMPARE

137216

57344.0

COMPARE

57344

23552.0

COMPARE

23552

9472.0

COMPARE

9472

3712.0

COMPARE

3712

1408.0

COMPARE

1408

512.0

COMPARE

512

176.0

COMPARE

176

56.0

COMPARE

56

16.0

COMPARE

16

4.0

COMPARE

4

1

COMPARE

1

OVER

OVER

从目前的这种状况看的话,时间复杂度还是由A决定的,随着n的变大,这种关系表现得越明显。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值