【算法】时间复杂度

时间复杂度

一、时间复杂度的基本概念

1.时间复杂度

问题实例是决定计算成本的主要因素,具体地,特定算法处理规模为n的问题所需的时间可记为T(n)

T(n)是算法所执行基本操作的总次数,决定于组成算法的所有语句各自的执行次数,以及其中所含基本操作的数目。

2.渐进复杂度

评价算法效率时,关注其处理大规模问题时的表现,着重长远、更为注重时间复杂度的总体变化趋势和增长速度的策略和方法,即渐进分析。

3.不同记法

(1)“大O记号”——渐进上界(读法:big O)

T(n)= O(f(n)) 

c>0,有O(f(n))= O(c*f(n))

a>b>0,有O(n^a+n^b) = O(n^a)

(2)“大Ω记号”——渐进下界(读法:big omega)

(3)“大Θ记号”——确界(读法:big theta)

二、时间复杂度的分析
1.常数O(1)

include<iostream>;
using namespace std;
int sum = 0,n = 100; //执行一次
sum = (1+n)*n/2; //执行一次
std ::cout<<sum; //执行一次

运行次数的函数为f(n) = 3,推导大O阶的规则,需要将3变为1,所以T(n)=3,所以算法复杂度为O(1)

2. 线性阶

主要分析循环结构的运行情况,

for(int i = 0;i<n; i++)
{
        //时间复杂度为O(1)的算法
    ...    
}

上面循环体中的代码执行了n次,因此时间复杂度为O(n)

3.对数阶

int num = 1;
while (num < n)
{
    num = num *2;
    //时间复杂度为O(1)的算法
}

设循环次数为x,2^x=n,s所以x=log2n

所以时间复杂度为O(logn)

4.平方阶

循环嵌套

for(int i = 0; i<n ; i++)
{
    for(int j =i; j<n ; j++)
        {
            //复杂度为O(1)的算法
        }
}

内循环中j从i开始增加,直到n,因此循环次数为n+(n-1)+(n-2)+...+1 = n(n+1)/2 = n^2 + n/2

由于大O阶只保留最高阶,且忽略常数,所以T(n)=O(n^2)

5.比较

O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)

因此,一般而言,算法的时间复杂度尽量为O(1)、 O(logn)   、O(n)、   O(nlogn)且越小越好

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行排序算法时间复杂度分析时,我们通常使用大O表示法来描述算法执行所需的时间。大O表示法是一种定性描述算法时间复杂度的方法。 对于希尔排序算法,它的时间复杂度介于O(n^1.3)到O(n^2)之间。具体的时间复杂度取决于所选取的增量序列和增量的取值。根据研究结果,如果增量序列的选择合理,希尔排序算法时间复杂度约为O(n^1.3)。 对于其他排序算法时间复杂度分析,我们可以通过比较基本操作的重复执行次数来进行。假设问题规模为n,解决该问题的算法中基本操作的执行次数为T(n)。如果存在一个辅助函数f(n),使得T(n)/f(n)的极限值为不等于零的常数,那么我们就可以说f(n)是T(n)的同数量级函数。因此,我们可以表示T(n) = O(f(n)),其中O(f(n))被称为算法的渐进时间复杂度,简称时间复杂度时间复杂度越高,算法的执行效率越低。 举例来说,简单选择排序算法的最坏、最好和平均时间复杂度都为O(n^2),因此它是常见排序算法中性能最差的排序算法。在简单选择排序中,每一趟排序都需要选择出最小排序码的记录,需要进行n-i次比较,因此总的比较次数为∑i=1n−1(n−i)=n(n−1)/2=O(n^2)。 综上所述,排序算法时间复杂度分析可以根据不同算法的特点和基本操作的重复执行次数进行。希尔排序算法时间复杂度介于O(n^1.3)到O(n^2)之间,而简单选择排序算法时间复杂度是O(n^2)。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [常见的排序算法及其复杂度分析](https://blog.csdn.net/Lyf_Ah/article/details/123796354)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [排序算法时间复杂度](https://blog.csdn.net/Ehontoo/article/details/124274303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值