python算法

python基础(一)--python介绍

微笑、不失礼 提交于 2020-02-11 00:39:39
1. Python语言 1.1 编程语言 语言 是人类最重要的交际工具,是人类之间进行信息交换的主要表达方式。 编程语言 是用来定义计算机程序的语言,用来向计算机发出指令。 1. 2 P ython语言 Python语言 是一种面向对象的解释型计算机程序设计语言。 Python语言创始人为吉多·范罗苏姆(Guido van Rossum) 2. Python语言特点 2.1 优点 简单 : Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。 易学 : 就如同你即将看到的一样,Python极其容易上手。 免费、开源 : Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。 高层语言 : 当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 可移植性 : 由于它的开源本质,Python已经被移植在许多平台上

leetcode-算法-13 + Python

三世轮回 提交于 2020-02-10 20:04:39
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/roman-to-integer 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解答真的太丑陋了,都不知道怎么用C++了。。 class Solution { public :

LibSVM for Python 使用

半世苍凉 提交于 2020-02-10 14:22:54
经历手写SVM的惨烈教训(还是太年轻)之后,我决定使用工具箱/第三方库 Python libsvm的GitHub仓库 LibSVM是开源的SVM实现,支持C, C++, Java,Python , R 和 Matlab 等, 这里选择使用Python版本。 安装LibSVM 将LibSVM仓库的所有内容放入Python的包目录\Lib\site-packages或者工程目录中。 在libsvm根目录和python子目录下中分别新建名为 __init__.py 的空文件,这两个空文件将标识所在的目录为python包可以直接导入。 允许草民吐槽一下各种Blog里切换根目录的奇怪的解决方案: 这个 和 这个 因为经常使用svm,所以草民将libsvm包放入\Lib\site-packages目录下。在Python交互环境或在任意脚本中都可以使用 import libsvm.python 来使用libsvm的python接口。 使用LibSVM LibSVM的使用非常简单,只需调用有限的接口 示例1: from libsvm.python.svmutil import * from libsvm.python.svm import * y, x = [1,-1], [{1:1, 2:1}, {1:-1,2:-1}] prob = svm_problem(y, x) param = svm

Hash算法(含python实现)

一个人想着一个人 提交于 2020-02-10 07:26:18
1. 简介 哈希(hash)也翻译作散列。Hash算法,是将一个不定长的输入,通过散列函数变换成一个定长的输出,即散列值。 这种散列变换是一种单向运算,具有 不可逆性 即不能根据散列值还原出输入信息,因此严格意义上讲 Hash算法是一种消息摘要算法 ,不是一种加密算法。常见的hash算法有:SM3、MD5、SHA-1等 。 2. 应用 Hash主要应用在数据结构以及密码学领域。 在不同的应用场景下,hash函数的选择也会有所侧重。比如在管理数据结构时,主要要考虑运算的 快速性 ,并且要保证hash 均匀分布 ;而应用在密码学中就要优先考虑 抗碰撞性 ,避免出现两段不同明文hash值相同的情况发生。 2.1 在密码学领域的应用 在密码学中,Hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。比如一些登陆网站并不会直接明文存储用户密码,存储的是经过hash处理的密码的摘要(hash值),当用户登录时只需要对比输入明文的摘要与数据库存储的摘要是否相同;即使黑客入侵或者维护人员访问数据库也无法获取用户的密码明文,大大提高了安全性。 2.2 在数据结构中的应用 使用Hash算法的数据结构叫做哈希表,也叫散列表,主要是为了提高查询的效率。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数就是hash函数,存放记录的数组叫做哈希表

python语法基础-并发编程-进程-长期维护

大城市里の小女人 提交于 2020-02-10 06:18:06
############### 进程的启动方式1 ############## """ 并发编程: 进程 1,运行中的程序,就是进程,程序是没有生命的实体,运行起来了就有生命了, 操作系统可以管理进程,进程是操作系统基本的执行单元, 2,每一个进程都有它自己的地址空间,进程之间是不会混的,比如qq不能访问微信的地址空间, 操作系统替你隔离开了,这也是操作系统引入进程这个概念的原因, ####################################### 进程的调度 1,先来先服务,有一个不好的,就是不利于短作业 2,短作业优先算法,但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。 3,时间片轮转算法,就是轮流执行,已经很科学了, 4,多级反馈队列算法,有多个队列,有一个新任务来了放入第一个队列,这是优先级加上时间片轮转,第二个任务来了放入下一级, ####################################### 并发和并行: 进程的并行:这种只有在多核cpu才可以实现, 进程的并发:这是轮流执行,由于速度很快,看起来像是一起执行的,比如一遍听音乐,一遍写代码, ###################################### 进程的三状态转换图:非常重要 1,进程一开始运行的时候,是就绪的状态,这是第一个状态

python-希尔排序

给你一囗甜甜゛ 提交于 2020-02-09 04:14:08
希尔排序 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位 步骤 每次以一定步长(就是跳过等距的输)进行排序 #!/usr/bin/env python # coding:utf-8 def shellSort(nums): # 设定步长 step = len(nums)/2 while step > 0: for i in range(step, len(nums)): # 类似插入排序, 当前值与指定步长之前的值比较, 符合条件则交换位置 while i >= step and nums[i-step] > nums[i]: nums[i], nums[i-step] = nums[i-step], nums[i] i -= step step = step/2 return nums if __name__ == '__main__': nums = [9,3,5,8,2,7,1] print shellSort(nums) """ [1, 2

Python排序算法之选择排序

会有一股神秘感。 提交于 2020-02-09 03:28:03
选择排序 选择排序比较好理解,好像是在一堆大小不一的球中进行选择(以从小到大,先选最小球为例):   1. 选择一个基准球   2. 将基准球和余下的球进行一一比较,如果比基准球小,则进行交换   3. 第一轮过后获得最小的球   4. 在挑一个基准球,执行相同的动作得到次小的球   5. 继续执行4,直到排序好 时间复杂度:O(n^2). 需要进行的比较次数为第一轮 n-1,n-2....1, 总的比较次数为 n*(n-1)/2 直接上代码: def selectedSort(myList): #获取list的长度 length = len(myList) #一共进行多少轮比较 for i in range(0,length-1): #默认设置最小值得index为当前值 smallest = i #用当先最小index的值分别与后面的值进行比较,以便获取最小index for j in range(i+1,length): #如果找到比当前值小的index,则进行两值交换 if myList[j]<myList[smallest]: tmp = myList[j] myList[j] = myList[smallest] myList[smallest]=tmp #打印每一轮比较好的列表 print("Round ",i,": ",myList) myList = [1,4,5

Python 生成器

孤者浪人 提交于 2020-02-08 23:39:15
生成器 Generator 是迭代器的一种. Review Iterator 上篇呢, 对 迭代器 有过谈到, 从 迭代过程, 迭代对象, 迭代器都进行了说明, 首先要理解概念, 其实理解词性就可以. 迭代器 对 可迭代对象 进行 迭代 . 从主谓宾上就理清了这几个名词. 更通俗一般地理解: 迭代: 在代码中表现为对 某个对象进行 for 遍历 的过程 (包含了 next()) 可迭代对象: 能够被 遍历 的对象, 如 list, tuple, str, dict, range, enumerate, zip .... 迭代器: 能够被 next() 函数调用, 并不断返回下一个值的对象. 即实现了 __ iter __ 和 __ next __ 方法. for 循环原理: 会先调用 __ iter __ 方法, 然后不断调用 __ next __ 方法, 直到捕捉到异常类 StopIteration # for的原理 class A: def __iter__(self): print("__iter__ is called") return self def __next__(self): print("__next__ is called") for i in range(3): print(i) raise StopIteration if __name__ == '_

Python列表、元组结构详解

ⅰ亾dé卋堺 提交于 2020-02-08 18:51:55
目录 列表 导言 什么是列表 访问列表的元素 列表元素的修改、添加与删除 修改列表元素 添加列表元素 从列表中删除元素 组织列表 列表排序 列表临时排序 反转列表 确定列表元素个数,最大值,最小值,统计某个元素在列表中出现的次数 查找元素 新列表扩展原列表 检查某个元素是否是序列的成员 操作列表 遍历列表 切片 复制列表 将其他结构转换为列表 元组 什么是元组 如果我修改了元组变量? 如果我非要修改元组变量,怎么办? 删除元组 将其他结构转换为元组 列表和元组的区别 参考资料: 例题讲解 jmu-python-回文数判断 题目分析 代码实现 jmu-Java&Python-统计一段文字中的单词个数并按单词的字母顺序排序后输出 题目分析 jmu-python-从列表中删除元素 题目分析 代码实现 jmu-python-杨辉三角 题目分析 代码实现 由于我刚开始学习Python时,被序列结构转晕了,所以写了这篇博客。 列表 导言 例如我们打开PTA网站,随便打开一个题目集,我们可以查看一个叫题目列表的页面,如图所示,在这个列表中,我们可以看到这个列表展示了我们需要练习的题目,Python中的列表结构就与这个例子类似。 什么是列表 列表是由一系列按特定顺序排列的元素组成,列表的数据项不需要具有相同的类型,你可以往列表中加入任何内容,列表中的元素之间没有任何关系。在Python中,我们

Python教程分享为什么学Python是最佳选择

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-08 17:53:46
  近几年来,Python可谓大出风头,语法简洁、功能强大、胶水语言是人们对Python的普遍认知。学习Python就业机会多、薪资待遇好,是人们不断加入Python开发行列的动力。很多人疑惑为什么Python能够成为人工智能和机器学习的最佳编程语言?接下来就给大家分析下。 代码少。Python减少了执行函数时通常使用的代码数量,它着重于简化代码并使其易于阅读。除此之外,还有许多基于AI和ML的复杂算法,Python与AI的结合将大大减少开发人员必须处理的代码数量。 灵活性高。开发的任何应用程序都应该兼容多个操作系统,而只要稍加调整,Python就可以使相同的代码在各个操作系统上都能工作。这节省了开发人员为每个操作系统单独创建复杂代码的大量时间,也节省了大量的测试和调试时间。此外,在使用Python时,你还可以连接不同的数据结构,从而使其易于用于所有需求。 丰富而强大的库。拥有众多的软件库选择是Python成为人工智能最受欢迎的编程语言的主要原因之一。软件库由 PyPi等不同源发布的模块或模块组组成,其中包括预先编写的代码片段,允许用户访问某些功能或执行不同操作。机器学习需要连续地进行数据处理,Python库允许访问、处理和转换数据。比如Scikit-learn、Pandas、Matplotlib、Keras等都是机器学习和人工智能领域使用最为广泛的软件库。 入行门槛低