python算法

BFS算法模板(python实现)

吃可爱长大的小学妹 提交于 2019-12-02 13:09:06
BFS算法整理(python实现) 广度优先算法(Breadth-First-Search),简称BFS,是一种图形搜索演算算法。 1. 算法的应用场景 2. 算法的模板 2.1 针对树的BFS模板 无需分层遍历 from collections import deque # Definition for a binary tree node. class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None def level_order_tree(root, result): if not root: return # 这里借助python的双向队列实现队列 # 避免使用list.pop(0)出站的时间复杂度为O(n) queue = deque([root]) while queue: node = queue.popleft() # do somethings result.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return result if __name__ == "__main__": tree =

Python数据结构和算法(五)------树与树算法

岁酱吖の 提交于 2019-12-02 12:44:33
树与树算法 目录 树与树算法 一、关于树的一些概念 1.树的定义 2.树的术语 3.树的分类 4.树的存储与表示 二、二叉树 1.基本概念 2.基本性质 3.二叉树的存储 4.二叉树的节点创建和广度遍历 5.二叉树的深度遍历 6.由遍历结果确定一棵二叉树 一、关于树的一些概念 1.树的定义 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点有零个或多个子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分为多个不相交的子树; 2.树的术语 节点的度 :一个节点含有的子树的个数称为该节点的度; 树的度 :一棵树中,最大的节点的度称为树的度; 叶节点或终端节点 :度为零的节点; 父亲节点或父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 孩子节点或子节点 :一个节点含有的子树的根节点称为该节点的子节点; 兄弟节点 :具有相同父节点的节点互称为兄弟节点; 节点的层次 :从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 树的高度或深度 :树中节点的最大层次; 堂兄弟节点

Python_面向对象

纵饮孤独 提交于 2019-12-02 12:31:19
一、内容回顾   成员   class Person:     def __init__(self, name, num, gender, birthday):       # 成员变量       self.name = name       self.num = num       self.gender = gender       self.birthday = birthday       # 对象来访问(成员方法)(实例方法)       def eat(self,name):         print("%s吃东西"%self.name)           ### 成员:在类定义的变量和方法都被称为成员       变量:         1、成员变量(实例变量)、字段         2、类变量(静态变量)       方法:         1、成员(实例)方法,加了self的,调用的时候,必须用对象去访问         2、类方法 @classmethod def clsMethod(cls) ## 类方法:第一个参数传递的是类名         3、静态方法,当你的方法不需要传递当前类的对象。语法规则:在方法上面加@staticmethod        ------>>>>>说一说,静态方法、类方法和实例方法的区别       属性:        

python学习

混江龙づ霸主 提交于 2019-12-02 12:23:08
day1 turtle pos()获取位置,获得的是一个元组,可以通过索引获取x y值 使用sqrt要import math,然后math.sqrt 也可以 from math import sqrt 就能直接使用sqrt了 day3 厘米和英尺转换可以添加上break但还存在问题,后期解决(已解决) 个人所得税的算法,可理解可不理解 print( '对应的等级是: ', grade) print可以这么串联,因为grade是字符串,若是数字则需要print( '对应的等级是: ', str(grade)) shift+tab删除多行的tab day4 判断输入字符类型存疑,后续解决 day6 def is_prime(num): for factor in range(2, num): if num % factor == 0: return False return True if num != 1 else False最后一行存疑 再看看下面这段代码,我们希望通过函数调用修改全局变量 a 的值,但实际上下面的代码是做不到的。 def foo(): a = 200 print(a) # 200 if __name__ == '__main__': a = 100 foo() print(a) # 100 在调用 foo 函数后,我们发现 a 的值仍然是100

Python 循环结构

a 夏天 提交于 2019-12-02 12:10:49
while 循环 while 布尔表达式 : 循环体 执行流程:当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。 for…in…循环 for x in iterable : 循环体 执行流程:iterable为一个可迭代对象,比如:list/set/str,x为iterable中的一个元素 说明: 布尔表达式:也叫循环条件(0、False、None、[]、{}、()在python都是与假值) 语句块:也叫循环体,每次循环需要执行的代码 死循环:循环条件一直成立(while True:…) break:跳出循环 continue:结束本次循环,进入下次循环 else:对应的语句块,循环正常退出时会执行,非正常退出(break)时不执行 列表生成式(列表解析) range() # 内置,返回一个可迭代对象,保存了产生连续整数的算法,可以节约空间 # 可以指定起始位置,默认为0 # print(range(10)) # 可以进行遍历 for i in range ( 10 ) : print ( i ) # 可以转换为列表 print ( list ( range ( 2 , 10 ) ) ) 列表生成式 # 列表生成式:可以快速方便地生成列表 print ( [ i for i

Python迭代器和生成器

