python算法

【Python实现归并排序】 -- 2019-08-14 17:28:39

南笙酒味 提交于 2019-11-27 08:10:22
原文: http://www.gqylpy.com/106/gqy/347 "首先,归并排序使用了二分法,归根到底的思想还是分而治之。拿到一个长数组,将其不停的分为左边和右边两份,然后以此递归分下去。然后再将它们按照两个有序数组的样子合并起来。这样说起来可能很难理解,所以 图就来了: 归并排序将数组以中间的值进行拆分,最后分到最细之后再将其使用对两个有序数组进行排序的方法对其进行排序。 两个有序数组排序的方法则非常简单,同时对两个数组的第一个位置进行比大小,将小的放入一个空数组,然后将放入空数组的那个位置的指针往后移一个,然后继续和另外一个数组的上一个位置进行比较,以此类推。到最后任何一个数组先出栈完,就将另外一个数组里的所有元素追加到新数组后面。 递归拆分的时间复杂度是logN,进行两个有序数组排序的方法复杂度是N,所以该算法的时间复杂度是N*logN,即NlogN。 Python代码示例: lst = [2, 5, 7, 8, 9, 1, 3, 4, 6] def merge_sort(lst, low, high): # 不断递归调用自己,直至拆分成单个元素的时候返回这个元素,不再拆分 if low < high: # 取拆分的中间位置 mid = (low + high) // 2 merge_sort(lst, low, mid) # 左 merge_sort(lst,

为何Python适合初学者 一般Python要学习多久

删除回忆录丶 提交于 2019-11-27 08:08:29
为何Python适合初学者?一般Python要学习多久?很多人都觉得,Python是一门很好学的语言,非常适合入门。但更多人都是不清楚具体原因的。那么,我们不如一起来看看Python为何更适合初学者,为何更适合学习吧。另外,这门伟大的入门编程语言有什么特征呢? 因为它有着非常棒的首次体验,就像一本书的第一页,首先需要“入迷”,学习新知识不可避免的会遇到挫折,但要有持续的热情和好奇心,这对于那些从未接触过编码的年轻人来说是至关重要的。 Python一般学多久?一般学习需要几个月左右的时间,Python入门简单,并不代表会一直简单。要学会用Python干活,还需要学习Python的各种库,它的强大在于库,原因是Python的库可以用Python,c语言,c++等设计,再提供给Python使用,所以无论gpu运行,神经网络,智能算法,数据分析,图像处理,科学计算,各式各样的库在等着你用。 根据Dehghani的说法,Python在Python3之后,随着时间的推移而逐渐成熟,新的架构方法如微服务和容器,以及人工智能的进步,都使得企业在整个开发生命周期中更多地使用它,而不仅仅是停留在研究阶段。 近几年来,机器学习备受欢迎,而机器学习的首选语言是Python。Python之所以成为广受欢迎的机器学习语言,主要基于以下三个原因: 1、门槛低,上手快; 2、Python是解释语言,写程序很方便;

python常见面试题

随声附和 提交于 2019-11-27 05:42:37
面试问题: 1.python的垃圾回收机制:主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。 2.python中赋值、浅拷贝、深拷贝的特点: 赋值:实际上就是对象的引用 浅拷贝:只拷贝父类对象,不拷贝子类对象,拷贝前后id不变。 深拷贝:完全拷贝父类和子类对象,拷贝后id变了。 3.mysql事务的4个层次:数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(未授权读取、读未提交)、Read committed(授权读取、读提交)、Repeatable read(可重复读取)、Serializable(序列化),这四个级别可以逐个解决脏读、不可重复读、幻象读这几类问题。 算法题: 1.一行代码实现对列表a中的偶数位置的元素进行加3后求和。 li = [2, 4, 3, 2, 9] print(sum([li[x]+3 for x in range(len(li))if x%2!=0])) #思路:长度为基数的元素正好是索引为偶数的元素。 2.实现一个单例模式: class single(object): _instance =

python常见面试题

泪湿孤枕 提交于 2019-11-27 05:42:29
面试问题: 1.python的垃圾回收机制:主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。 2.python中赋值、浅拷贝、深拷贝的特点: 赋值:实际上就是对象的引用 浅拷贝:只拷贝父类对象,不拷贝子类对象,拷贝前后id不变。 深拷贝:完全拷贝父类和子类对象,拷贝后id变了。 3.mysql事务的4个层次:数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(未授权读取、读未提交)、Read committed(授权读取、读提交)、Repeatable read(可重复读取)、Serializable(序列化),这四个级别可以逐个解决脏读、不可重复读、幻象读这几类问题。 算法题: 1.一行代码实现对列表a中的偶数位置的元素进行加3后求和。 li = [2, 4, 3, 2, 9] print(sum([li[x]+3 for x in range(len(li))if x%2!=0])) #思路:长度为基数的元素正好是索引为偶数的元素。 2.实现一个单例模式: class single(object): _instance =

