python数据结构算法优势_Python数据结构与算法(一)----- 算法效率

一.引入

先来看一道题:

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

(1) 枚举法

import time

start_time = time.time()

for a in range(0,1001):

for b in range(0,1001):

for c in range(1,1001):

if a+b+c==1000 and a**2+b**2 == c**2:

print('a,b,c:%d,%d,%d'%(a,b,c))

end_time = time.time()

print('time:%d'%(end_time-start_time))

print('finished')

##基本步骤数量T = 1000*1000*1000*2

改进代码

import time

start_time = time.time()

for a in range(0,1001):

for b in range(0,1001):

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('time:%d'%(end_time-start_time))

print('finished')

##基本步骤数量T(n)=n*n*(1+max(1,0))=n^2

算法的概念:是独立存在的一种解决问题的方法和思想

算法的五大特征:

(1)输入:算法具有0个或多个输入

(2)输出:至少有一个或多个输出

(3)有穷性:在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内执行

(4)确切性:每一步有确切的含义

(5)可行性:每一步是可行的

二 . 算法效率

时间复杂度和“大O计法”

时间复杂度:T(n) = n^3 * 2

大O计法:不用分析很精确 T(n) = n^3

最坏时间复杂度:

[1,2,4,8,6,5,3,1]排序 n^2

[1,2,3,4,5] for i in ls: n

(1) 最优时间复杂度:价值不大,没有提供什么有用信息

(2)最坏时间复杂度:提供了一种保证

(3)平均时间复杂度:是对算法的一个全面评价,没有提供保证

因此,主要关注最坏时间复杂度,然后最优时间敷在读

2. 时间复杂度的几条基本计算规则:

(1) 基本操作,即只有常数项

(2)顺序结构,按照加法进行计算

(3)循环结构,按照乘法进行计算

(4)分支结构,时间复杂度取最大值

(5)判断一个算法的效率时,往往只需要关注操作量的最高项次,其他次要项和常数项可以忽略

(6)在没有特殊说明时,我们通常分析最坏时间复杂度

3. 常见时间复杂度:

(1)12 O(1) 常数阶

(2) 2n+1 O(n) 线性阶

(3)3n^2 O(n2) 平方阶

(4)5logn. O(long) 对数阶

(5)2n+3nlogn+19 O(n*logn) nlogn阶

(6) 6n3+2n2+3n+4 O(n3) 立方阶

(7)2n O(2n) 指数阶

关系:

O(1)

三. Python内置类型性能分析

1. timeit模块

可以用来测试一小段代码的运行速度

class time.Timer(stmt=‘pass’,setup=‘pass’,time=)

time.Timer.timeit(n=1000000)

number参数时测试代码时的测试次数

测算list

from timeit import Timer

#li1 = [1,2]

#li2 = [23,5]

#li = li1 +li2

#li = [i for i in range(10000)]

#li = list[range(10000)]

def test1():

li = []

for i in range(10000):

li.append(i)

def test2():

li = []

for i in range(10000):

li += [i]

def test3():

li = [i for i in range(10000)]

def test4():

li = list(range(10000))

def test5():

li = []

for i in range(10000):

li.extend([i])

timer1 = Timer('test1()','from __main__ import test1')

print('append:',timer1.timeit(1000))

timer2 = Timer('test2()','from __main__ import test2')

print('+:',timer2.timeit(1000))

timer3 = Timer('test3()','from __main__ import test3')

print('[i from i in range]:',timer3.timeit(1000))

timer4 = Timer('test4()','from __main__ import test4')

print('list(range()):',timer4.timeit(1000))

timer5 = Timer('test5()','from __main__ import test5')

print('list(range()):',timer5.timeit(1000))

##最快的是timer5

def test6():

li = []

for i in range(10000):

li.append(i) ##从列表尾添加

def test7():

li = []

for i in range(10000):

li.insert(0,i) ##从列表头添加

timer6 = Timer('test6()','from __main__ import test6')

