python算法

时间复杂度Big O以及Python 内置函数的时间复杂度

痴心易碎 提交于 2020-01-22 19:36:00
声明:本文部分内容摘自 原文 本文翻译自Python Wiki 本文基于GPL v2协议,转载请保留此协议。 本页面涵盖了Python中若干方法的时间复杂度(或者叫“大欧”,“Big O”)。该时间复杂度的计算基于当前(译注:至少是2011年之前)的CPython实现。其他Python的实现(包括老版本或者尚在开发的CPython实现)可能会在性能表现上有些许小小的差异,但一般不超过一个O(log n)项。 本文中,’n’代表容器中元素的数量,’k’代表参数的值,或者参数的数量。 1. 列表(list) 以完全随机的列表考虑平均情况。 列表是以数组(Array)实现的。最大的开销发生在超过当前分配大小的增长,这种情况下所有元素都需要移动;或者是在起始位置附近插入或者删除元素,这种情况下所有在该位置后面的元素都需要移动。如果你需要在一个队列的两端进行增删的操作,应当使用collections.deque(双向队列) 操作 平均情况 最坏情况 复制 O(n) O(n) append[注1] O(1) O(1) 插入 O(n) O(n) 取元素 O(1) O(1) 更改元素 O(1) O(1) 删除元素 O(n) O(n) 遍历 O(n) O(n) 取切片 O(k) O(k) 删除切片 O(n) O(n) 更改切片 O(k+n) O(k+n) extend[注1] O(k) O(k)

Python语言学习前提:基础语法

ⅰ亾dé卋堺 提交于 2020-01-22 17:37:45
一、变量 1.变量:存储数据。存储数据需要对应内存空间,基于变量的数据类型,解释器会分配指定内存,决定什么数据被存储到内存中。 变量数据类型:整数、小数、字符。 2.变量赋值:变量在使用前必须赋值,赋值的变量才被创建。 #!/usr/bin/env python student = 8000 #整数型 miles = 150.0 #浮点型 name = "crystal" #字符串 print student print miles print name 3.多个变量赋值 1)创建变量,值为1,三个变量被分配在相同的内存空间上。 a = b = c = 1 2)多个对象指定多个变量 a, b, c = 100, 150.0, "crytsal" 二、标准数据类型 1.python有五个标准数据类型:Numbers(数字)、string(字符串)、List(列表)、Tuple(元组)、Dictionary(字典) 2.Numbers(数字):int(有符号整型)、long(长整形【也可代表八进制和十六进制】)、float(浮点型)、complex(复数) 1)int var1 = 11 var2 = 12 2)long var3 = 51924361L 3)float var4 = 5.20 4)complex var5 = 3.14j 3. string(字符串):由数字、字母

【python】二分查找_排序

女生的网名这么多〃 提交于 2020-01-22 05:22:36
https://blog.csdn.net/alicelmx/article/details/80429229 # 实现一个二分查找 # 输入:一个顺序list # 输出: 待查找的元素的位置 def binarySearch ( alist , item ) : first = 0 last = len ( alist ) - 1 while first <= last : # " // "表示整数除法 mid = ( first + last ) // 2 print ( '中间值\n' , + mid ) # print( mid) if alist [ mid ] > item : last = mid - 1 elif alist [ mid ] < item : first = mid + 1 else : return mid + 1 return - 1 test = [ 0 , 1 , 2 , 8 , 13 , 17 , 19 , 32 , 42 ] print ( binarySearch ( test , 3 ) ) 排序算法 冒泡排序 https://www.cnblogs.com/jeffrey-yang/p/9866698.html 大的往后面排 下面来用Python代码来简单的实现冒泡排序算法。思路很简单,第一层循环表示总共需要进行几层遍历

python进程

