分析此函数的主要挑战是没有那么多的递归调用,但每次调用都会返回一个逐渐增大和增大的元素列表。特别要注意的是,有n! n个元素列表的排列。因此,我们知道如果你在一个大小为n的列表上进行递归调用,将会有n!元素返回。

让我们来看看这将如何影响运行时。如果只有一个元素的列表,则时间复杂度为O(1)。否则,我们假设在列表中有n + 1个元素。算法然后

在大小为n的列表上进行递归调用。

对于返回的每个元素,将列表的第一个元素拼接到所有可能的位置。

返回结果。

我们可以通过看在递归的每一层所做的工作,这意味着我们将重点放在步骤(2)和(3)现在分析递归总运行时间。

请注意,在步骤2中,如果列表中有n + 1个元素,我们将不得不查看n!递归调用产生的排列。每个排列都有n个元素。对于每个排列,我们创建n + 1个新列表,其中每个列表都有n + 1个元素。因此,我们有n!循环迭代,每个循环都有(n + 1)的工作。因此,这个级别完成的总工作量(大致)为(n + 1)· ñ!我们可以注意到(n + 1)· N! =(n + 1)!,所以完成的工作可以写成(n + 1)(n + 1)!。这严格小于(n + 2)!,所以我们可以说在有n + 1个总元素时所做的工作是O((n + 2)!)。 (注意,我们不能说这是O(n!),因为n!= o((n + 2)!))。

所以,现在我们可以说,所做的总功是(粗略地讲)由

1给出! + 2! + 3! + ... +(n + 1)!

据我所知,这没有一个很好的封闭式公式。但是,我们可以注意到,

1! + 2! + 3! + ... +(n + 1)!

=(n + 2)(n + 1)!

=(n + 2)!

所以整体表达式是O((n + 2)!)。同样,我们有

1! + 2! + 3! + ... +(n + 1)!

>(n + 1)!

所以整体表达式是Ω((n + 1)!)。换句话说,真正的答案夹在(n + 1)之间的某个地方(渐近地)!和(n + 2)!.因此,运行时间会快速增长。

希望这会有所帮助!

python index函数时间复杂度_如何确定Python中递归循环的时间复杂度?相关推荐

  1. python展开函数方法_逐步展开Python详细教学—Python语法

    Python语法–在Python世界迈出第一步 我们已经拥有了许多的编程语言,而且都有自己的特色,但是一种语言的独特之处在于它的特性.最终,是它的特点让它被选中或通过项目.因此,在开始更深入的Pyth ...

  2. python 求函数最大值_遗传算法与Python图解

    import matplotlib.pyplot as plt import numpy as np import random import pandas as pd 遗传算法求函数最值 遗传算法的 ...

  3. python dict函数用法_如何将python中的dict作为参数传入c函数中用c做相关的处理?...

    展开全部 #先上代码再解释 static PyObject *keywdarg_parrot(PyObject *self, PyObject *args, PyObject *keywds) { i ...

  4. python get函数用法_详解python中get函数的用法(附代码)

    描述 Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法:dict.get(key, default=None) 参数 key – 字典中要查找 ...

  5. python index函数时间复杂度_初学python之以时间复杂度去理解列表常见使用方法

    列表list,一个有序的队列 列表内的个体为元素,由若干个元素按照顺序进行排列,列表是可变化的,也就是说可以增删 list定义 常用的列表定义方式: 使用[] 或者 a = list() 取数列表可以 ...

  6. 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...

    1. 上下文管理器 一个类只要实现了 __enter__() 和 __exit__() 这个两个方法,通过该类创建的对象我们就称之为上下文管理器. 上下文管理器可以使用 with 语句,with语句之 ...

  7. python index()函数

    python内置index()函数 index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python ...

  8. python实用性函数分享_分享|3个开源的 Python Shell

    Python是一个高级.通用.结构化且强大的开源编程语言,广泛用于各种编程工作.它拥有一个全动态类型系统和自动内存管理,与Scheme,Ruby,Perl和Tcl的十分相似,避免编译型语言的许多复杂地 ...

  9. python函数调用的例子_实例讲解Python中函数的调用与定义

    调用函数: #!/usr/bin/env python3 # -*- coding: utf-8 -*- # 函数调用 >>> abs(100) 100 >>> a ...

最新文章

  1. 洛谷.4234.最小差值生成树(LCT)
  2. 实验1 应用SQL Server进行数据定义和管理
  3. java aop性能检测_Spring AOP 性能监控器
  4. wireshark 选择网络接口
  5. boot数据加解密 spring_springboot项目使用druid对数据库密码的加解密
  6. Django路由系统
  7. python工作方法_用python开始一天工作
  8. 人生是自己的选择,双11技术大队长的育女心经
  9. EAST算法超详细源码解析:数据预处理与标签生成
  10. 动态SQL及SQL片段、_parameter、#{}和${}的区别
  11. (转)Eclipse在线配置Hibernate Tools
  12. nftables-howto-zh中文手册(不完整)
  13. 执行下面程序段后,y的结果是____。int x,y;x=y=2;x=x-2(y=y+1);printf(“%d“,y);A。3 B.2 C.1 D。0
  14. python 1 面向对象基础知识
  15. 高清电视开播:大多用户仍难跨入
  16. 关于拿到一个别人给你已经上架的App源代码时,首先需要干的几个事情
  17. 【吐血整理,建议收藏】B站上有哪些值得反复观看的Java视频教程?
  18. 魅族用fiddler抓包工具安装CA证书在哪里安装
  19. Django 入门:tests.py
  20. 使用TIMESTAMPDIFF计算两个时间戳之间的时间间隔

热门文章

  1. Apache Flink 零基础入门(七)Flink中keyBy三种方式指定key
  2. css为什么要清除浮动
  3. 二十年编程语言风云,哪款是你的爱豆?
  4. 一文看懂神经网络初始化!吴恩达Deeplearning.ai最新干货
  5. php 编程风格,PHP程序员的自我修炼:PHP编程风格_PHP教程
  6. keil 在项目栏总有个叉_老股民的热心分享:均线金叉死叉买卖定式”,散户值得一看!...
  7. Android本地存储键值对,flutter本地存储键值对简单数据(相当于web的localstorage) 代码实现...
  8. python中property方法有用_python中@property和property函数常见使用方法示例
  9. php json解析教程,php解析json
  10. 长安大学计算机科学与技术(交通信息工程)课程专业课,长安大学硕士专业交通信息工程及控制介绍...