Python 算法.2

如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?

import time
start_time = time.time()
# 注意是三重循环for a in range(0, 1001): for b in range(0, 1001): for c in range(0, 1001): if a**2 + b**2 == c**2 and a+b+c == 1000: print("a, b, c: %d, %d, %d" % (a, b, c))
end_time = time.time()print("elapsed: %f" % (end_time - start_time))print("complete!")

直接三层循环进行暴力算

时间复杂度:

T(n) = O(n*n*n) = O(n3)

import time
start_time = time.time()
# 注意是两重循环for a in range(0, 1001): for b in range(0, 1001-a): c = 1000 - a - b if a**2 + b**2 == c**2: print("a, b, c: %d, %d, %d" % (a, b, c))
end_time = time.time()print("elapsed: %f" % (end_time - start_time))print("complete!")

优化

时间复杂度:

T(n) = O(n*n*(1+1)) = O(n*n) = O(n2)

这里具体的自己去看书,我直接说出结论

常见的时间复杂度

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

详细的工具先不推荐,这里先用自带的time模块去计算:

timeit模块

timeit模块可以用来测试一小段Python代码的执行速度。

class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)

Timer是测量小段代码执行速度的类。

stmt参数是要测试的代码语句(statment);

setup参数是运行代码时需要的设置;

timer参数是一个定时器函数,与平台有关。

timeit.Timer.timeit(number=1000000)

Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。

from timeit import Timer

def test1(): l = [] for i in range(1000): l = l + [i]

def test2(): l = [] for i in range(1000): l.append(i)

def test3(): l = [i for i in range(1000)]

def test4(): l = list(range(1000))

t1 = Timer("test1()", "from __main__ import test1")print("concat ", t1.timeit(number=1000), "seconds")t2 = Timer("test2()", "from __main__ import test2")print("append ", t2.timeit(number=1000), "seconds")t3 = Timer("test3()", "from __main__ import test3")print("comprehension ", t3.timeit(number=1000), "seconds")t4 = Timer("test4()", "from __main__ import test4")print("list range ", t4.timeit(number=1000), "seconds")

这里就完成了一个简单的性能分析

from timeit import Timer

def function(): passT1 = Timer("function()", "from __main__ import function")print("你的打印字符:", T4.timeit(number=1000), "seconds")

这里尝试给出一个测量模块的模板

x = range(2000000)pop_zero = Timer("x.pop(0)","from __main__ import x")print("pop_zero ",pop_zero.timeit(number=1000), "seconds")

x = range(2000000)pop_end = Timer("x.pop()","from __main__ import x")print("pop_end ",pop_end.timeit(number=1000), "seconds")

pop是我们list经常使用的方法之一

我们可以通过例子看到在表头和表尾插入的时间比较

这里给出列表相关方法的时间复杂度

因为除了列表以外,我们的映射数据类型也是常见的所以这里给出dict的相关复杂度

(0)

相关推荐

  • 说说Python中连接字符串用join还是+?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • 第49天:Python 多线程之 threading 模块

    在之前的文章中,我们已经介绍了 Python 通过 _thread 和 threading 模块提供了对多线程的支持,threading 模块兼具了 _thread 模块的现有功能,又扩展了一些新的功 ...

  • python的名词解释

    python的名词解释

  • Python算法有哪些特征?七大特性!

    算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,而编程则是实现算法的关键,那么Python算法有哪些?Python算法应该具备哪些特征呢?小编通过下文为大家介绍一下. Python算法 ...

  • Python算法分为哪几类?常见分类!

    了解过Python的人,应该都听说过Python算法,但对其种类及定义却不是很清楚,那么你知道什么是算法吗?Python算法有哪几类呢?我们通过这篇文章来了解一下. 什么是算法? 算法是指解题方案的准 ...

  • 这可能是史上最全的Python算法集!

    本文是一些机器人算法(特别是自动导航算法)的Python代码合集. 其主要特点有以下三点:选择了在实践中广泛应用的算法:依赖最少:容易阅读,容易理解每个算法的基本思想.希望阅读本文后能对你有所帮助. ...

  • 最全Python算法入门

    本文经AI新媒体量子位(ID:QbitAI)授权转载 问耕 发自 凹非寺 [导读]Github上超过6.8万星标:最全算法及Python实现.该项目的算法包括排序.搜索等经典算法,描述较为详细,对算法 ...

  • 终于有人把Python算法-动态规划讲明白了,建议收藏!(附源码下载)

    多年工作经验,水平优秀的你,是否在面试中曾经陷入过算法的囚徒困境? 搞不清晦涩难懂的算法理论 自学效率低 付出了大量的学习时间,看到复杂多变的算法题,无从下手,一脸懵逼... 无论腾讯.阿里还是字节跳 ...

  • Python算法.1

    我又来了!!!,这个算法的更新力度会保持到一天至少一更,如果当日未更会第二天补更,算法来源于需求,OJ,Github等. 实现一个算法:识别一个字符串中,是否包含唯一的字符. class Unique ...

  • Python算法.4

    Python算法.3 Python 算法.2 Python算法.1 colors=['black','white']sizes=['S','M','L']tshirts=[(color,size) f ...

  • 数据结构与算法-Python语言案例实现

    AI研习图书馆,发现不一样的世界 十大经典排序算法 -- 基于Python案例实现[下] 目录 数据结构与算法-Python语言案例实现 一. 引言 1.问题需求 2.方法分类 二.常见排序方法 1. ...

  • 算法创作|如何使用python画出国际象棋棋盘

    问题描述用文字描述要解决的问题:如何使用python画出国际象棋棋盘示例: 输入: from turtle import*def draw_square(color):begin_fill()#开始填 ...