首页 > 编程语言 >算法复杂度

算法复杂度

时间:2024-11-13 18:18:08浏览次数:3  
标签:20 log 递归 1.3 复杂度 nd 算法

递归复杂度

接前面

反恐搜索——打印间隔两枚选择的硬币里一百个数据要一个小时还没有运行完成。它的复杂度是指数级的吗?

常见初等函数的变化曲线

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

T ( n ) = a ∗ T ( n / b ) + O ( n d ) T(n) = a*T(n/b)+O(n^d) T(n)=a∗T(n/b)+O(nd)

T ( n ) T(n) T(n) 代表递归方法处理规模为n的数据量的时间复杂度, a ∗ T ( n / b ) a*T(n/b) a∗T(n/b) 代表调用子递归方法的总体时间复杂度, O ( n d ) O(n^d) O(nd) 代表递归方法其他代码的时间复杂度。

a a a

a a a: 每次递归调用子问题的数量。即在一个递归方法,需要调用几次子递归方法。

b b b

b b b: 子问题的规模缩小的比例。例如二分法递归搜索时,每次需要查找的数据都缩小了一半,那么 b = 2 b=2 b=2

d d d

d d d: 每次递归调用之外的代码时间复杂度的参数。例如二分法递归搜索时,每次递归时除了调用递归的方法,没有什么for循环代码,时间复杂度是 O ( 1 ) O(1) O(1),即 n d = 1 n^d=1 nd=1,因此 $d=0%

推导

1、 d < log ⁡ b a d<\log_{b}a d<logb​a

递归时间复杂度为: O ( n log ⁡ b a ) O(n^{\log_{b}{a}}) O(nlogb​a)

2、 d = log ⁡ b a d=\log_{b}a d=logb​a

递归时间复杂度为: O ( n d ∗ log ⁡ n ) O(n^d *{\log_{}{n}}) O(nd∗log​n)

2、 d > log ⁡ b a d>\log_{b}a d>logb​a

递归时间复杂度为: O ( n d ) O(n^d) O(nd)

T ( n ) = 4 ∗ T ( n / 1.3 ) + O ( n 0 ) T(n) = 4*T(n/1.3)+O(n^0) T(n)=4∗T(n/1.3)+O(n0)

a = 4 a=4 a=4有四个递归调用,
b = 1.3 b=1.3 b=1.3原来一百的数量,最坏的跳过一个就是 100 99 \frac{100}{99} 99100​,到最后最好是五个的时候跳过四个 5 1 \frac{5}{1} 15​,取两个的中值1.3吧。
d = 0 d=0 d=0 max是调用的Python,几乎常数级别。
log ⁡ 1.3 4 = 5.283853591622281 \log_{1.3}4=5.283853591622281 log1.3​4=5.283853591622281
10 0 5.283853591622281 = 36957891253.5873 100^{5.283853591622281}=36957891253.5873 1005.283853591622281=36957891253.5873

与20个数字对比

20个算出的复杂度是7489486.036335511,100个数字的复杂度是它的4934.636512343405倍。测试20个用时0.42999982833862305秒。

s=time.time()
row = [552, 440, 606, 818, 756, 577, 266, 312, 174, 692, 492, 635, 92, 644, 571, 51, 732, 357, 110, 545]    
_, table = coins2(row,{})
print(time.time()-s)
0.42999982833862305
{0: 0, 1: 545, 2: 655, 3: 655, 4: 1277, 5: 1328, 6: 1328, 7: 1921, 8: 2013, 9: 2055, 10: 2455, 11: 3105, 12: 3105, 13: 3105, 14: 3371, 15: 3948, 16: 4438, 17: 4679, 18: 4795, 19: 4994, 20: 5430}

这样看一个小时应该会有答案。是不是问题的缩小规模没有那么大?

1.1

从5次方变成了14次方。

>>> import math
>>> math.log(4,1.1)
14.545081794683426
>>> 

那就是20个数字用时的13647875839.232113倍,要186年完成计算。

>>> 0.42999982833862305*13647875839.232113/(3600*24*365)
186.0915863792697

指数级的复杂度

从开头的图也可以看出3次方的时候就直接竖上去了。20以内的数据量还可以承受的。

标签:20,log,递归,1.3,复杂度,nd,算法
From: https://blog.csdn.net/denghai_csdn/article/details/143566153

