python算法

Python常见的几种算法

人盡茶涼 提交于 2020-03-21 10:48:59
冒泡排序 冒泡排序 (英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 冒泡排序的分析 交换过程图示(第一次): 那么我们需要进行n-1次冒泡过程,每次对应的比较次数如下图所示: def bubble_sort(alist): for j in range(len(alist)-1,0,-1): # j表示每次遍历需要比较的次数,是逐渐减小的 for i in range(j): if alist[i] > alist[i+1]: alist[i], alist[i+1] = alist[i+1], alist[i] li = [54,26,93,17,77,31,44,55,20] bubble_sort(li) print(li) 时间复杂度

python机器学习之KNN算法

跟風遠走 提交于 2020-03-20 23:30:22
K邻近算法(kNeighbrClassifier/KNN):原理为 欧几里得距离+最近+投票(权重)+概率    根据距离的远近进行分类   欧几里得距离:多维空间中各点之间的距离       缺点: 时间复杂度和空间 复杂度较大    注 意:当训练样本数据少的时候,样本比例一定要相同   KNN算法分类电影 import numpy import pandas #导入Excel文件 from sklearn.neighbors import KNeighborsClassifier #机器学习算法库,没有深度学习算法 movie=pandas.read_excel(r"D:\Python\代码\Machine-Learn\1-KNN\data\movie.xlsx",sheet_name=0) movie 电影名称 武打镜头 接吻镜头 分类情况 0 大话西游 36 1 动作片 1 杀破狼 43 2 动作片 2 前任3 0 10 爱情片 3 战狼2 59 1 动作片 4 泰坦尼克号 1 15 爱情片 5 新余心愿 2 19 爱情片 movie=pandas.read_excel(r"D:\Python\代码\Machine-Learn\1-KNN\data\movie.xlsx",sheet_name=0) x=movie[["武打镜头","接吻镜头"]]

随机快速排序(使用Python描述)

被刻印的时光 ゝ 提交于 2020-03-20 12:51:56
title   代码复制自 随机快速排序的实现-夜雨最萌 .和快速排序一样呀😂   随机快速排序与快速排序的思路一样,差异就是取主元之前,随机快速排序多了一个步骤:而随机快速排序是随机取得一个元素,但是又会与最后一个元素交换位置.取得主元的下标位置实际上还是最后一个下标.快速排序是习惯取得最后一个元素. 此算法特性 此算法适用场景 代码实现 import random def random_quicksort(a,left,right): if(left<right): mid = random_partition(a,left,right) random_quicksort(a,left,mid-1) random_quicksort(a,mid+1,right) def random_partition(a,left,right): ######################################## t = random.randint(left,right) #生成[left,right]之间的一个随机数 a[t],a[right] = a[right],a[t] ######################################## # 相比经典随机快速排序,增加了上面两行代码 x = a[right] i = left-1 #初始i指向一个空

解析 | 为什么我学了Python还是不会编程

≯℡__Kan透↙ 提交于 2020-03-18 17:36:08
3 月,跳不动了?>>> 前言 Python是一门使用非常广泛的语言,很容易入门,也被大家首推为编程入门的最佳语言。知数堂有幸邀请到DevOps开发专业人士: 章文炳老师,和他一块聊了一下学习Python的一些疑惑。大概问题如下: 怎么学习Python 系统的看了好几本Python的书,但还是不能独立的做一个编程,是为什么呢?章老师从本次在构建《Python运维自动化》这门课程的思想上给了我们以下解答。 怎么学Python基础 Python基础入门是比较简单的,基本3-4周就可以看完一门Python的书了。接着针对一些自己难以理解的地方着重练习一下。这里注意一下,我们在学习的过程中不需要对每一章的例子进行敲键盘,点个运行通过才算满意。从收益上来看,这种学习方式的性价比并不高,而且会将我们的学习时间拖得很久。这部分的学习,可以联系知数堂助教获取一份知数堂提供的Python基础视频。我们通过视频进行系统的学习,之后自己进行总结。Python基础这个环境,基本10-20天就可以突破了。 Python进阶实战 有学员反映说学习完Python基础,会觉得非常的茫然。因为这时候说工程,离工程太远;说算法,离算法太远。忽然感觉有一些东西不是Python语法上能解决的。这里举两个例子: 1、解决Python面向领导编程需要的实力 这里开个玩笑,提到一个面向领导编程。例如

Python 代码性能优化技巧

99封情书 提交于 2020-03-18 05:07:45
本篇网文,引自网络: http://www.ibm.com/developerworks/cn/linux/l-cn-python-optim/ 选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化来提高程序的执行效率。如何进行 Python 性能优化,是本文探讨的主要问题。本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希望可以给 Python 开发人员一定的参考。 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。 改进算法,选择合适的数据结构 一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进。在算法的时间复杂度排序上依次是: O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) -> O(n!) 因此如果能够在时间复杂度上对算法进行一定的改进,对性能的提高不言而喻

Python练习题(五)

*爱你&永不变心* 提交于 2020-03-18 03:47:35
1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reverse tempList = [1,2,3,4] tempList.reverse() for x in tempList: print x #如果不是list,需要手动重排 templist = (1,2,3,4) for i in range(len(templist)-1,-1,-1): print templist[i] 2.如何查询和替换一个文本中的字符串 #最简单的方法使用replace() tempstr = "hello you hello python are you ok" print tempstr.replace("you","python") #还可以使用正则,有个sub() tempstr = "hello you hello python are you ok" import re rex = r'(hello|Use)' print re.sub(rex,"Bye",tempstr) 3.使用python实现单例模式 #方法一:可以使用__new__方法 #在__new__方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls

适合初学者练手的 10 个 有趣Python项目

℡╲_俬逩灬. 提交于 2020-03-17 18:07:46
想成为一个优秀的开发者,没有捷径可走,势必要花费大量时间在键盘后。 而不断地进行各种小项目开发,可以为之后的大开发项目积攒经验,做好准备。 但不少人都在为开发什么项目而苦恼,因此,我为大家准备了 10个有趣的Python项目 ,在锻炼开发能力的同时,大家也能做出一些有趣的东西。 另外, 大家在学习其他编程语言的过程中,找不到开发项目的话,也可以在评论区留言,我会为大家整理相应的练手项目。 以下的项目都可在“实验楼”官网获取具体开发教程和源代码哦,包括线上开发环境也为您搭建好了。 PS: 文末有彩蛋。 1.Python 实现 2048 游戏 地址: https://www.shiyanlou.com/courses/368 本实验仅用 200 行的 Python 代码完成 2048 小游戏的编写。通过本实验将学习 Python 基本知识,状态机的概念,以及编写 Python 游戏的步骤。 课程为 Python 的进阶内容,需要用户具有 Python 的语法基础。 2.Pygame 打造回合制战棋游戏 地址: https://www.shiyanlou.com/courses/1516 游戏使用 Pygame 模块实现了类似英雄无敌系列的回合制战棋游戏:对战双方每个生物每一轮有一次行动机会,可以行走或攻击对方。 每个生物属性有:行走范围,速度,生命,伤害,防御,攻击 和是否是远程兵种

第 433 期 Python 周刊

╄→尐↘猪︶ㄣ 提交于 2020-03-17 17:37:23
某厂面试归来,发现自己落伍了!>>> 文章教程 使用 Python 扩展 Clojure 链接: https://www.youtube.com/watch?v=vQPW16_jixs Libpython-clj 是一个库,它允许你从 clojure repl 中使用 python 库。我们将深入研究这个库的细节,并讨论构建它的设计决策中的一些潜在后果。 使用 TensorFlow 构建 AI 增强的音乐库 链接: https://blog.tensorflow.org/2020/01/building-ai-empowered-music-library-tensorflow.html QQ 音乐是腾讯音乐娱乐集团(TME)旗下的音乐流媒体服务,我们为全球 8 亿多用户提供服务。我们拥有庞大的音乐库,其中包含大量的专辑和现场音乐(音频和视频格式)。在 TensorFlow 的基础上,我们能够通过音乐标记,音乐评估,语音分离,音乐缺陷检测和恢复等的机器学习算法来有效地管理音乐库。在本文中,我们想与您分享我们如何构建这种具有 AI 功能的音乐库以及关于使用 TensorFlow 的经验。 使用 Python 读取二进制数据 链接: https://reachtim.com/articles/reading-binary-data-with-python.html 在 Python

Python基础(第八节)

我的未来我决定 提交于 2020-03-17 09:48:50
方法没有重载 1、在其他语言中,可以定义多个同名的方法 2、Python中方法的参数没有声明类型,参数的数量也可以由可变参数控制,因此Python中没有方法的重载 3、定义一个方法即可有多种调用方式,相当于实现了其他语言中的方法的重载 4、定义多个同名方法时,只有最后一个有效 方法的动态性 Python是动态语言,可以动态地为类添加新方法,或者动态地修改类的已有的方法 class Person: def work(self): print("努力工作!") def play_game(a): print("{}在玩游戏".format(a)) def work2(n): print("努力赚大钱,努力工作!") Person.play = play_game p = Person() p.work() p.play() #解释器解释为Person.play(p) Person.work = work2 #二者形参数量要对应 p.work() 运行结果为: 努力工作! <__main__.Person object at 0x00000287ABF64CF8>在玩游戏 努力赚大钱,努力工作! 私有属性和私有方法 1、Python对于类的成员没有严格的访问控制权限,这与其他面向对象语言有区别 2、关于私有属性和私有方法有如下要点: ①通常我们约定,两个下划线开头的属性是私有的

Python的希尔排序、快速排序和归并排序

本秂侑毒 提交于 2020-03-17 07:08:53
目录 一、希尔排序(Shell Sort) 二、快速排序(Quicksort) 三、归并排序 四、排序算法效率比较 五、搜索 六、二分法查找 一、希尔排序 (Shell Sort) 1、定义:是插入排序的一种,只不过间隔设为gap。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 2、原理:将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列(步长更长了,列数更少了)来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序。 3、希尔排序的实现: shell_sort(alist): """希尔排序法""" n = len(alist) # 初始步长 gap = n // 2 #折半设定,若n=9,则gap=4 while gap > 0: #gap=1进行最后一次循环 # 按步长进行插入排序 for j in range(gap, n):#从gap开始,控制子序列中的所有元素 i = j # 插入排序 while i > 0: if alist[i] < alist[i-gap]: alist[i-gap], alist[i] =