极客时间:数据结构与算法之美【文章笔记 & 实践 & 总结】

原文链接:https://time.geekbang.org/column/intro/100017301

  • 27 | 递归树
    • 如何借助树来分析归并排序算法的时间复杂度?
    • 如何借助树来分析快速排序算法的时间复杂度?
    • 如何借助递归树来分析斐波那契数列的时间复杂度?

27 | 递归树

如何借助树来分析归并排序算法的时间复杂度?

TUDO:归并排序递归树。

每次分解一分为二,代价很低,时间上消耗记作O(1)。
每一层合并消耗时间相同,和数据规模相关,记作 O(n)。
归并排序递归树是一颗满二叉树,高度为 log2n。
归并排序时间复杂度:O(n logn)

如何借助树来分析快速排序算法的时间复杂度?

平均情况:1 : k
k = 9 时。
TUDO:快速排序递归树。

每一层遍历 n 个元素。
快速排序结束条件,叶子节点 1 个元素。根节点 n 个元素到叶子节点 1 个元素最短路径每一层乘 1 /10,最长路径每一层乘 9 / 10,根节点到叶子节点最短路径:log10n,最长路径 log(10 / 9 ) n,遍历个数在 n * log10 到 n * log(10 / 9 ) n 之间,快速排序时间复杂度为:O(n logn)。

k 的值不随 n 改变,对最终时间复杂度无影响。

如何借助递归树来分析斐波那契数列的时间复杂度?

你可能感兴趣的:(数据结构和算法,文章笔记&个人思考,笔记,算法,数据结构)