相关文章

  • 算法专题:优先级队列(堆)
    目录1.最后一块石头的重量1.1算法原理1.2算法代码2. 数据流中的第K大元素2.1算法原理 2.2算法代码3.前K个高频单词3.1算法原理3.2算法代码4.数据流的中位数4.1算法原理4.2算法代码1.最后一块石头的重量.-力扣(LeetCode)1.1算法原理建一......
  • BFS 算法专题(二):BFS 解决 FloodFill 算法
    目录1.图像渲染1.1算法原理1.2算法代码2.岛屿数量2.1算法原理2.2算法代码3.岛屿的最大面积3.1算法原理3.2算法代码4.被围绕的区域4.1算法原理4.2算法代码1.图像渲染.-力扣(LeetCode)1.1算法原理在本专题之前,对于FloodFill算法,我们就已......
  • 代码随想录算法训练营第二十五天| leetcode491.递增子序列、leetcode46.全排列、leetc
    1leetcode491.递增子序列题目链接:491.非递减子序列-力扣(LeetCode)文章链接:代码随想录视频链接:回溯算法精讲,树层去重与树枝去重|LeetCode:491.递增子序列_哔哩哔哩_bilibili思路:用之前的方法,结果翻车了,好好看视频学新技能吧1.1视频后的思路真的没想到用set来去重,还是基......
  • 迪杰斯特拉算法、弗洛伊德算法和BFS(广度优先搜索)
    迪杰斯特拉算法、弗洛伊德算法和BFS(广度优先搜索)都是用于求解最短路径问题的经典算法,它们各自有不同的特点和适用场景。以下是对这三种算法的介绍、区别以及代码实现的简要概述。迪杰斯特拉算法(Dijkstra'salgorithm)介绍:迪杰斯特拉算法是一种单源最短路径算法,用于计算一个......
  • 代码随想录算法训练营 | 所有可达路径
    所有可达路径文章链接:https://programmercarl.com/kamacoder/0098.所有可达路径.html#本题代码题目链接:https://kamacoder.com/problempage.php?pid=1170#include<iostream>#include<vector>usingnamespacestd;//全局路径vector<vector<int>>paths;vector<in......
  • c语言第九课,各种算法
    选择排序选择排序(从未排序列找到最值,放到排序序列的起始位置)#include<stdio.h>voidselect_sort(inta[],intn)//定义选择排序函数{  for(inti=0;i<n-1;i++)//遍历数组找到最小的元素索引,n-1是因为最后一次可以排序两个  {    intmin=i;//假......
  • 洛谷题单 算法2-2 常见优化技巧
    洛谷题单算法2-2常见优化技巧单调栈单调栈最经典的应用,就是在一个数列里寻找距离元素最近的比其大/小的元素位置。模板题,寻找每个元素右边第一个比它大的元素下标。stack<int>s;for(inti=n;i>=1;i--){while(s.size()&&a[s.top()]<=a[i])s.pop();f[i]=s.......
  • 非煤矿山算法智慧矿山一体机提升机危险区域违规闯入识别边坡监测预警系统详述
    在矿山行业中,安全始终是最为关键的议题。随着智能化技术的发展,智慧矿山一体机应运而生,它专为矿山安全监控和管理设计,集成了多种智能化功能,以提升矿山的安全监管能力和生产效率。这款设备不仅能够满足矿山场景下的视频智能化建设需求,还能够通过边缘计算技术实现对矿山安全风险的实......
  • 【算法学习】单调队列优化dp
    前言这已经是很基础很模板化的优化了,我们可以理解为用贪心的思路去掉了永远不可能用到的状态,通常用于长度固定是个区间、最大值且满足单调性的题目。如果一个选手比你小,还比你强,你就永远也打不过他了。这很残酷但这也是单调队列的思想,虽然现实情况比较多变。P3572[POI2014]PT......
  • 街面环卫算法视频分析服务器沿街晾晒智慧城管算法详解
    在城市精细化管理的背景下,智慧城管和街面秩序维护的需求日益增长。为了提高城市管理效率,确保城市秩序和市容市貌,一款集高清视频监控、智能分析与告警、数据资源共享服务于一体的智能化一体机设备应运而生。本文将详细介绍街面环卫算法视频分析服务器的功能特点以及其在智慧城管和......