你离开我真会死。 提交于 2019-12-02 12:05:40
迭代 :访问集合元素的一种方式 迭代器 :可以记录当前迭代位置的对象 可迭代对象 :可以通过for ... in ...之类的语句依次获取其中一条数据的对象 可迭代对象 如下代码中,isinstance函数可以判断一个对象是否为可迭代对象 from collections import Iterable print(isinstance([], Iterable)) # True 也可以用我们常用的方法来判断常用的数据类型是否为可迭代对象 def test(para): try: for i in para: pass print(type(para), "is iterable") except TypeError as e: print(type(para), e) test([1, 2, 3]) test((1, 2, 3)) test({"a": 1, "b": 2, "c": 3}) test({123}) test("123") test(123) # <class 'list'> is iterable # <class 'tuple'> is iterable # <class 'dict'> is iterable # <class 'set'> is iterable # <class 'str'> is iterable # <class 'int'>

排序算法之选择排序的python代码实现

送分小仙女□ 提交于 2019-12-02 11:42:54
选择排序算法的工作原理如下: 1. 首先在序列中找到最小或最大元素,存放到排序序列的前或后。 2. 然后,再从剩余元素中继续寻找最小或最大元素。 3. 然后放到已排序序列的末尾。 4. 以此类推,直到所有元素均排序完毕。 例子图步骤如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "hsz" def select_sort(alist): n = len(alist) # 外层控制比较几轮 for j in range(n - 1): min_index = j # 内层控制元素比较和更新索引 for i in range(j + 1, n): # 进行比较 if alist[min_index] > alist[i]: # 大于为正序 小于为倒序(小于为max_index) # 更新索引 min_index = i # 退出循环后,交换数据 alist[j], alist[min_index] = alist[min_index], alist[j] # print(alist[j]) if __name__ == '__main__': # li = [3, 11, 26, 26, 7, 3, 9, 4] li = [26, 54, 93, 17, 31, 44, 55, 20] # print(id

数据分析

谁说胖子不能爱 提交于 2019-12-02 11:40:43
数据分析介绍 数据分析是什么? 数据分析能干什么? 为什么利用Python进行数据分析? 数据分析过程概述 常用库简介 一 、数据分析是什么 在我们如今这个时代,相信大多数人都能明白数据的重要性,数据就是信息,而数据分析就是可以让我们发挥这些信息功能的重要手段。 二、数据分析能干什么 对于数据分析能干什么其实我们可以简单的举几个例子: 淘宝可以观察用户的购买记录、搜索记录以及人们在社交媒体上发布的内容选择商品推荐 股票可以根据相应的数据选择买进卖出 今日头条可以将数据分析应用到新闻推送排行算法当中 爱奇艺可以为用户提供个性化电影推荐服务 其实数据分析不仅可以完成像以上这样的推荐系统,在制药行业也可运用数据分析来预测什么样的化合物更有可能制成高效药物等 所以说数据分析绝对是未来所有公司不可或缺的岗位,目前社会上获取数据方式太多了,这么多的数据,只要我们拥有数据分析的技能,绝对可以应付任何岗位上的工作。 三 、为什么利用Python进行数据分析 Python的代码语法简单易学 Python可以很容易的整合C、C++等语言的代码 Python有大量用于科学计算的库 Python不仅可以用于研究和原型构建,同时也适用于构建生产系统 四 、数据分析过程概述 4.1 提出问题 在真正的工作场景下,往往我们需要的处理的是多个庞大的数据集还有可能是类型完全不同的数据

排序算法之冒泡排序的python实现

蹲街弑〆低调 提交于 2019-12-02 11:39:36
冒泡排序算法的工作原理如下: 1. 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3. 除了最后一个,所有的元素重复以上的步骤。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 例子图步骤如下: 冒泡排序代码实现: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "hsz" def bubble_sort(alist): # 外层循环控制比较几轮 n = len(alist) for j in range(n - 1): # 内存循环控制交换 # -j是不再换已经排好的 for i in range(n - 1 - j): # 若前一个比后一个大,则换 if alist[i] > alist[i + 1]: alist[i], alist[i + 1] = alist[i + 1], alist[i] # print(li) if __name__ == '__main__': li = [33, 11, 26, 78, 3, 9, 40] print("原来的列表:", li) bubble_sort(li) print("排序后的列表:", li) 来源:

Python数据结构二叉树及其广度优先搜索

戏子无情 提交于 2019-12-02 11:15:26
前言   关于Python编程,很多人说,Python实现不了数据结构,Python没有指针。其实,说过那句的人更应该好好学习Python。仔细阅读本文之后,读者能够使用Python实现基本的数据结构。   以下列二叉树为例   在使用二叉树的过程中,我们又常使用一些算法完成对树的遍历,比如广度优先搜索算法。 算法过程: 1.将根节点放入队列中 2.从队列中取出第一个元素,将队列中的第一个元素弹出 3.将所取得元素的全部节点加入队列中 4.判断队列是否为空 a. 若是,则结束 b.若不是,则跳到第二步   了解了二叉树和广度优先搜索算法,那么我们用Python来实现他们吧 #结点类 class Node ( ) : def __init__ ( self , data = None ) : self . data = data self . left = None self . right = None #二叉树 class Tree ( ) : def __init__ ( self ) : self . root = Node ( ) def add ( self , data ) : # 为树加入节点 node = Node ( data ) if self . root . data == None : # 如果树为空,就对根节点赋值 self . root = node