![](https://img-blog.csdnimg.cn/20200510194555518.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Python数据结构
文章平均质量分 84
Python语言实现各类数据结构
3Sunremitting
优秀是一种习惯,堕落也是一种习惯
展开
-
NP问题以及一些相关知识
之前介绍过BFS,BFS可以用来找出所用段数最少的路径。但是,如果路径有权值,想要找出最快路径,据需要用到迪杰斯特拉算法,该算法找出的是总权重最小的路径。即:如果要计算非加权图的最短路径,可以使用广度优先遍历;要计算加权图的最短路径,可以使用迪杰斯特拉算法。但是,有一点需要注意,迪杰斯特拉算法只适用于正权重的有向无环图。如果有负权边,可以使用贝尔曼-福德算法。贪心算法:每步都选择局部最优解,最终得到的就是全局最优解的方法就是贪心算法。NP问题:如旅行商问题和集合覆盖问题。NP问题的求解.原创 2020-06-08 15:44:53 · 1065 阅读 · 0 评论 -
BFS(广度优先搜索来啦)
一、BFS简介二、BFS解决问题三、代码实现一、BFS简介BFS即breadth-first search,又称为宽度优先搜索,是最简便的图的搜索算法之一,它是使用队列来实现的。已知图G=(V,E)和一个源顶点s,宽度优先搜索以一种系统的方式探寻G的边,从而“发现”s所能到达的所有顶点,并计算s到所有这些顶点的距离(最少边数),该算法同时能生成一棵根为s且包括所有可达顶点的宽度优先树。对从s可达的任意顶点v,宽度优先树中从s到v的路径对应于图G中从s到v的最短路径,即包含最小边数的路径。该算法对有原创 2020-06-07 22:05:00 · 110 阅读 · 0 评论 -
说说哈希表/散列表
哈希表和散列表是一个东西,只是叫法不同而已。以下统一称呼为哈希表。刚刚学习哈希表的时候,我其实对它的了解不是很深入,只知道它是一种key对应value的复杂数据结构。其实,哈希表包括的内容有很多。哈希表是由哈希函数和数组组成的。哈希函数用来产生 key值,它的主要功能是把输入映射到数字。通过哈希函数,可以把字符串或者其他类型的key值映射为数组的下标 index。哈希函数必须满足以下特征:1、它必须是一致的。假设哈希函数的输入是 "apple"时得到的是4,那么每次输入"a...原创 2020-06-05 21:17:21 · 2771 阅读 · 0 评论 -
对递归的一些了解
递归指的是一个函数调用自己的函数,递归可以让问题的解决方案更清晰,但是递归并没有性能上的优势。在编写递归时,要告诉程序何时停止递归。正因为如此,每个递归函数都有两个部分:基线条件(base case)和递归条件(recursive case) 。递归条件指的是函数调用自己,而基线条件则指函数不再调用自己,从而避免形成无限循环。如下程序所示:def countdown(i): print i if i <= 1: # 基线条件 return els原创 2020-06-05 18:12:10 · 140 阅读 · 0 评论 -
用最大堆实现最大优先队列(Python)
超详细注解,让你更好的理解算法过程原创 2020-05-15 12:02:40 · 296 阅读 · 1 评论 -
二叉堆的创建以及上浮下沉操作(Python)
用Python实现二叉堆的创建、上浮及下沉操作,超详细注解原创 2020-05-14 22:46:03 · 434 阅读 · 0 评论 -
用队列实现二叉树的层序遍历(即广度优先遍历)(Python)
from queue import Queueclass TreeNode: def __init__(self,data): self.data=data self.left=None self.right=Nonedef create_binary_tree(input_list=[]): if input_list is None or len(input_list)==0: return None data原创 2020-05-10 22:14:42 · 336 阅读 · 0 评论 -
利用Python实现链表
class Node: ''' 相当于C语言中的结构体,定义了一个结点类型 ''' def __init__(self,data): self.data=data self.next=None # 初始化为None,如果后面不赋新值则一直为Noneclass LinkedList: ''' __init__(self):属于类的构造函数或者初始化方法,每当创建一个这种类 的实例,这个函数就会被执行一次 '''原创 2020-05-08 22:05:16 · 166 阅读 · 0 评论 -
利用Python实现循环队列
class MyQueue: def __init__(self,capacity): self.list=[None]*capacity #队列容量为capacity self.front=0 self.rear=0 def enqueue(self,element): if (self.rear+1)%len(self.list)==self.front: raise Exception('队列已满原创 2020-05-08 23:34:59 · 369 阅读 · 0 评论 -
利用递归实现二叉树的前中后序遍历(Python)
class Treenode: def __init__(self,data): self.data=data self.left=None self.right=Nonedef create_binary_tree(input_list=[]): if input_list is None or len(input_list)==0: return None data=input_list.pop(0) #每次把列原创 2020-05-09 23:56:06 · 137 阅读 · 0 评论 -
栈和队列的简单介绍
栈是一种线性数据结构,属于先入后出(FILO),栈的栈底和栈顶是有区分的,最早进入的元素存放的位置叫做栈底(bottom),最后进入的元素存放的位置叫做栈顶(top)。栈这种数据结构既可以用数组来实现,也可以用链表来实现。在Python中,列表很好的实现了栈的功能,append方法相当于入栈,pop方法相当于出栈。队列是一种线性数据结构,属于先入先出(FIFO),队列的出口叫队头(front),队列的入口叫队尾(rear)。既可以用数组来实现,也可以用链表来实现。但是用数组实现时,把队尾位置规定为最后原创 2020-05-08 23:07:33 · 217 阅读 · 0 评论