旧城冷巷雨未停 提交于 2020-01-21 20:59:54
1.什么是进程 进程:正在进行的过程或者一个任务,是系统进行资源调度和分配的基本单元。进程是操作系统中最基本、最重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个抽象的概念,所有多道程序设计操作系统都建立在进程的基础上。 进程与程序的区别: 程序仅仅是一堆代码,而进程表示程序的运行过程。同一个程序被运行多次表示开启了多个进程。 2.进程的并行与并发 并行:指多个进程同时执行,即在同一时间段上有多个进程在运行,实现并行前提是计算机为多核。 并发:属于为并行,是在单核的条件下实现并发,多个进程交替运行。 3.同步异步阻塞非阻塞 同步:一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。 异步:不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列。 在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入:就绪、运行和阻塞三个阶段 就绪:当进程已经分配到除CPU外的所有必要资源,子要获得处理机就可以立即执行。 执行/运行:程序获得处理机,其程序正在运行。 阻塞

1.Java和Python的选择

别说谁变了你拦得住时间么 提交于 2020-01-21 15:12:57
我认为高级语言分为Java/c系列和其他。 Java:1995年,让程序员设计一些大型分布式复杂应用。 Python:1991年,面向系统管理、科研教育、等非程序员群体用的多。 C系列语言:奠定了现在语言的基础,管理底层的的东西。它主要体现在两个方面,内存管理和指针,管理内存该如何释放。但相对比较麻烦,写一个构造函数还要写一个析构函数。当然它更高效一点,因为它有一些汇编的特性,贴近底层。   一方面Python上手确实容易一些,但仅此而已。去解决一些复杂性的问题,就没人会考虑用哪种语言上,而是去解决这个问题的具体的算法思路上。Python 是容易,只要调用一些编写好的代码接口,把别人的类库拿来使用。而Java相对来说原生态一点,那c++也就更原生态了。而封装过程才是编程中最重要的部分,如果这一部分你都不愿意参与学习,也就不知道这个东西的实现原理,怎么可能成为一个优秀的程序员。当然汇编,二进制不用说了,如果你只是想玩玩而已,看工作需求,通吃最好,全栈才是最棒的。   整个编程语言发展其实就是山寨与创新。 来源: https://www.cnblogs.com/duanfu/p/12221678.html

python之算法

安稳与你 提交于 2020-01-20 22:28:37
1.什么叫算法 算法:可以理解为是解决问题方法的一个计算过程。 2.时间复杂度 用来评估算法运行效率的一个东西。时间复杂度常用 大O符号 表述,如O(1)。 n = 10 print('Hello World') # 时间复杂度:O(1) ---------------------------------------------------------------- for i in range(n): print('Hello World') # 时间复杂度:O(n) ---------------------------------------------------------------- for i in range(n): for j in range(n): print('Hello World') # 时间复杂度:O(n^2) ---------------------------------------------------------------- for i in range(n): print('Hello World') for j in range(n): print('Hello World') # 时间复杂度:O(n^2) ---------------------------------------------------------------

Python基础小结

寵の児 提交于 2020-01-20 20:21:02
目录 计算机基础之编程 什么是编程语言 什么是编程 为什么要编程 计算机五大组成 CPU 控制器 运算器 内存 外存 输入设备 输出设备 IO设备 应用程序的启动流程 32位和64位 多核CPU 机械硬盘工作原理 固态硬盘(了解) 计算机操作系统 什么是文件 什么是应用程序 操作系统有什么用 计算机的三大组成 操作系统的启动 编程语言分类 机器语言 汇编语言 高级语言 解释型语言(同声传译) 编译型语言(谷歌翻译) 网络的瓶颈效应 一、执行Python程序的两种方式 1.1 交互式 1.2 命令行式 二、执行Python程序的两种IDE 2.1 Pycharm 2.2 Jupyter 三、变量 3.1 什么是变量? 3.2 变量的组成? 3.3 变量名的定义规范 3.4 定义变量的两种方式 3.5 常量 四、注释 4.1 单行注释 4.2 多行注释 4.3 引用计数 4.4 垃圾回收机制 4.5 小整数池 五、花式赋值 5.1 链式赋值 5.2 交叉赋值 六、与用户交互 七、input 八、格式化输出 8.1 占位符 8.2 format格式化 8.3 f-string格式化 九、基本运算符 9.1 算术运算符 9.2 逻辑运算符 9.3 比较运算符 9.4 赋值运算符 9.5 身份运算符 9.6 运算符优先级(略) 9.7成员运算符 9.7 解压缩 一十、流程控制 10.1

