python算法

python算法攻坚

不想你离开。 提交于 2019-12-23 04:06:23
文章目录 递归 什么是递归呢? 递归实现斐波拉契数列 递归 递归在我们编写算法中非常常见,很多算法都是通过递归来实现,递归虽然使用简单,但是想了解其内部流程没有那么简单的。 什么是递归呢? 递归重在搞明白内在的过程,不能之前然而不知其所以然 比如二叉树的深度优先遍历,斐波那契额数列,这些写起来很简单,但是像是回溯就比较难了,如果对递归的本质理解不透彻的话,就写不出正确的算法来 递归最常见的定义: 函数内部调用函数本身。那么这个函数就是递归函数,其本质还是一个循环 递归分为两个过程 :一个是‘递’,一个是‘归’,这些都是自动化完成的 递归一定要设置终止条件 :递归一定要终止,怎么写终止条件很重要 递归实现斐波拉契数列 斐波拉契数列又称黄金分割数列,也叫兔子数列 指的是这样的一个数量,1,2,3,5,8,13,21,34,…后边的数等于前边的数之和,我们要解决的是100个数是多少 #1.什么地方调用递归本身 #2.什么时候终止递归 #1 1 2 3 5 8 13 21 import time total = {} def fib_test(k): """ #求解第k个数的值 :param k: 求解第几个数 :return: """ assert k > 0, '\nk必须大于0' if k in [1,2]: #终止递归 return 1 global total if k not

Python实现基本排序

爱⌒轻易说出口 提交于 2019-12-23 01:49:39
排序是比较常用的算法,其实有很多种实现,比如冒泡排序,选择排序,归并排序,希尔排序,快速排序等,今天介绍使用python语言实现这几种排序算法。 冒泡排序 冒泡排序是最常见到的排序算法,也是大学学习时遇到的第一种排序算法,它的实现思想是:相邻的两个元素进行比较,然后把较大的元素放到后面(正向排序),在一轮比较完后最大的元素就放在了最后一个位置,因为这一点像鱼儿在水中吐的气泡在上升的过程中不断变大,所以得名冒泡排序。在该排序算法中,要遍历n-1轮,每一轮都要比较数组中的元素,所以时间复杂度是O(n2)。 在比较的过程中相同的元素并不会发生交换,所以冒泡排序是一种稳定的排序算法。 接下来看一个冒泡排序的图片 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019122215314471.gif 具体代码实现 def bubble_sort ( alist ) : length = len ( alist ) for i in range ( length - 1 ) : # i表示比较多少轮 for j in range ( length - i - 1 ) : # j表示每轮比较的元素的范围,因为每比较一轮就会排序好一个元素的位置, # 所以在下一轮比较的时候就少比较了一个元素,所以要减去i if alist [ j ] > alist [ j +

Python的学习

你说的曾经没有我的故事 提交于 2019-12-22 02:49:50
python 学习 day1 python的学习优势:面向过程,函数式编程,易学习 1.python中变量的创建以及命名的规则 1.包含字母、数字或下划线 2.只能以字母或下划线开头 3.不可有空格 4.尽量简短叙述 5.避免简单叙述 2.python的概念层级 ①语句 ②表达式(创建,处理对象) ③模块 ④程序(由算法与数据组成) 3.python中核心数据类型 数字(int,float,decimal,fraction),字符串str,列表list,字典表dict,文件file,集合set,布尔boolean,空none,程序单元(函数function,类class) 4.python的运行方式 ①.交互式(idle;Windows-运行-pyton) ②.脚本式(编写脚本代码,保存为xx.py;命令提示符xx.py) 5.python中的共享引用 多个变量引用一个变量 ①判断字面值是否相等“==” ②判断是否地址相同“is” 6.保存python输出内容 ①选中-编辑-复制 ②运行后>保存位置\result.txt 来源: CSDN 作者: wang2019mm 链接: https://blog.csdn.net/wang2019mm/article/details/103643255

Python 19 算法

浪子不回头ぞ 提交于 2019-12-21 20:16:59
一、基本概念 时间复杂度:是用来估计算法运行时间的单位,一般来说时间复杂度高的算法运行速度慢。常见的时间复杂度排序: 1<logn<n<nlogn<n**2<n**2logn<n**3 空间复杂度:用来评估算法所占内存大小 递归的两个特点:调用自身、结束条件 二、二分查找 方式一:非递归 1 #方式一:非递归 2 def half_search1(li, val): 3 start = 0 4 end = len(li) - 1 5 while start <= end: 6 half = (start + end) // 2 7 if li[half] > val: 8 end = half - 1 9 elif li[half] < val: 10 start = half + 1 11 else: 12 return half 13 return 方式二:递归 #方式二:递归 def half_search2(li, val, start, end): if start <= end: half = (start + end) // 2 if li[half] > val: end = half - 1 return half_search2(li, val, start, end) elif li[half] < val: start = half + 1 return