print('append:',timer6.timeit(1000))

timer7 = Timer('test7()','from __main__ import test5')

print('list(extend:',timer7.timeit(1000))

##对头添加比对尾添加慢

list 内置时间复杂度

dict内置时间复杂度

四. 数据结构

数据是一个抽象的概念,将其分类后得到程序设计语言中的基本类型。

数据元素之间不是独立的,存在特点的关系,这些关系便是数据结构。

程序=算法+数据结构

算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体。

抽象数据类型:指一个数学模型以及定义在此数学模型上的一组操作。即把数据类型和数据类型上的运算捆在一起,进行封装。

常用的数据运算有五种:插入,删除,修改,查找和排序

原文链接:https://blog.csdn.net/mangogogo321/article/details/106678151

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java编程字符逆序输出_用JAVA编写一程序:从键盘输入多个字符串到程序中,并将它们按逆序输出在屏幕上。...

展开全部代码如下:import java.util.Scanner;public class ScannerDemo{public static void main(String[] args) throws Exception{Scanner scannew Scanner(System.in);System.out.println("请输入内容:");String strscan.nextLine();char[]…

glassfish 4配置_自己构建GlassFish 4.0快照

glassfish 4配置这篇文章是关于自己发布GlassFish 4.0快照的,其中包括一些黑客。 我找到了GlassFish FullBuild的官方说明,然后决定自己构建服务器。 有时,您可能不想等待团队升级GlassFish构建文件。 在本条目中,我将Artifactory…

julia与python对比_有人说Julia比Python好,还给出了5个理由

选自medium作者:Emmett Boudreau机器之心编译参与:杜伟、张倩、肖清本文作者从速度、通用性、多重派发、适用于 ML 的程度和包管理器 5 个方面阐述了 Julia 语言相较于 Python 的优势所在。Julia 是一种多范式的函数式编程语言,用于机器学习和…

使用Flowable.generate()生成可感知背压的流– RxJava常见问题解答

RxJava缺少创建无限自然数流的工厂。 这样的流很有用&#xff0c;例如&#xff0c;当您想通过压缩两个事件的唯一序列号给可能的无限事件流时&#xff1a; Flowable<Long> naturalNumbers //???Flowable<Event> someInfiniteEventStream //... Flowable<P…

java字符串构造函数的应用_StringTokenizer类的使用

StringTokenizer是一个用来分隔String的应用类&#xff0c;相当于VB的split函数。1.构造函数public StringTokenizer(String str)public StringTokenizer(String str, String delim)public StringTokenizer(String str, String delim, boolean returnDelims)第一个参数就是要分…

linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素

题目描述给定一个编码链表和一个加密条件K&#xff0c;对编码进行加密。加密规则&#xff1a;把编码从前往后开始数第K个元素和从后往前数第K个元素进行交换。注意&#xff1a;编码的长度为0.第一个编码的序号是1.示例&#xff1a;输入&#xff1a;[1 2 3 4 5 6] 2输出&#xf…

maven java 参数_将Maven参数注入Java类

我想将settings.xml配置文件参数注入Java类.我尝试使用maven-annotation-plugin,但值为null.我想知道这是不是因为这个插件是为Mojo设计的Setting.xml片段APP_NAMEUSER_EMAILUSER_PASSWORD在班上Parameter(defaultValue "test.email", readonly true)private Strin…

Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI

作为微服务开发的一部分&#xff0c;我们许多人都将Spring Boot与Spring Cloud功能一起使用。 在微服务领域&#xff0c;我们将有许多Spring Boot应用程序将在相同/不同的主机上运行。 如果将Spring Actuator添加到Spring Boot应用程序中&#xff0c;我们将获得很多现成的端点来…

md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?

算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发。软件开发工作不是按部就班,而是选择一种最合理的算法去实现项目功能。算法能够引导开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程工作只需要遭循这个思路去实现即可。本章将详细讲解计算机算法的基…

java json 解析null_解析包含null的原始json数组

Json数组遇新是直朋能到&#xff1a;{"userName":null," msgArr":[null],"numrow":0} //String resultGson&#xff1a;new Gson().fromJson(result, MyClass.class);MyCl作一新求抖直微圈ass:public String userName;public int[] msgArr;...错…

python运维脚本部署jdk_基于Java/Python搭建Web UI自动化环境

Java搭建UI自动化测试环境下载JDK8https://www.cnblogs.com/thloveyl/p/12378124.html配置Java环境1.解压Jdk压缩包2.配置环境变量计算机->属性->高级->环境变量->系统变量->Path3.添加根目录下的bin与lib目录、jre下的bin目录(近期我发现只将bin目录加入Path就…

eclipse JAVA用户注册_如何eclipse编写一个简单实用的登陆界面

花了点时间写了一个简单的页面&#xff1a;package test;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class UserInterface extends JFrame implements WindowListener{JFrame jf;JPanel jpan1,jpan2,jpan3;JLabel username,password,lspace;JText…

java内存泄漏案例_寻找内存泄漏:一个案例研究

java内存泄漏案例一周前&#xff0c;我被要求修复一个有内存泄漏问题的webapp。 考虑到过去两年左右的时间里我已经看到并修复了数百个泄漏&#xff0c;我想这有多难。 但是事实证明这是一个挑战。 12小时后&#xff0c;我发现该应用程序中不少于5个漏洞&#xff0c;并设法修复…

doc无法编译java文件_java编译成jar文件.doc

java编译成jar文件Java程序打包成jar包(2012-06-08 10:28:23)转载▼标签&#xff1a;分类&#xff1a; 方法一&#xff1a;通过jar命令jar命令的用法&#xff1a;下面是jar命令的帮助说明&#xff1a;用法&#xff1a;jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-p…

python 档案管理系统_Python 写入档案的 4 个方法

在 Python 写入档案内容跟读取档案差不多, 也很简单方便&#xff0c;以下会介绍用 Python 逐行读取档案内容的 4 种方法。在看例子前先要了解开启档案的参数, 一般上读取档案会用 “r”, 即唯读的意思, 如果要写入档案, 分别可以用 “w” (即 write 的意思) 或 “a” (即 appen…

高可用性(HA),会话复制,多VM Payara群集

抽象 在研究如何创建高可用性&#xff08;HA&#xff09;时&#xff0c;我发现了会话复制的多机Payara / GlassFish群集&#xff0c;无法在一个参考中找到所需的一切。 我认为这将是一个普遍的需求并且很容易找到。 不幸的是&#xff0c;我的假设是错误的。 因此&#xff0c;本…

java时间日期工具类_java日期处理工具类

java日期处理工具类import java.text.DecimalFormat;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.Random;import java…

python运行结果闪退_Pyhton TestCase运行闪退与失败,原因不详。。。

把源码贴上来&#xff0c;希望某位大神可以指点迷津&#xff1a;"""Unit test for odbchelper.pyThis program is part of "Dive Into Python", a free Python book forexperienced programmers. Visit http://diveintopython.org/ for thelatest ver…

java.jsp.jdbc_Java-jsp使用JDBC访问数据库时显示乱码是怎么回事?

1.JSP页面编码你改成utf-8;2.servlet容器的编码格式你改成utf-8;以tomcat为例&#xff1a;找到你的安装目录tomcat下面 > conf > server.xml用记事本打开添加如下的代码&#xff1a;URIEncoding"utf-8"protocol"HTTP/1.1"port"8080"connec…

python实例讲解wxpythonhyh123_Python实例讲解 -- wxpython 基本的控件 (按钮)

使用按钮工作在wxPython 中有很多不同类型的按钮。这一节&#xff0c;我们将讨论文本按钮、位图按钮、开关按钮(toggle buttons )和通用(generic )按钮。如何生成一个按钮&#xff1f;在第一部分(part 1)中&#xff0c;我们已经说明了几个按钮的例子&#xff0c;所以这里我们只…