算法与数据结构
文章平均质量分 92
hresh
这个作者很懒,什么都没留下…
展开
-
动态规划学习(Python)
前言动态规划的三要素:最优子结构,边界和状态转移函数,最优子结构是指每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到(子问题的最优解能够决定这个问题的最优解),边界指的是问题最小子集的解(初始范围),状态转移函数是指从一个阶段向另一个阶段过度的具体形式,描述的是两个相邻子问题之间的关系(递推式)。重叠子问题,对每个子问题只计算一次,然后将其计算的结果保存到一个表格中,每一次需要上一...原创 2019-07-10 11:18:54 · 1001 阅读 · 2 评论 -
Python 回溯法 子集树模块系列——八皇后问题
概述DFS 思想:一直往深处走,直到找到解或者走不下去为止。深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义,深度优先,则是以深度为准则,先一条路走到底,直到达到目标。这里称之为递归下去。否则既没有达到目标又无路可走了,那么则退回到上一步的状态,走其他路。这便是回溯上来。实例分析案例:八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后...原创 2019-07-02 19:27:29 · 1003 阅读 · 0 评论 -
Python 对 BFS(广度优先算法)讲解
概述BFS 算法像是近视的小明的眼镜掉在了地上,小明肯定是先摸索离手比较近的位置,然后手慢慢向远方延伸,直至摸到眼镜,像是以小明为中心搜索圈不断扩大的过程。通常用队列(先进先出,FIFO)实现初始化队列Q;Q = {起点s};标记s为已访问;while(Q非空): 取Q队首元素u;u出队; if u == 目标状态 {...} 所有与u相邻且未被访问的点进入队列;......原创 2019-07-02 19:26:42 · 6261 阅读 · 1 评论 -
Python 实现二叉搜索树(BST)
前言二叉搜索树(Binary Search Tree)是一种特殊的二叉树,支持多种动态集合操作,如 Search、Insert、Delete、Minimum 和 Maximum 等。二叉查找树要么是一棵空树,要么是一棵具有如下性质的非空二叉树:若左子树非空,则左子树上的所有结点的关键字值均小于根结点的关键字值。若右子树非空,则右子树上的所有结点的关键字值均大于根结点的关键字值。左、右子...原创 2019-07-30 20:54:10 · 5253 阅读 · 3 评论 -
Python 与二叉堆
什么是二叉堆二叉堆(binary heap)是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。当父节点的键值总是大于或等于任何一个子节点的键值时为“最大堆”。当父节点的键值总是小于或等于任何一个子节点的键值时为“最小堆”。构建二叉堆二叉堆一般用数组来表示。如果根节点在数...原创 2019-07-24 20:26:05 · 290 阅读 · 0 评论 -
Python 判断两个单链表的交点
前言在前面两章有介绍过单链表的基本操作以及有环链表的相关问题。本章主要分析两个单链表的交点问题。首先声明,两个单链表只能存在 Y 型交叉,不会存在 X 型交叉。因为如果是 X 型交叉,节点在交叉点之后便不知道 next 指针指向为哪一个节点。实战分析判断单链表是否相交存在三种情况:两个单链表都没有环。两个单链表中 一个有环,一个没有环。两个链表都有环。情况1...原创 2019-07-21 16:38:12 · 1012 阅读 · 0 评论 -
Python 判断链表中是否有环,且找出环的入口节点
概述单向链表链表中最简单的一种是单向链表,它包含两个域,一个信息域和一个指针域。这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值。一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接一个单向链表的节点被分成两个部分。第一个部分保存或者显示关于节点的信息,第二个部分存储下一个节点的地址。单向链表只可向一个方向遍历。循环链表在一个 循环链表中, 首节点和末节点被连...原创 2019-07-20 00:23:25 · 1368 阅读 · 0 评论 -
Python 实现单链表
前言数据结构中的线性表:分为顺序表和链表。线性表线性表(Linear List)是由 n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1]组成的有限序列。其中:数据元素的个数 n 定义为表的长度 = “list”.length() (“list”.length() = 0(表里没有一个元素)时称为空表)将非空的线性表(n>=1)记作:(a[0],a[1],...原创 2019-07-18 22:19:52 · 321 阅读 · 0 评论 -
Python 实现拓扑排序
什么是拓扑排序在计算机科学领域,有向图的拓扑排序是其顶点的线性排序,使得对于从顶点 u 到顶点 v 的每个有向边 uv,u 在排序中都在 v 之前。例如,图形的顶点可以表示要执行的任务,并且边可以表示一个任务必须在另一个任务之前执行的约束;在这个应用中,拓扑排序只是一个有效的任务顺序。如果且仅当图形没有定向循环,即如果它是有向无环图(DAG),则拓扑排序是可能的。任何 DAG 具有至少一个...原创 2019-07-17 22:27:25 · 1871 阅读 · 2 评论 -
回溯详解以及与 DFS 算法的关联
概述回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题。通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量)。深度优先搜索(Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到...原创 2019-08-10 22:25:03 · 5670 阅读 · 0 评论