python算法

python排序 基数排序

拜拜、爱过 提交于 2019-11-28 08:29:58
算法思想 基数排序通过按位比较(一般从最低位开始)将元素按照最低位的数放到10个桶中,当所有的元素都这样被处理一次后,在按从0到9的顺序将每个桶的元素再取出来(不关注其他位的,只关注当前位的)这样就完成了所有元素最低位的有序性,然后不断的重复上面的步骤,知道所有元素的最高位都经过处理了。 算法步骤 初始化桶,共有10个,分别存放当前位位0-9的元素 从元素的最后一位开始,按照最后一位的数字将其放到相应的同元素中。对列表中的每个元素都进行上面的操作后,从0号桶开始,将元素从桶中取出来,这样就完成了一个位数的排序 重复上一过程,如果发现元素最高位已经被处理过,就把他添加到最终的结果中 算法实现 算法的主要问题在于对当前位的获取中 对于正数 (element//divisor)%10#结果是当前位上的数#divisor代表当前位,个位是1,十位是10,百位是100#//是向下取整的意思   如过element//divisor结果为0 就代表实际结果小于1了,即当前位已经是0了 对于负数 collection[j]//i==-1#代表是负数   取得当前位 (10-math.ceil(element/divisor)%10)%10#math.ceil()是向上取整 #最后一个%10是防止前面结果=10的情况出现 算法实现 def radix_sort3(collection): ''

软件课设第五天 8.23

我的未来我决定 提交于 2019-11-28 08:22:30
今天完成的任务: 1、对算法流程图进行了研究完善; 2、完成了第一周的课程答辩; 3、制定了下一个阶段的项目计划(见每日小结)。 明天的计划: 1、在网上查找适合此算法流程的算法作为参考并加以研究; 2、学习相关的Python语言和Python软件的运行方法。 每日小结: 今天我们小组彻底完善了算法流程图,算是构成了这个项目的总体框架,也是完成了项目第一阶段的任务。第二个阶段,我们小组的计划是查找并研究与本项目相关的算法并加以完善,以此初步写成本项目的算法,并学习相关的Python语言与项目涉及的软件的用法。 来源: https://www.cnblogs.com/yoona5683/p/11402013.html

2.线性回归

☆樱花仙子☆ 提交于 2019-11-28 07:10:57
(一)简单线性回归 和之前介绍的KNN不同,KNN主要是解决分类问题,而线性回归顾名思义显然是用来解决回归问题的。线性回归具有如下特征: 解决回归问题 思想简单,实现容易 许多强大的非线性模型的基础,比如逻辑回归、多项式回归、svm等等 结果具有很好的可解释性 蕴含机器学习中的很多重要思想 图中是房屋的面积与价格之间的对应关系,不同的面积对应不同的价格,由此在二维平面中便形成了多个点。我们的目的就是要找到一条直线,最大程度上来拟合这些点。 但是在之前的KNN,分类问题中,横轴和纵轴都是样本的特征,而标签则是由这个点是红色还是蓝色决定的。 但是在线性回归中,由于是房产数据,我们必须要预测出一个具体的数值,而不能像分类问题那样,用简单的颜色来代表类别。而这些数据显然是在一个连续的样本空间中,因此需要一个坐标轴来表示。也正因为如此,在二维平面中只能有一个特征,要是多个特征,我们就要更高的维度上进行观察了。 如果样本的特征只有一个,我们称之为简单线性回归 我们的目的是要找到一个直线来尽可能多的拟合这些点,而在二维平面上显然是y = ax + b,那么每一个样本x,都会有一个真实值y和用拟合曲线预测出来的预测值ŷ,因此我们的真实值和预测值就会有一个差距 既然有真实值和预测值,那么评价一个直线的拟合程度,就看所有样本的真实值和预测值之差。如果只是简单的相减,那么两者之差可能有正有负,会抵消掉

Python刷题之路,怎样做才能让技术突飞猛进

▼魔方 西西 提交于 2019-11-28 06:01:05
比你优秀的人比你还努力 这个世界最可悲的就是 , 比你优秀的人比你还努力 偶然的机会,通过Python认识了一位华为的文职工作人员。起初只是问我,Python初学者看什么书能快速入门。而两个月过后,她已经开始每天在Leecode上刷题了。虽然有时半夜微信收到她刷题刷到崩溃的消息,或者针对部分Python语法的疑问,但作为一位文职大厂的优秀员工,她却比很多本该靠着代码吃饭的人更为努力。 今天这篇文章,就写给那些希望学习Python,但在刷题路上迷茫或者找不到方向的朋友们。文章仅代表个人观点,不喜勿喷。 Leecode刷题 起初学习python,我就是秉承着什么好玩学什么的想法,东一榔头西一棒子的跳着模块学习。看着很多方面都有所涉及,但遇到正儿八经的开发代码时,就歇菜了。基础的字符串、列表、字典操作,都经常出错。后来才意识到,为了学习模块而去学习,那只是高屋建瓴,底子差是硬伤。 一开始看到菜鸟教程上有Python100练,就在网上找了个打包好的全套练习题,PDF下载地址在我之前发的文章中: Python面试的一些心得,与练习题分享 这套题型挺全面的,但是基础和算法的内容比较少,所以开始去Leecode刷题。今天就借着前几天这位朋友问的一道题,谈谈如何在刷题中终结知识,提高刷题效率吧。 刷题案例 在引用朋友的代码前,提前和她打了个招呼: 我真的是很认真去写文章的,第一句话只是寒暄而已

用python实现的21点游戏

寵の児 提交于 2019-11-28 06:00:16
游戏规则 该游戏的规则与实际的玩法应该有点差异,因为我没有去细查21点的确切玩法,只是根据印象中进行了一系列的定义,具体如下: 1.玩家为人类玩家与电脑玩家,共2个玩家。电脑为庄家。 2.先给人类玩家与电脑玩家分别发两张牌作为底牌。 3.判断双方底牌是否为blackjack,如果一方为blackjack则直接判胜利,并在总分中记上一分。如果双方均为blackjack,则判双方平局,均不得分 4.如果没有出现blackjack的情况,人类玩家根据牌面决定是否要牌,若要牌则得到牌堆的一张牌,并再次判断。如果人类牌面的点数超过21点,则直接判负。 5.如果人类玩家停止要牌,且未因为超过21点而判负,则电脑要牌(电脑的要牌基于一个算法,后期如果更新,这个算法要基于对胜率的估算),电脑停止要牌后,判断与人类的输赢情况。赢者加一分。 6.人类玩家决定是否继续下一轮,如果继续,则从剩余牌堆中继续发牌开始上述过程。如果不继续,则计算总分,判断谁胜出。 7.如果牌堆的牌已经不够玩一轮的话,自动判断游戏结束。人类可以选择是否重新再玩。 程序功能 要实现上面游戏的规则,程序的功能进行划分如下,不同的功能用不同的函数来实现,以达到代码的复用。 1.牌堆:在发牌的过程中,牌堆中会去除已经发出的牌 2.发牌:要牌的时候,需要从牌堆随机抽取一张牌 3.计分:能对手中的牌的分数进行计算,其中需要考虑靠A的特殊性

【Python机器学习笔记】One Class SVM

北慕城南 提交于 2019-11-28 05:48:39
前言   最近老板有一个需求,做单样本检测,也就是说只有一个类别的数据集与标签,因为在工厂设备中,控制系统的任务是判断是是否有意外情况出现,例如产品质量过低,机器产生奇怪的震动或者机器零件脱落等。相对来说容易得到正常场景下的训练数据,但故障系统状态的收集示例数据可能相当昂贵,或者根本不可能。如果可以模拟一个错误的系统状态,问题就好解决多了,但无法保证所有的错误状态都被模拟到,所以只能寻找单样本检测相关的算法。   所幸了解到一些单样本检测的算法,比如Isolation Forest,One-Class Classification,所以这篇文章就记录一下自己做的关于One-Class SVM 的笔记。 来源: https://www.cnblogs.com/ITCSJ/p/11395265.html

python搭建openCV环境

时间秒杀一切 提交于 2019-11-28 05:39:33
一、openCV简介 OpenCV是一个开源的跨平台计算机视觉库。它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。   简言之,通过openCV可实现计算机图像、视频的编辑。广泛应用于图像识别、运动跟踪、机器视觉等领域。 二、Ubuntu16.04下的安装 直接使用pip安装 pip3 install opencv-python 或者使用国内镜像安装 pip3 install opencv-python -i https://pypi.douban.com/simple 三、测试脚本 # File: testopencv.py # Author: ranxf # Created on 2019.08.22 02:00 (first release) # Copyright (C) 2019 XinZhouRuiShi. All rights reserved. # please use python3.x # -*- coding: UTF-8 -*- import cv2 # 导入模块,opencv的Python模块叫cv2 img = cv2.imread('Aaron_Peirsol_0001.jpg') # 读取当前目录下的图像Aaron_Peirsol

python列表底层实现原理

久未见 提交于 2019-11-28 03:45:59
Python 列表的数据结构是怎么样的? 书上说的是:列表实现可以是数组和链表。 顺序表是怎么回事?顺序表一般是数组。 列表是一个线性的集合,它允许用户在任何位置插入、删除、访问和替换元素。 列表实现是基于数组或基于链表结构的。当使用列表迭代器的时候,双链表结构比单链表结构更快。 有序的列表是元素总是按照升序或者降序排列的元素。 实现细节 python中的列表的英文名是list,因此很容易和其它语言(C++, Java等)标准库中常见的链表混淆。事实上CPython的列表根本不是列表(可能换成英文理解起来容易些:python中的list不是list)。在CPython中,列表被实现为长度可变的数组。 可参考《Python高级编程(第2版)》 从细节上看,Python中的列表是由对其它对象的引用组成的连续数组。指向这个数组的指针及其长度被保存在一个列表头结构中。这意味着,每次添加或删除一个元素时,由引用组成的数组需要该标大小(重新分配)。幸运的是,Python在创建这些数组时采用了指数分配,所以并不是每次操作都需要改变数组的大小。但是,也因为这个原因添加或取出元素的平摊复杂度较低。 不幸的是,在普通链表上“代价很小”的其它一些操作在Python中计算复杂度相对过高。 利用 list.insert(i,item) 方法在任意位置插入一个元素——复杂度O(N) 利用 list.pop(i

Python学习日记(十三) 递归函数和二分查找算法

限于喜欢 提交于 2019-11-28 03:11:51
什么是递归函数? 简单来说就是在一个函数中重复的调用自己本身的函数 递归函数在调用的时候会不断的开内存的空间直到程序结束或递归到一个次数时会报错 计算可递归次数: i = 0 def func(): global i print('i = {}'.format(i)) i += 1 return func() func()            #.....i = 994 i = 995 RecursionError: maximum recursion depth exceeded while calling a Python object 在这里我们修改我们可递归的次数: import sys sys.setrecursionlimit(1000000) i = 0 def func(): global i print('i = {}'.format(i)) i += 1 return func() func() #...i = 3924 i = 3925 如果还想递归更多的次数,就必须要提升计算机的性能了 递归函数的 优点 就是能让一个问题变得简单,但 缺点 就是太占用内存,因此递归函数不适合解决需要大规模递归运算的问题 二分查找算法: 这个被查询的列表必须是一个 有序 的列表 def find(l,aim,start = 0,end = None): end = len(l

Python 基础课程大纲

耗尽温柔 提交于 2019-11-28 02:47:00
c0102_变量及数据类型.ipynb 1、数据类型概述 Python标准数据类型:Numbers数字,String字符串,List列表,Tuple元祖,Dici字典、布尔类型 # Numbers数字分为:int整型,long长整型,float浮点型,complex复数 # String字符串由数字、字母、下划线组成的一串字符,用于表示文本的数据类型 # List列表,支持字符,数字,字符串以包含列表(即嵌套),用[]标识,有序对象 # Tuple元组,用()标识,不能二次赋值,可以理解成不可变的列表(只读列表),有序对象 # Dict字典,用{}标识,由索引(key)和它对应的值value组成,无序对象 # bool布尔型:True,False,用于做判断 c0103_序列及通用操作.ipynb 序列分类:可变序列list,不可变序列tuple、str 特点:下标、切片、步长、全局函数 (len()/max()/min()/sum()/count()) 生成器 range(),type(),list(range(5)) list函数生成列表 可变列表: 添加元素:.append() 添加多个元素中的值: .extend(['a','b','c']) 单个添加列表中每一个值   删除元素:.remove('Jack') # .remove方法:移除列表中某个值的第一个匹配项