python数据结构与算法
LBJgs
兴趣广泛但无一精通。
展开
-
python数据结构与算法-二叉搜索树
二叉搜索树 二叉搜索树是一颗二叉树且满足性质:设x是二叉树的一个节点。如果y是x左子树的一个节点,那么y.key <= x.key; 如果y是x右子树的一个节点,那么y.key >= x.key 二叉搜索树的操作:查询、插入、删除 ...原创 2021-07-01 21:00:53 · 132 阅读 · 0 评论 -
Python数据结构与算法-链表
1> P57.链表介绍 链表是由一系列节点组成的元素集合。每个节点由两部分组成,数据域item和指向下一个节点的指针next。通过节点之间的相互连接,最终串联成了一个链表。 class Node: def __init__(self,item): self.item = item self.next = None a = Node(1) b = Node(2) c = Node(3) a.next = b b.next = c print(原创 2021-06-06 16:35:15 · 204 阅读 · 1 评论 -
Python数据结构与算法-数据结构
1. 介绍数据结构的概念 数据结构是指相互之间存在着一种或者多种关系的数据元素的集合和该集合中数据元素之间的关系组成; 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机; 比喻:列表、集合、字典等都是一种数据结构; “程序=数据结构+算法”。 2. 数据结构的分类 数据结构按照其逻辑结构可分为线性结构、树结构、图结构 线性结构:数据结构中的元素存在一对一的相互关系 树结构:数据结构中的元素存在着一对多的相互关系 图结构:数据结构中的元素存在着多对多的相互关系 3. 数据结构常用的几种类型&原创 2021-06-05 10:22:21 · 283 阅读 · 0 评论 -
Python数据结构与算法-堆排序
1. 树与二叉树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果n为0,那么这是一棵空树; 如果n>0,那存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。 2. 一些概念: 根节点、叶子节点: 树的深度(高度):也可以说层数,为4层 树的度:某个节点最多分叉的个数,为6 孩子节点 / 父节点 子树:部分拿出来的;可理解为树杈 3. 认识二叉树: 二叉树:度不超过2的树 每个节点最多有两个孩子节点 两原创 2021-03-29 18:52:23 · 141 阅读 · 0 评论 -
Python数据结构与算法-快速排序
快速排序 快速排序:快 快速排序思路: 取一个元素p(默认第一个元素),使元素p归位; 列表被p分成两部分,左边都比p小,右边都比p大; 如果这里把5看着是取得第一个元素;目的就是将5放在正确的序号位置,为了达到这个目的,在上下箭头指向同一个方框的时候,完成!! 顺着上述思路,我们考虑快速排序的框架 def quick_sort(data,left,right):#这儿的data指列表;left和right为位置对应的下标 if left < right: mid = pa原创 2021-03-23 14:17:31 · 106 阅读 · 0 评论 -
Python数据结构与算法-插入排序
初始时手里(有序区)只有一张牌 每次(从无序区)摸一张牌,插入到手里已经有牌的正确位置原创 2021-03-22 18:52:47 · 71 阅读 · 0 评论 -
Python数据结构与算法-选择排序
选择排序(Selection sort): 基本思想:首先在没有排序的数列中找到最小的元素,然后将其存放在数列的其实位置;接着,再从剩余没有排序的元素中继续寻找最小的元素,然后放在已排序序列的末尾。以此类推,直到所有元素均排序完毕。 以数列[20,40,30,10,60,50]为例,演示它的选择过程(如下) 1.一般代码实现: def Select_sort_sample(li): new_list=[] for i in range(len(li)-1):#len(li)-1次遍历该li min原创 2021-03-16 20:25:54 · 109 阅读 · 0 评论 -
Python数据结构与算法-列表排序
**排序:**将一组“无序”的记录序列调整为“有序”的记录序列 **列表排序:**将无序列表变为有序列表 输入:列表 输出:有序列表 升序与降序 **内置排序函数:**sort() 常见排序算法 1. 冒泡排序(Bubble Sort) 列表中每两个相邻的数,如果前面比后面的大,则交换这两个数 一趟排序完成后,则无序区减少一个数,有序区增加一个数。 代码关键点:趟、无序区范围 2. 冒泡算法 import random def bubble_sort(li): for i in range(l原创 2021-03-16 16:27:27 · 129 阅读 · 0 评论 -
Python数据结构与算法-二分法查找
** 二分查找: ** 又叫折半查找,从有序列表的初始候选区list1[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半 从列表中查找元素3: 排好序,找出中间值mid=(left+right)/2 mid与val进行比较,如果mid>val,则此时的搜索范围(left,mid),然后移动right,让right=mid-1 之后就可以循环啦,计算新的mid,用新mid与val进行比较,以此类推。 接下来写入测试代码 def binary_search(list1,val原创 2021-03-16 11:10:15 · 153 阅读 · 0 评论 -
Python数据结构与算法-顺序查找
查找 在一些数据元素中,通过一定的方法找出与既定 关键字相同的数据元素的过程 列表查找:在列表总查找指定的元素 输入:列表、待查找元素 输出:元素下标(未找到元素是一般返回None或-1) 内置列表查找函数:index() 顺序查找(Linear Search):也叫线性查找,从列表的第一个元素开始,顺序搜索,直到找到元素或者搜索到列表最后的一个元素为止 #li为列表 #val为待查找元素 #index 为索引 def linear_search(li,val): for index,value in e原创 2021-03-15 22:14:53 · 188 阅读 · 0 评论 -
Python数据结构与算法-汉诺塔问题
递归实例:汉诺塔问题 汉诺塔由来 只有两个圆盘时 n=2时: 1. 把小盘从A移动到B 2. 将大盘从A移动到C 3. 将小盘从B移动到C n个盘子时: (这个过程中,我们把圆盘共分为两部分,把上面的n-1个圆盘看作是一个整体,最下面一个看作另外一部分) 把上面的n-1个圆盘从A经过C移动到B 把最下的圆盘移动到C 把上面的n-1个圆盘从B经过A移动到C 代码实现 def hanoi(n,a,b,c): if n>0: hanoi(n-1,a,c,b) print("movin原创 2021-03-15 19:00:06 · 145 阅读 · 0 评论 -
Python数据结构与算法-时间/空间复杂度
数据结构 什么是算法:一个计算过程,解决问题的方法 体现算法运行的快慢? 运行时间:电脑的运行速度不一样 时间复杂度 顺着上述的思维,我们来看接下来的例子 为什么会出现这样的情况呢? 因为3不是单位,1才是;同理后面的复杂度也应该记为O(n2) 再来看下一个例子 时间复杂度-小结: 时间复杂度是用来估计算法运行时间的一个式子 一般来说,时间复杂度高的算法比时间复杂度低的算法慢 常见的时间复杂度(按效率排序) 复杂问题的时间复杂度 ...原创 2021-03-15 10:47:56 · 161 阅读 · 0 评论