数据结构--python
数据结构--python
Chasing__Dreams
这个作者很懒,什么都没留下…
展开
-
python--数据结构--红黑树
1. 红黑树此处只讲了插入操作,未讲删除操作2. 红黑树与平衡二叉树的区别RB-Tree和AVL树作为BBST,其实现的算法时间复杂度相同,AVL作为最先提出的BBST,貌似RB-tree实现的功能都可以用AVL树是代替,那么为什么还需要引入RB-Tree呢?1、红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact| <= 1,它只要求部分达到平衡,但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内转载 2020-10-14 16:31:05 · 768 阅读 · 0 评论 -
python--数据结构--部分背包
有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情况下让总价值尽量高。每一个物体都可以只取走一部分,价值和重量按比例计算。求最大总价值注意:每个物体可以只拿一部分,因此一定可以让总重量恰好为C# knapsack_part.pyfrom collections import dequefrom typing import List, Tupledef knapsack_part(w_vs: List[Tuple[int, int]], heavy: int): """原创 2020-09-02 16:51:14 · 578 阅读 · 0 评论 -
python--数据结构--回溯算法
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。来源回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。用回溯算法解决问题的一般步骤:1、原创 2020-09-02 15:03:51 · 354 阅读 · 0 评论 -
python--数据结构--动态规划
1. 定义:动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式去解决。决策变量是随着状态变量变化而变化,因此决策是动态的。最终的全局最优解是规划出来的。使用动态规划需满足无后效性,即某阶段的状态一旦确定,则此后过程的演变不再受此前各种状态及决策的影响。对无后效性的解释具体看https://blog.csdn.net/Chasing__Dreams/article/details/108316722类似于高中数学中的数列,可以说是魔改版数列。高中的题一般需先推导出状态原创 2020-09-01 21:22:36 · 510 阅读 · 0 评论 -
python--数据结构--5种常用算法
1. 引言据说有人归纳了计算机的五大常用算法,它们是贪婪算法,动态规划算法,分治算法,回溯算法以及分支限界算法。虽然不知道为何要将这五个算法归为最常用的算法,但是毫无疑问,这五个算法是有很多应用场景的,最优化问题大多可以利用这些算法解决。算法的本质就是解决问题。当数据量比较小时,其实根本就不需要什么算法,写一些for循环完全就可以很快速的搞定了,但是当数据量比较大,场景比较复杂的时候,编写for循环就是一个很不明智的方式了。一是耗时,二是写出的代码绝对是天书。当然还有第三点,这点也是最重要的,写代码是一种原创 2020-08-31 17:42:51 · 839 阅读 · 0 评论 -
python--数据结构--KMP_字符串匹配
# kmp_str_match.pyfrom array import arrayfrom collections import dequedef next_pattern(pattern): """ 计算模式串的next_数组 next_数组下标: 前缀的下一个位置 next_数组元素: 前缀的最长可匹配前缀的下一个位置 主串: 将模式串作为主串 模式串: 模式串本身原创 2020-08-29 17:26:42 · 262 阅读 · 1 评论 -
python--数据结构--打印杨辉三角形
代码实现:# yang_hui_triangle.pyfrom collections import dequedef yang_hui_triangle(row_num: int = 10, max_decimal: int = 3): seq_que = deque() seq_que.append(1) # 将第1行的元素入队 for i in range(2, row_num+1): # 产生第i行元素并入对,同时打印第i-1行的元素 pr...原创 2020-08-29 10:30:23 · 519 阅读 · 0 评论 -
python--数据结构--系数三元组_一次定位快速转置法
# transpose_TSMatrix.pyfrom collections import namedtuple, dequefrom typing import Listfrom array import arrayTriple = namedtuple("Triple", "row col value")class TripletTable: def __init__(self, triplet_list: List[Triple], row_num: int, ...原创 2020-08-28 20:53:00 · 784 阅读 · 1 评论 -
python--数据结构--外部排序
[引用《数据结构–用C语言描述 耿国华版》]原创 2020-08-28 18:32:17 · 375 阅读 · 0 评论 -
python--数据结构--内部排序基本算法
常用内部排序基本算法:插入类排序直接插入类排序折半插入类排序希尔排序交换类排序冒泡排序快速排序选择类排序简单选择排序树形选择排序堆排序归并排序分配类排序多关键字排序链式基数排序...原创 2020-08-28 16:18:38 · 146 阅读 · 0 评论 -
python--数据结构--链式基数排序
代码实现# radix_sort.pyfrom collections import dequefrom typing import Listclass Record: def __init__(self, key): self.key = deque(list(str(key))) self.other_info = Noneclass Records: def __init__(self, record_list: List[...原创 2020-08-28 16:10:03 · 733 阅读 · 1 评论 -
python--数据结构--归并排序
# merge_sort.pyfrom collections import dequefrom typing import Listclass Record: def __init__(self, key): self.key = key self.other_info = Noneclass Records: def __init__(self, record_list: List[Record]): self.reco..原创 2020-08-28 12:25:43 · 132 阅读 · 0 评论 -
python--数据结构--简单快速排序、堆排序
# select_type_sort.pyfrom collections import dequefrom typing import Listclass Record: def __init__(self, key): self.key = key self.other_info = Noneclass Records: def __init__(self, record_list: List[Record]): ...原创 2020-08-27 17:45:59 · 183 阅读 · 0 评论 -
python--数据结构--冒泡排序、快速排序
代码实现:# change_type_sort.pyfrom collections import dequefrom typing import Listclass Record: def __init__(self, key): self.key = key self.other_info = Noneclass Records: def __init__(self, record_list: List[Record]):...原创 2020-08-27 11:19:56 · 226 阅读 · 0 评论 -
python--数据结构--直接插入类排序、折半插入排序、希尔排序
代码实现:# insert_type_sortfrom collections import dequefrom typing import Listclass Record: def __init__(self, key): self.key = key self.other_info = Noneclass Records: def __init__(self, record_list: List[Record]): ...原创 2020-08-27 08:25:52 · 359 阅读 · 0 评论 -
python--数据结构--查找的基本方法
查找的基本方法:比较式查找:基于线性表的查找法:顺序查找法折半查找法分块查找法基于树的查找发:二叉排序树平衡二叉排序树B树计算式查找:哈希查找法原创 2020-08-26 15:11:40 · 186 阅读 · 1 评论 -
python--数据结构--哈希查找
代码实现:# search_hash_table.pyfrom collections import dequeimport mathclass Record: def __init__(self, key): self.key = key self.other_info = Noneclass HashTable: def __init__(self, table_len): self.table = ...原创 2020-08-26 15:10:49 · 629 阅读 · 0 评论 -
python--数据结构--B树
代码实现# search_mb_tree.pyfrom collections import dequeimport mathm = 3# m = 4class MbtNode: def __init__(self): self.parent = None self.key_num = 0 self.keys = deque() self.sub_trees = deque() #...原创 2020-08-26 10:22:31 · 794 阅读 · 0 评论 -
python--数据结构--平衡二叉排序树
平衡二叉排序树又称AVL树。一棵平衡二叉排序树或者是空树,或者是具有下列性质的二叉排序树:左子树与右子树的高度之差的绝对值小于等于1;左子树和右子树也是平衡二叉排序树。引入平衡二叉排序树的目的,是为了提高查找效率,其平均查找长度为O(log₂n)。结点的平衡因子定义为:结点的左子树深度与右子树深度之差。显然,对一颗平衡二叉排序树而言,其所有结点的平衡因子只能是-1、0或1。当在一个平衡二叉排序树上插入一个结点时,可能导致失衡,即出现绝对值大于1的平衡因子,如2、-2。一般情况下,只有新插入结原创 2020-08-23 18:14:12 · 566 阅读 · 0 评论 -
python--数据结构--顺序查找法、折半查找法
# search_linear_table.pyfrom collections import dequeclass Recode: """记录类型""" def __init__(self, key, other_info=None): self.key = key self.other_info = other_infoclass RecodeList: """记录列表类型""" def __init__(self, reco原创 2020-08-23 10:39:32 · 919 阅读 · 0 评论 -
python--数据结构--二叉排序树
# search_bs_tree.py"""二叉排序树又称为二叉查找树,它是一种特殊的二叉树。其定义为:二叉树排序树或者时一棵空树,或者是具有如下性质的二叉树。 (1) 若它的左子树非空,则左子树上所有结点的值均小于根结点的值。 (2) 若它的右子树非空,则右子树上所有结点的值均大于(或大于等于)根结点的值。 (3) 它的左右子树也分别为二叉排序树。"""from collections import dequefrom matplotlib import pyplo原创 2020-08-23 10:29:22 · 960 阅读 · 0 评论 -
python--数据结构--邻接表
# adj_list.py"""邻接表:class VertexNode: 顶点结点类:class ArcNode: 弧结点类:class AdjList: 邻接表类:method locate_vertex: 查找某个顶点结点在AdjList对象中的成员vertexs列表中的下标:method create_adj_list: 创建一个邻接表对象depth_first_search_recursion: 深度优先递归遍历depth_first_search_nonrecu原创 2020-08-21 18:10:51 · 2251 阅读 · 1 评论 -
python--数据结构--邻接矩阵
adj_matrix.py"""邻接矩阵:class VertexNode: 顶点结点类:class ArcNode: 弧结点类:class AdjMatrix: 邻接矩阵类:method create_adj_matrix: 创建一个邻接矩阵对象:method depth_first_search_recursion: 深度优先递归遍历:method depth_first_search_nonrecursion: 深度优先非递归遍历:method breadth_firs原创 2020-08-21 18:06:20 · 4938 阅读 · 0 评论 -
python--数据结构--并查集
# mf_setfrom typing import List, Sequenceclass TNode: def __init__(self, data, parent: int): self.data = data self.parent = parentclass SeqList: # S def __init__(self, elem: List): self.elem = elem self.last原创 2020-08-20 09:19:44 · 175 阅读 · 0 评论 -
python--数据结构--哈夫曼树、哈夫曼编码
# HuffmanBiTree.pyfrom matplotlib import pyplot as pltimport hashlibclass HTNode: def __init__(self, value=None, weight=0, parent=None, left_child=None, right_child=None): self.value = value self.weight = weight self.parent原创 2020-08-15 16:17:48 · 591 阅读 · 0 评论 -
python--数据结构--二叉树
1. 二叉树结构可视化思路为了避免重合,二叉树左右子树的距离是关键让每一个节点占用一个列空间,这样就不会重合了所以左节点与父节点在X轴上的距离为 左节点 的 右子树宽度+1 乘以一个水平距离常数右节点与父节点在X轴上的距离为 右节点 的 左子树宽度+1 乘以一个水平距离常数 每当画好一个节点点,确定其左右孩子在X轴上的距离,再画这个节点连接孩子的边from matplotlib import pyplot as pltclass Node(object): """二叉树节原创 2020-08-08 17:50:11 · 433 阅读 · 1 评论 -
python--数据结构--0--算法思考
对于学习一个新算法,应该从以下几方面思考:算法解决了什么问题存储结构逻辑结构算法思想代码时间复杂度空间复杂度原创 2021-03-20 14:43:30 · 166 阅读 · 0 评论