精确分析复杂的递推关系(多项式函数算法形式改变)

精确分析复杂的递推关系(多项式函数算法形式改变)

设置a(n)=8*a(n-1)+3^n+7^n,按照以前的相同的处理方式有:

a(n-1)=8*a(n-2)+3^(n-1)+7^(n-1)

Go

上面两个式子(1)-7*(2)有:

a(n)-7*a(n-1)=8*{ a(n-1)- 7* a(n-2) } + 3^n - 7* 3^(n-1)

化简有:

a(n)-7*a(n-1)=8*{ a(n-1)- 7* a(n-2) } +  - 4* 3^(n-1)

从这里可以看出其中将只存在一个多项式函数,按照这种思维可以获得a(n)的通项公式:

a(n)=A*7^n+B*8^n+C*3^n

在这里先假定初始值为a(1),有如下方程组合:

A*7+B*8+C*3=a(1)

A*7^2+B*8^2+C*3^2=8*a(1)+7^2+3^2

A*7^3+B*8^3+C*3^3=8* { 5*a(1)+7^2+3^2 } +7^3+3^3

GO

按照如下方式来解线性方程,与前面日志相比这里有了变化:

(2)-(1)*8有:

A*7*(-1)+C*3*(-5)=7^2+3^2

(3)-(2)*8有:

A*7^2*(-1)+C*3^2*(-5)=7^3+3^3

从这里可以看出A与C的关系还是固定的,并且可以解得

A=-7

C=-5/2

回代有a(1)=8*B-49-9/5

这里假设B=100

 

 

下面写程序来证明:

(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)

       (-   (*  8.0

               B)

             49

             9/5)   

         (+  (*  8

                 (expr (-  n  

                           1)))

             (pow 3

                  n)

             (pow 7 

                  n))))

 

(setq  A  -7)

(setq  B  100)

(setq  C  -3/5)

 

(defun  formula (n)

(+  (*   A          

         (pow  7  n))

    (*   B

         (pow  8.0  n))

    (*   C

         (pow  3  n))))

 

 

(defun  test (n)

(if (> n 0)

  (progn 

       (print (expr  n))

       (print  'compare)

       (print (formula n))       

       (test (- n 1)))

  (print 'over)))

[64]> (test  10)

 

1.0539682E11

COMPARE

1.0539682E11

1.3139286E10

COMPARE

1.3139285E10

1.6373641E9

COMPARE

1.637364E9

2.0394909E8

COMPARE

2.0394909E8

2.539042E7

COMPARE

2.5390418E7

3159005.3

COMPARE

3159005.3

392744.4

COMPARE

392744.4

48782.8

COMPARE

48782.8

6051.6

COMPARE

6051.6

749.2

COMPARE

749.2

OVER

OVER

这其中有个很微妙的逻辑,本来我的计划是希望能将A变为0,但在这里不行,因为它与C的关系是固定的,如果要求a(1)为正数,那么B必须为正数,这样因为8的指数最大,所以时间复杂度由它决定了。

 

在这个形式上的变化过程中,我们可以获得很多启示,特别是其中的AC间的固定关系,还有A,C的符号变化规则。。。这些包含了所有的信息,决定了最终的时间复杂度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值