大O算法

表示了所有上限中最小的那个上限

时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。

空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。

问题规模:

​ 定义:影响算法执行时间的主要因素

复杂度:
  • 1、什么是复杂度分析?

    1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。

    2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。

    3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。

    4.复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。

  • 2、为什么要进行复杂度分析?

  • 1.和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。

  • 2.掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。

  • 3、如何进行复杂度分析? 1.大O表示法

  • 1)来源 算法的执行时间与每行代码的执行次数成正比,用T(n) = O(f(n))表示,其中T(n)表示算法执行总时间,f(n)表示每行代码执行总次数,而n往往表示数据的规模。

  • 2)特点 以时间复杂度为例,由于时间复杂度描述的是算法执行时间与数据规模的增长变化趋势,所以常量阶、低阶以及系数实际上对这种增长趋势不产决定性影响,所以在做时间复杂度分析时忽略这些项。

    2.复度分析法则
    1)单段代码看高频:比如循环。
    2)多段代码取最大:比如一段代码中有单循环和多重循环,那么取多重循环的复杂度。
    3)嵌套代码求乘积:比如递归、多重循环等
    4)多个规模求加法:比如方法有两个参数控制两个循环的次数,那么这时就取二者复杂度相加。

所有代码的执行时间 T(n) 与每行代码的执行次数 f(n) 成正比。

  • 4、常用的复杂度级别?

    1. 多项式阶:随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长。

      包括,

      O(1)(常数阶):一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)

      O(logn)(对数阶)、

      O(n)(线性阶)、

      O(nlogn)(线性对数阶)、

      O(n^2)(平方阶)、

      O(n^3)(立方阶)

      img

    2. 非多项式阶:随着数据规模的增长,算法的执行时间和空间占用暴增,这类算法性能极差。包括, O(2^n)(指数阶)、O(n!)(阶乘阶) 五、如何掌握好复杂度分析方法? 复杂度分析关键在于多练,所谓孰能生巧

数量级函数:oder of magnitude

1.基本操作数量函数T(n)的精确值并不是特别重要,重要的是T(n)中起决定性因素的主导部分

2.数量级函数描述了T(n)中随着n增加而增加速度最快的主导部分

O(f(n)) : 其中f(n)表示T(n)中的主导部分

影响算法运行时间的其他因素

有时决定运行时间的不仅是问题规模

某一些具体数据也会影响算法运行时间

分为:平均,最好,最坏,

https://blog.csdn.net/qq_36847713/article/details/107702887

### 回答1: 大O算法分析是一种用来估算算法的时间复杂度的方法。它通过分析算法执行所需的基本操作次数来估算算法的时间复杂度。 在 Python ,可以使用内置的 timeit 模块来测量算法的执行时间。例如,下面是一个使用 timeit 模块测量排序函数的执行时间的示例代码: ``` import timeit def sort_function(data): # sort function implementation here data = [1, 2, 3, 4, 5] elapsed_time = timeit.timeit(lambda: sort_function(data), number=1) print(f"Execution time: {elapsed_time:.6f} seconds") ``` 在这个示例,我们使用 timeit.timeit 函数来测量 sort_function 函数的执行时间。参数 number=1 表示函数只执行一次,这样可以消除执行多次函数时带来的时间误差。 注意,大O算法分析并不能准确地预测算法的实际执行时间,因为它忽略了许多细节,如硬件和操作系统的性能。但是,它是一种有用的工具,可以帮助我们比较不同算法的性能并选择最优的算法。 ### 回答2: 大O算法是一种用来分析算法效率的方法,它描述了算法在处理问题规模增大时,所需时间和空间的增长趋势。常见的大O表示法有O(1)、O(log n)、O(n)、O(n^2)等。 Python代码示例: ```python # O(1) def constant_time(): print("Hello, World!") # O(n) def linear_time(n): for i in range(n): print(i) # O(n^2) def quadratic_time(n): for i in range(n): for j in range(n): print(i, j) # O(log n) def logarithmic_time(n): i = n while i >= 1: print(i) i = i // 2 # O(n log n) def linearithmic_time(n): for i in range(n): j = n while j >= 1: print(i, j) j = j // 2 ``` 以上代码分别展示了O(1)、O(n)、O(n^2)、O(log n)和O(n log n)时间复杂度的算法示例。具体来说,O(1)的算法时间不受问题规模的影响,O(n)算法的运行时间与问题规模成线性关系,O(n^2)算法的运行时间与问题规模的平方成正比,O(log n)算法的运行时间与问题规模的对数成正比,O(n log n)算法的运行时间为问题规模与其对数的乘积关系。通过大O算法分析,我们能够判断出不同算法在处理问题时的时间复杂度,从而选择合适的算法来提高算法的效率。 ### 回答3: 大O算法是一种用来对算法的时间复杂度进行估计的方法。 在大O算法,我们关注的是算法在最坏情况下的运行时间,而不是具体的运行时间。通过分析算法的结构和运行过程,我们可以推导出算法的时间复杂度。 给定一个问题规模为n的问题,一般会将解决该问题所需的计算步骤数与n的关系进行分析。我们关注的是该关系的数量级,即随着问题规模的增加,计算步骤数的增长速度。 大O算法算法的时间复杂度用O(f(n))来表示,其f(n)是问题规模n的函数。通过对算法的代码进行分析,我们可以找到该函数f(n)。 下面以一个简单的例子来说明如何进行大O算法分析。假设我们有一个包含n个元素的列表,我们想要查找该列表的最大值。 Python代码如下: def find_max(lst): max_val = lst[0] for num in lst: if num > max_val: max_val = num return max_val 在这个算法,我们遍历整个列表,并记录当前的最大值。如果遇到更大的值,我们就更新最大值。最后返回最大值。 遍历列表的过程需要执行n次,因此时间复杂度为O(n)。这意味着,随着列表元素数量的增加,算法的运行时间将以线性的方式增长。 通过大O算法分析,我们可以快速了解一个算法的运行时间随着问题规模增加的情况,帮助我们优化算法的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值