数据结构与算法
还是少年呀
就读于电子科技大学计算机学院
展开
-
NFA转换为DFA--python实现
1.任务将无Epsilon的NFA转换为DFA。对于有Epsilon的NFA可以先将其转换为无Epsilon的NFA,具体做法可以参考博客:将Epsilon-NFA转换为NFA–python实现2.主要思路首先计算初始状态的Epsilon闭包,然后根据状态转换表更新,计算能到达的状态的Epsilon闭包,直到最终无新的状态产生。具体的思路参考[1]中的下图:3.代码实现"""Construct and output an equivalent DFA. The input is gu原创 2020-11-18 20:06:14 · 2789 阅读 · 0 评论 -
将Epsilon-NFA转换为NFA--python实现
1.任务要求从具有epsilon的不确定有限状态自动机(NFA)得到一个无Epsilon 的NFA。2.思路Epsilon-NFA到NFA的目标主要是产生一个没有Epsilon边的,跟原状态图等价的新状态图。过程不复杂,首先从起始状态开始,寻找所有Epsilons边到达的对象的集合,然后复制这个集合的所有状态包含的非Epsilon状态。其实状态做完之后,寻找所有能够产生非Epsilon边的状态然后重复这个过程,最后NFA就出来了。其本质就是使用无Epsilon的状态转换函数中的条件去替换有Epsil原创 2020-11-18 16:26:54 · 1441 阅读 · 0 评论 -
线性同余方程求解
一、问题描述解方程 13x=6(mod 34) (1)对该方程求解的步骤为先求特解,再乘以系数得到通解:步骤1:13x+34y=1,得到x的所有取值使得等式右端的值为1。步骤2:对上述方程的左右两端同时乘以6,然后系数13和34不变,用新的x代替原始的x,即得到方程(1)的通解。二、特解的求取贝祖定理: 即如果a、b是整数,那么一定存在整数x、y使得ax+by=gcd(a,b)。换句话说原创 2020-09-17 21:43:47 · 4374 阅读 · 0 评论 -
Leetcode 032 最长有效括号python实现
Leetcode 032 最长有效括号一、题目描述题目描述:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例1:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”实例2:输入: “())()”输出: 2解释: 最长有效括号子串为 “()”二、解法1.动态规划思路 :将"(“对应位置的值置为0,遇见右括号才进行更新情况1:当s[i]=”)" and s[i-1]="(",即s形如“…()”的时候:dp[i] = dp[原创 2020-07-23 15:39:02 · 288 阅读 · 0 评论 -
多路查找树
多路查找树(muitl-way search tree),其每一个节点的孩子数可以多于两个,且每一个节点处可以存储多个元素。主要有4中特殊形式。一、2-3树定义:其中的每一个节点都具有两个孩子(称为2节点)或者三个孩子(称为3节点)。 并且2-3树中所有的叶子都在同一层上。一个2节点包含一个元素和两个孩子(或者没有孩子)。一个3节点包含一小一大两个元素和三个孩子(或者没有孩子)。 ...转载 2019-10-24 11:04:13 · 442 阅读 · 0 评论 -
平衡二叉树
本文转载自:https://blog.csdn.net/isunbin/article/details/81707606 一、AVL树简介AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。平衡二叉树...转载 2019-10-23 17:31:36 · 556 阅读 · 0 评论 -
归并排序递归实现
代码#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 10//实现归并,并将最后的数据放入到list1中void merging(int *list1,int list1_size,int *list2, int list2_size){ int i,j,k,n,temp[MAX_SIZE...原创 2019-10-23 10:15:07 · 264 阅读 · 0 评论 -
图的邻接表
由于边数较少时,采用邻接矩阵存储图会浪费大量的空间。因此考虑把数组与链表结合在一次来存储,并提出了邻接表的概念。关于无向图的邻接矩阵存储可参考我的上一篇博客。邻接表的处理方式:1.图中顶点用一个一维数组存储,当然,顶点也可用单链表存储,不过数组可以更加方便地读取顶点信息。2.图中每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以选择用单链表来存储。无向图邻接表结构如下图...原创 2019-10-19 16:42:30 · 799 阅读 · 0 评论 -
图的邻接矩阵
邻接矩阵就是使用一个一维数组来存储图的顶点,使用一个二维数组来存储边。对于无向图来说,存储边信息的二维数组(方阵)是一个对称矩阵;而对于有向图来说,存储边信息的二维数组是一个方阵。根据二维数组中的坐标可以知道这两个顶点是否连接以及边的权值。无向图,某个顶点Vi的度,就是此顶点在第i行(列)的边数之和;对于有向图则需要考虑顶点入度和出度。无向图的邻接矩阵代码实现:#include <s...原创 2019-10-19 13:03:16 · 1098 阅读 · 0 评论 -
堆排序的代码实现
利用大顶堆(小顶堆)的根节点记录最大数值(最小数值)的特性,可以对数值进行排序现以大顶堆的基本思想为例:1、将int 数组arr[1,…,n]构造为大顶堆,实现函数为heapadjust();2、可得大顶堆的根节点,即arr[1]的数值为最大数值,然后将该值与arr[n]互换。3、对数组arr[1,…,n-1]构造为大顶堆并将arr[1]与arr[n-1]互换,直到n-1为2停止互换,堆排...原创 2019-10-18 11:24:29 · 1401 阅读 · 0 评论 -
树,森林和二叉树之间的转换
本文转载自大佬的博客:https://www.cnblogs.com/zhuyf87/archive/2012/11/04/2753950.html树、森林和二叉树的转换 树转换为二叉树(1)加线。在所有兄弟结点之间加一条连线。(2)去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。(3)层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定角度...转载 2019-10-11 21:32:06 · 188 阅读 · 0 评论 -
二叉树的建立和遍历
二叉树的遍历有:前序遍历,中序遍历和后序遍历,区别只是根节点的访问顺序不同。现使用C语言建立二叉树,并输出每个元素所在的层数,二叉树的结构如下:...原创 2019-10-11 16:00:23 · 850 阅读 · 2 评论 -
使用python实现约瑟夫环
约瑟夫环,通俗的讲就是n个人围着圆桌坐一圈,从第m个人开始从1报数,报数到k数的人出局,之后的人又从1开始报数,直到所有人都出局。以下代码为python模拟约瑟夫环出局人员的序号顺序:人数有30人,从第一个人的位置开始报数,数到9则出局,之后又从1开始报数,达到出局人数时结束。# 约瑟夫环people={}for x in range(1,31): people[x]=1che...原创 2019-10-07 20:01:59 · 1905 阅读 · 0 评论 -
KMP,BM,Sunday算法详解
此文转自大神的博客: http://blog.csdn.net/v_july_v/article/details/7041827# 从头到尾彻底理解KMP 作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反...转载 2019-10-05 19:27:00 · 558 阅读 · 0 评论