算法导论读书笔记:冒泡排序法、多项式计算及霍纳规则原理分析

思考题2-2 问题描述:冒泡排序(Bubblesort)算法是一种流行的排序算法,它重复地交换相邻的两个反序元素。其伪代码为:

BUBBLESORT (A)
for i ← 1 to length(A)
    for j ← length(A) down to i + 1
        if A[j] < A[j - 1]
            exchange A[j] ↔ A[j - 1]

冒泡排序算法的最坏情况运行时间是什么?

算法的运行时间主要取决于第2-4行的for循环,给定i的值,循环进行了n-i次迭代,而i的取值为1,2,…,n,则总的运行次数为:


思考题 2-3 多项式计算以及霍纳规则:对于多项式P(n)

\[P(n) = \sum\limits_{k = 0}^n {{a_k}{x^k} = {a_0} + x({a_1} + x({a_2} + ... + x({a_{n - 1}} + x{a_n})))} \]

1. 采用直接迭代计算:伪代码为:

sum= 0
for k ← 0
    sum ← sum + * xk ^ k

对于每个k,假设幂运算是元素多次相乘以及加法和乘法指令的时间一样,则每次迭代sum+ ak * x ^ k 的计算复杂度为 k + 2,总的计算时间为:\[T(n) = {c_1}n + {c_2}((0 + 2) + (1 + 2) + ... + (n + 2)) = {c_1}n + {c_2}\frac{{(n + 1)(n + 4)}}{2}\]

对于每个k,假设幂运算是元素多次相乘以及加法和乘法指令的时间一样,则每次迭代sum+ ak * x ^ k 的计算复杂度为 k + 2,总的计算时间为:\[T(n) = {c_1}n + {c_2}((0 + 2) + (1 + 2) + ... + (n + 2)) = {c_1}n + {c_2}\frac{{(n + 1)(n + 4)}}{2}\] 即时间复杂度为O(x^2)。

2. 采用霍纳规则计算多项式:

\[P(n) = {a_0} + x({a_1} + x({a_2} + ... + x({a_{n - 1}} + x{a_n})))\]  对上述等效计算多项式,霍纳规则的伪代码为:
y ← 0
i ← n
while i >= 0
    do y ←  ak + x * y
     i  =  i - 1

对于每个i,其时间复杂度为2,则采用霍纳规则计算多项式的计算时间为:\[T(n) = {c_1}n + {c_2} \times 2 \times n = ({c_1} + 2{c_2})n\] 即时间复杂度为O(n)。对比直接迭代计算多项式,霍纳规则在时间复杂度上要优很多。


猜你喜欢

转载自blog.csdn.net/weixin_40170902/article/details/79047103