算法笔试题:(Python实现)------ 初级算法

丶灬走出姿态 提交于 2020-01-20 00:10:41
算法笔试题:(Python实现)------ 初级算法 初级算法 数组 Python实现 从排序数组中删除重复项 买卖股票的最佳时机 II 旋转数组 存在重复 只出现一次的数字 两个数组的交集 II 加一 移动零 两数之和 有效的数独 旋转图像 字符串 Python实现 反转字符转 整数反转 字符串中的第一个唯一字符 有效的字母异位词 验证回文字符串 字符串转换整数 (atoi) 实现 strStr() 最长公共前缀 外观数列 链表 删除链表中的节点 删除链表的倒数第N个节点 反转链表 合并两个有序链表 回文链表 环形链表 树 Python实现 二叉树的最大深度 验证二叉搜索树 对称二叉树 二叉树的层次遍历 将有序数组转换为二叉搜索树 排序和搜索 Python实现 合并两个有序数组 第一个错误的版本 动态规划 Python实现 爬楼梯 买卖股票的最佳时机 最大子序和 打家劫舍 设计问题 Python实现 Shuffle an Array 最小栈 数学 Python实现 Fizz Buzz 计数质数 3的幂 罗马数字转整数 其他 Python实现 位1的个数 汉明距离 颠倒二进制位 缺失数字 有效括号 初级算法 数组 Python实现 从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间

Python_矩阵转置

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-19 22:27:56
矩阵转置:行变列,列变行 算法:列元素放到新列表的行 list01 = [ [ 1 , 2 , 3 , 4 ] , [ 5 , 6 , 7 , 8 ] , [ 9 , 10 , 11 , 12 ] ] # 转置 list02 = [ ] for c in range ( len ( list01 [ 0 ] ) ) : line = [ ] for r in range ( len ( list01 ) ) : line . append ( list01 [ r ] [ c ] ) list02 . append ( line ) # 打印成表格 for line in list02 : for item in line : print ( item , end = "\t" ) print ( ) 运行结果 1 5 9 2 6 10 3 7 11 4 8 12 来源: CSDN 作者: Rookie_Max 链接: https://blog.csdn.net/Rookie_Max/article/details/104044832

python2与python3的区别

左心房为你撑大大i 提交于 2020-01-19 02:22:22
1.print 在Python 2里, print 是一个语句。无论你想输出什么,只要将它们放在 print 关键字后边就可以。在Python 3里, print() 是一个函数。就像其他的函数一样, print() 需要你将想要输出的东西作为参数传给它。 样例: # python2 print 1, 2 + 3 # python3 print(1, 2 + 3) 2.range 与 xrange Python 2中有 range 和 xrange 两个方法。其区别在于,range返回一个list,在被调用的时候即返回整个序列; xrange返回一个迭代器iterator,在每次循环中生成序列的下一个数字。Python 3中不再支持 xrange 方法,Python 3中的 range 方法就相当于 Python 2中的 xrange 方法。 样例: # python2 print range(6) # [0, 1, 2, 3, 4, 5] # python3 print(range(6)) #range(0, 6) # python2的range(6)返回的是列表,python3返回的是迭代器类型(可以用list进行强转列表) 3.运算符 ①python2的 <> 相当于 != ,python3去除了 <> ,全部改用 != ②python2的 / 是整除,python3的 /