时间复杂度

​ 用来估计算法运行时间的一个式子.

​ 一般来说, 时间复杂度高的算法比复杂度低的算法慢.

常见的时间复杂度:

​ O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n2logn) < O(n3)

快速判断时间复杂度

​ 循环减半的过程---> O(logn)

​ 几层循环就是n的几次方的复杂度

空间复杂度

​ 用来评估算法内存占用大小的一个式子

​ 空间可以换时间

递归

递归的两个特点

​ 调用自身

​ 终止条件

斐波那切数列

​ 1 1 2 3 5 8 ........

# 计算函数运行时间的装饰器
from cal_time import get_running_time ### 第一种
def fibonacci(n):
if n == 0 or n == 1:
return 1
else:
for i in range(2, n + 1):
return fibonacci(n - 1) + fibonacci(n - 2) # 给递归函数加装饰器, 需要套一个外壳
@get_running_time
def fib1(n): # 存在重复计算, 效率慢
return fibonacci(n) print(fib1(30)) ### 第二种
@get_running_time
def fib2(n):
li = [1, 1]
if n == 0 or n == 1:
return 1
else:
for i in range(2, n + 1):
li.append(li[-1] + li[-2]) return li[n] print(fib2(30000)) ### 第三种
@get_running_time
def fib3(n):
a = 1
b = 1
c = 1 for i in range(2, n + 1):
c = a + b
a = b
b = c return c print(fib3(30000)) # The fib1 running time is 1.0533857345581055
# 1346269 # The fib2 running time is 0.0519812107086182 # The fib3 running time is 0.0130012035369873

汉诺塔问题

问题描述

​ 有三根柱子, 其中一根柱子上, 从下往上按照大小顺序摞着n个圆盘, 把按照大小顺序重新摆放到另一根柱子上

要求

​ 小圆盘上不能放置大圆盘, 在三根柱子之间一次只能移动一个圆盘.

分析

​ n个圆盘时

​ (1) 把n-1个圆盘从A经过C移动到B

​ (2) 把第n圆盘从A移动到C

​ (3) 把n-1个圆盘从B经过A移动到C

​ 故汉诺塔移动次数的递推式: h(n) = 2h(n-1) + 1

count = 0

def hanoi(n, a, b, c):
""" :param n: n个圆盘
:param a: 出发的柱子a
:param b: 经过的柱子b
:param c: 到达的柱子c
:return:
""" if n > 0:
hanoi(n - 1, a, c, b)
print('{}->{}'.format(a, c))
global count
count += 1
hanoi(n - 1, b, a, c) n = 3
hanoi(n, 'A', 'B', 'C')
print('{}个圆盘时, 汉诺塔移动次数: {}'.format(n, count)

python---复杂度、斐波那切数列、汉诺塔的更多相关文章

  1. Python迭代器(斐波拉切数列实例)

    将一个容器通过iter()函数处理后,就变成了迭代器.迭代器有2个魔法方法__iter__.__next__,一个迭代器必须实现__iter__,这个方法实际上是返回迭代器本身(return self ...

  2. 【python】递归(阶乘、斐波纳契、汉诺塔)

  3. Python与Go斐波那契数列

    #!/usr/bin/env python # -*- coding: utf-8 -*- # 斐波那契数列 def fibonacci_sequence(num): aa = 0 b = 1 li ...

  4. python练习:斐波那契数列的递归实现

    python练习:斐波那契数列的递归实现 重难点:递归的是实现 def fib(n): if n==0 or n==1: return 1 else: return fib(n-1)+fib(n-2) ...

  5. 如何使用Python输出一个[斐波那契数列]

    如何使用Python输出一个[斐波那契数列]Fibonacci 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonac ...

  6. Python递归及斐波那契数列

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...

  7. Python 实现 动态规划 /斐波那契数列

    1.斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数 ...

  8. Python递归函数与斐波那契数列

    定义:在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 阶乘实例 n = int(input(">>:")) def f(n): s ...

  9. Codeforces 316E3 线段树 + 斐波那切数列 (看题解)

    最关键的一点就是 f[ 0 ] * a[ 0 ] + f[ 1 ] * a[ 1 ] + ... + f[ n - 1] * a[ n  - 1] f[ 1 ] * a[ 0 ] + f[ 2 ] * ...

随机推荐

  1. tensorflow源码解析之framework-tensor

    目录 什么是tensor tensor继承体系 与Eigen3库的关系 什么是tensor_reference tensor_shape tensor_slice 其它结构 关系图 涉及的文件 迭代记 ...

  2. netty系列之:netty中各不同种类的channel详解

    目录 简介 ServerChannel和它的类型 Epoll和Kqueue AbstractServerChannel ServerSocketChannel ServerDomainSocketCh ...

  3. SpringBoot学习入门之Hello项目的构建、单元测试和热部署等(配图文,配置信息详解,附案例源码)

    前言: 本文章主要是个人在学习SpringBoot框架时做的一些准备,参考老师讲解进行完善对SpringBoot构建简单项目的学习汇集成本篇文章,作为自己对SpringBoot框架的总结与笔记. 你将 ...

  4. LGP5430题解

    新的 \(O(k+\log n)\) 做法. 考虑计算每个猴子对答案的贡献. 打个表: 1 1 2 4 8 16 32 ... 可以看出第 $ i $ 个猴子对答案的贡献是 \(i^k \times ...

  5. 基于python 信用卡评分系统 的数据分析

    基于python 信用卡评分系统 的数据分析 import pandas as pd import matplotlib.pyplot as plt #导入图像库 from sklearn.ensem ...

  6. python psutila模块(示例)

    # qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_36374896 import psutil import time import datetime ...

  7. 玩转SpringBoot之定时任务@Scheduled线程池配置

    序言 对于定时任务,在SpringBoot中只需要使用@Scheduled 这个注解就能够满足需求,它的出现也给我们带了很大的方便,我们只要加上该注解,并且根据需求设置好就可以使用定时任务了. 但是, ...

  8. git 的使用(新手)

    git的使用心得 windows版本下载git地址 git config --global user.name 用户名 在使用git前要注册用户名(个人称谓) git config --global ...

  9. Element-UI资源原型库

    Element-UI v2.0.0版本 Axure和Sketch库: 链接:https://pan.baidu.com/s/1LdsEh8BKQBjcWBKV5yQilQ 提取码:1xqn

  10. SpringDataJdbc整合MyBatis方式

    由于官方文档springdatajdbc整合mybatis过于简述,导致死磕了一段时间, SpringDataJdbc整合Mybatis的官方文档:https://docs.spring.io/spr ...