最美算法-算法性能

本文探讨了算法性能评估的重要性,主要关注排序算法中的希尔排序。介绍了大O表示法来衡量算法的性能,通过忽略低阶项和常数项,提供算法运行时间的上限。讲解了如何计算复杂度,包括基本操作的执行次数与问题规模的关系,并给出了计算实例。此外,还分享了评估算法性能的常用技巧,如加法和乘法法则。最后,提到了三种复杂度:最坏、平均和最好时间复杂度,强调降低复杂度对于提升效率的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法性能评估

排序

希尔排序

在这里插入图片描述
在这里插入图片描述

public static void shellSort(int[] arr){
        //不断地缩小增量
        for (int interval =arr.length/2;interval >0;interval=interval/2){
            //增量为1的插入排序
            for (int i=interval;i<arr.length;i++){
                int target=arr[i];
                int j=i-interval;
                while (j>-1&&target<arr[j]){
                    arr[j+interval]=arr[j];
                    j-=interval;
                }
                arr[j+interval]=target;
            }
        }
    }

如何评估一个算法的性能?

       评估算法性能,主要评估问题的输入规模n与元素的访问次数。f(n)的关系。规模越大,访问的总次数也越多。整体成上升的状态,但有的快有的慢。

大O表示法

       大O符号,需要忽略非主体部分:如常数项、低阶项。只保留主体的部分,其余部分不需要。大O,表示这个算法的一个上界。算法的运行时间f(n)趋近并小于等于这个O(g(n)).总是贴近但是不超过O(g(n))。
在这里插入图片描述

如何计算

       1、找到一个基本操作(最深层循环)

一层的循环:复杂度为O(n):线性复杂度
双层的循环:n*n:故复杂度为n的平方:平方复杂度
常数阶的算法:无论N怎么增长,所花的时间一直都是固定的时间。无论规模怎么扩大,我的计算还是常数阶的表示为O1.

       2、分析该基本操作的执行次数x与问题规模n的关系x=f(n)
       3、x的数量级O(x)就是算法时间复杂度T(n)

举例

在这里插入图片描述

常用技巧

       1、加法法则:O(f(n))+O(g(n))=O(max(f(n),g(n)))
       2、乘法法则:O(f(n))×O(g(n))=O(f(n)×g(n))
在这里插入图片描述
在这里插入图片描述
由上图可以看出来,在规模增加一些的时候,每一种函数需要的时间变化的趋势不同,相应的性能也就不同了。所以最好的是O(1)。

降低复杂度的一个层次,效率可以提升很多

三种复杂度

最坏时间复杂度:考虑输入数据“最坏”的情况
平均时间复杂度:考虑所有输入数据都等概率出现的情况
最好时间复杂度:考虑输入数据“最好”的情况

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值