Python 线程 进程和协程

孤人 提交于 2019-12-21 03:42:36
python线程 线程的创建 多线程类似于同时执行多个不同程序,多线程有以下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理 程序的运行速度可能加快 在一些IO密集型操作中,线程就比较有用。可以释放上些内存占用 python3中使用Threading模块提供线程相关的操作。 #!/usr/bin/env python3 import threading import time class Mythread(threading.Thread): def __init__(self, func, arg): threading.Thread.__init__(self) self.func = func self.arg = arg def run(self): self.func(self.arg) def f1(x): time.sleep(1) print(x) if __name__ == '__main__': for i in range(10): t = Mythread(f1, i) t.start() 上面的代码创建了十个线程,然后提交给CPU,让CPU根据指定算法去调度执行。 getName 获取线程名 setNmae 设置线程名 setDaemon 设置线程为前台还是后台,如果线程是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后

Python学习一:Python简介

徘徊边缘 提交于 2019-12-21 02:43:45
  Python简介 :   Python是目前广泛使用的一门动态语言,类似Java,源代码必须首先由编译器转换成字节码(byte code),然后再由解释器来执行字节码。与Java不同的是,Python的编译器和解释器都是一个程序。因此,源代码也可以直接交给这个编译器/解释器来执行。   使用Python编写程序,你不需要预先声明好变量的类型,因为Python中变量的类型是动态确定的,即动态绑定。    Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。 Python语言的特点: 第一,纯面向对象的语言。与传统的面向对象语言(C++, Java)不同的是,在Python的世界里,万物皆为对象。模块,类,函数,变量,类的实例都属于Python中的对象,例如函数是一个对象,它有自己的代码块,注释文档以及变量字典。 第二,支持面向过程和面向对象的编程范式。Python不强制你使用类的概念组织软件,你可以以面向过程的思想编写你的软件。这个类似于C++,完全可以不用C++面向对象的特性编写软件,退化为C语言了。 第三,非常丰富的标准库支持。Python提供了一套功能完善的内置库支持

python基础之面试常问

半世苍凉 提交于 2019-12-21 01:50:29
目录 python相对其他语言有什么特点? python内存管理机制,gc机制的了解,gc回收三种算法。 lambda函数 高级函数 map、reduce、filter、sorted等。 简述六种基本数据类型(number、string、list、tuple、dict、set)。 python中深拷贝与浅拷贝。 python中is和==的区别。 python中if __ name ==' main __'有什么含义? python命令和python -m命令在执行脚本时的区别? python中多进程、多线程、协程。 python中迭代器、生成器。 python中装饰器。 python中单引号、双引号、三引号的应用场景与区别。 python如何体现面对对象的三大特性。 python中异常管理的机制。 python函数闭包。 参考: python面试常问 python相对其他语言有什么特点? python内存管理机制,gc机制的了解,gc回收三种算法。 python内存管理( 原博文——python内存管理 ) python是动态语言,对象与引用分类,一个变量使用不需要事先声明,而在赋值时,变量可以重新赋值为任意值。 python中,整数和短小的字符,Python都会缓存这些对象,以便重复使用。当我们创建多个等于1的引用时,实际上是让所有这些引用指向同一个对象。

python算法

南楼画角 提交于 2019-12-20 23:46:22
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括 关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序。 O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序。 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。 关于稳定性: 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。 名词解释: n:数据规模 k:“桶”的个数 In-place:占用常数内存,不占用额外内存 Out-place:占用额外内存 稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

Python的介绍

梦想的初衷 提交于 2019-12-20 23:36:41
Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。 简单 Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。 易学 就如同你即将看到的一样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。 免费、开源 Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。 高层语言 当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 可移植性 由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性

Python学习笔记:4.1.2 链表(单、双)

大兔子大兔子 提交于 2019-12-20 20:52:05
本文是学习陆老师的 《python全栈工程师 - 数据结构与算法》 课程的笔记,欢迎学习交流。同时感谢陆老师的精彩传授! 文末附有本节课单链表操作全部代码 一、课程目标 链表数据的结构 链表结构的python实现 链表的操作时间复杂度 二、详情解读 01.链表结构: 链表就好像链条一样,一节就是一个数据节点。 链表特点: 1、每一个数据节点包括数据本身以及前后节点位置(单链表只包含下一节点位置) 2、链表不需要连续内存空间 3、插入快,查询慢 02、链表的python实现 单链表节点类 class Node : def __init__ ( self , data , next = None ) : self . data = data self . next = next 节点创建 node1 = Node ( 1 ) node2 = Node ( 2 ) node3 = Node ( 3 ) node1 . next = node2 node2 . next = node3 print ( node2 . data ) # 2 print ( node1 . next . data ) # 2 print ( node1 . next . next . data ) # 3 print ( node2 . data ) # 3 单链链表数据结构 class Node : def