数据结构与算法:Python实现单向链表与单向循环链表

旧时模样 提交于 2019-11-27 05:33:40
题目 单向链表 单向循环链表 单向链表 # encoding=utf-8 """ Date:2019-07-06 16:11 User:LiYu Email:liyu_5498@163.com """ class Node ( object ) : def __init__ ( self , element ) : self . element = element self . next = None class SingleLink ( object ) : def __init__ ( self ) : self . head = None def is_empty ( self ) : """判断链表是否为空""" return self . head is None def __len__ ( self ) : if self . is_empty ( ) : return 0 else : cur = self . head lenght = 0 while cur . next is not None : cur = cur . next lenght += 1 return lenght + 1 def trvel ( self ) : """遍历链表元素""" if not self . is_empty ( ) : cur = self . head while

十大排序算法练习(Python)

泪湿孤枕 提交于 2019-11-27 04:48:27
本博客同时发布于个人主页: www.doctorsrn.cn 十大排序算法练习 使用Python实现常用的十大排序算法: 1.插入排序insert sort 2.希尔排序shell sort 3.简单选择排序select sort 4.冒泡排序bubble sort 5.快速排序quick sort 6.堆排序HeapSort 7.归并排序mergesort 8.计数排序countingSort 9.桶排序bucketSort 10.基数排序radixSort 参考实现: http://www.cnblogs.com/kadycui/p/9771695.html 微信分享 博客中代码对应的仓库– sort_algorithm.ipynb ,以及用于排序程序测试的代码– sort.py . 1.插入排序 将后续元素一个一个插入到前面已经排好序的有序序列中。 算法复杂度 O ( n 2 ) O(n^2) O ( n 2 ) def insertSort ( arr ) : length = len ( arr ) for i in range ( length ) : k = i for j in range ( k , 0 , - 1 ) : if arr [ j ] < arr [ j - 1 ] : # 控制大小端 arr [ j ] , arr [ j - 1 ] = arr

python super用法

纵饮孤独 提交于 2019-11-27 04:06:51
super()用法 功能 super功能:super函数是子类用于调用父类(超类)的一个方法。 用法 1.在子类 __init__() 方法中正确的初始化父类,保证相同的基类只初始化一次。2.覆盖特殊方法。 3.解决多重继承中,子类重复调用父类方法的问题。 注意 super()继承只能用于新式类,用于经典类时就会报错。 新式类:必须有继承的类,如果无继承的,则继承object 经典类:没有父类,如果此时调用super就会出现错误:『super() argument 1 must be type, not classobj) 在子类__init__()方法中正确初始化父类,保证相同的基类只初始化一次 # 假如说在父类中实现了一个方法,你想在子类中使用父类的这个方法并且做一定扩展但是又不想完全重写,并且这个场景中的继承属于多继承,那么super()就出场了,可以实现方法的增量修改。 # A(父类)有x属性,B(子类)想添加y属性: class A(object): def __init__(self,x): self.x = x class B(A): def __init__(self,x,y): super(B,self,).__init__(x) self.y = y a = A(2) b = B(2,4) print(a.x) print(b.x,b.y)

高效利用Python内置的数据结构!

蓝咒 提交于 2019-11-27 02:56:30
0x00:创建一键多值字典 字典是Python中的一种可变容器,通常以这种形式出现: d = {key1:value1, key2:value2, key3:value3} Python没有规定字典中值的类型,所以如果想让字典中的一个键对应多个值,只要把这些值放到列表这样的容器里就行了。 Python资源共享群:484031800 student = { 'a': [76, 54, 82], 'b': [92, 67, 88] } 为了方便创建这样的字典,可以使用 collections 模块中的 defaultdict 类。一般在访问一个字典中不存在的key时会报错,defaultdict类则会自动初始化一个默认值。使用defaultdict可以这样创建一个值为列表的字典: d = defaultdict(list) d['a'].append(1) d['a'].append(2) d['a'].append(3) 0x01:有序字典 Python中字典的key是不记录顺序的,如果我们想在对字典进行迭代或者序列化操作时掌握元素的顺序,可以使用 collections 模块中的 OrderedDict 类。 >>> from collections import OrderedDict >>> d = OrderedDict() >>> d['a'] = 1 >>> d['b']

Python常用算法

梦想与她 提交于 2019-11-27 02:54:21
本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 一个算法应该具有以下七个重要的特征: ①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止; ②确切性(Definiteness):算法的每一步骤必须有确切的定义; ③输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输 入是指算法本身定出了初始条件; ④输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没 有输出的算法是毫无意义的; ⑤可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行 的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性); ⑥高效性(High efficiency):执行速度快,占用资源少; ⑦健壮性(Robustness):对数据响应正确。 2. 时间复杂度 计算机科学中

python基础之面试常问

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