算法分析基础(一)

算法分析基础(一)

算法的时间复杂度

算法的概念想必大家要么不知道, 要么烂熟于心, 感兴趣的百度一下, 其实我觉得不是那么重要(只是我觉得), 只要会计算算法的复杂度就可以了(这部分我认为相当重要)

概念
  • 算法的时间复杂度: 针对指定基本运算, 计数算法所做运算次数

  • 基本运算: 比较, 加法, 乘法, 交换, 置指针……

  • 输入规模: 输入串编码长度通常用下述参数度量: 数组元素个数, 调度问题的任务个数, 图的顶点数与边数等.

  • 算法基本运算次数可以表示为输入规模的函数

  • 给定问题和基本运算就决定了一个算法类

输入规模
  • 排序: 数组中元素个数n

  • 检索: 被检索数组的元素个数n

  • 整数乘法: 两个整数的位数m, n

  • 矩阵相乘: 矩阵的行列数 i, j, k

  • 图的遍历: 图的顶点数n, 边数m

  • ……

算法的两种时间复杂度

对于相同输入规模的不同实例, 算法的基本运算次数也不一样, 可定义两种时间复杂度

  • 最坏情况下的时间复杂度W(n)

    算法求解输入规模为n的实例所需要的最长时间

  • 平均情况下的时间复杂度A(n)

    在给定同样规模为n的输入实例的概率分布下, 算法求解这些实例所需要的平均时间

A(n)计算公式

设S是规模为n的实例集, 实例 i 属于S的概率是Pi, 算法对实例 i 执行的基本运算次数是Ti

A ( n ) = ∑ i ∈ S P i T i A(n)=\sum_{i \in S} P_{i} T_{i} A(n)=iSPiTi

在某些情况下可以假定每个输入实例概率相等

二分检索算法平均时间复杂度分析

算法BinarySearch(T, l, r, x)

输入: 数组T, 下标从l到r; 数x

输出: x出现的位置下标 j
在这里插入图片描述

二分检索算法运行实例

在这里插入图片描述
假设n = 2^k - 1, 输入有2n+1种
在这里插入图片描述
比较t次的输入个数
在这里插入图片描述
对t=1, 2, ……k-1 比较t次: 2^(t-1)个
比较k次的输入有2^(k-1) + n + 1个
总次数: 对每个输入乘以次数并求和

二分检索算法平均时间复杂度

假设n=2^k - 1 , 各种输入概率相等

A (

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值