
算法和数据结构
算法和数据结构
iringzh
Accept challenges
展开
-
A* 算法求第K短路径长度
文章目录A* 算法求第K短路径简介:复杂度分析:例子:A* 算法求第K短路径简介:A*是一种搜索算法,一般基于一个估价函数f(x) = g(x) + h(x),通过这个函数来进行有方向的搜索以提高搜索的效率。其中g(x)指从初始状态到当前状态的花费,h(x)为当前状态到终状态的花费的估计值,以两者之和来估计起始状态到终状态的总花费f(x)。在A*算法中,通过优先搜索最符合要求的f(x)表示的状态以提升搜索效率。在求第k短路的问题中,g(x)指的是由起点到达当前点的路径长度,h(x)指当前点到达终点的原创 2020-11-22 21:27:14 · 1900 阅读 · 3 评论 -
Shell脚本知识点
Shell脚本一、脚本的建立和运行二、Shell程序的参数位置三、基本语法四、常见操作shell是用户和系统内核交互的程序。我们经常使用的shell是bash。下面简单的复习以下bash脚本的使用。一、脚本的建立和运行bash脚本常见的有两种运行方式:一种是输入命令让bash交互的执行它们,另一种就是将命令写入到文件中,然后将文件作为程序来调用。流程如下:1.创建shell脚本 2.赋予文件可执行权限(chomd +x shell.sh) 3.运行程序(./shell.sh)二、Shell程序原创 2020-11-16 23:43:48 · 285 阅读 · 0 评论 -
BFS之迷宫问题-输出路径
迷宫问题引言例题一(打印坐标)例题二(打印方向)引言广度优先搜索(BFS)可以很方便的去解决迷宫问题。根据广度优先搜索的特点,利用BFS得到的路径就是最短的路径。对于简单的问最短路径长度的问题。我们可以通过在表示位置的结构体中加上一个step变量,在BFS的时候逐步更新step。当到达终点的时候返回最终的step即可。而对于要打印路径问题,就需要额外的开一个数组来存放当前结点的前驱结点的信息。通过两个例子来说明一下:例题一(打印坐标)用一个二维数组表示一个迷宫,其中的1表示墙壁,0表示可以走的原创 2020-06-30 21:39:51 · 3552 阅读 · 2 评论 -
C/C++实现分数四则运算
分数四则运算分数表示注意事项代码实现这种问题主要是化简和规范问题,没有啥技巧性。通过一个结构体数组来表示一个分数:分数表示struct Fraction{ long long up,down;}注意事项需要注意的是下面三个规则:分子down大于零。若分数为负数,则令分子和分母都取相反数。若分数为0,这令分子up为0,分母down为1。分子和分母都没有除了1之外的公约数。代码实现写一遍代码熟悉一下:#include<cstdio>#include<原创 2020-05-12 00:25:08 · 1478 阅读 · 0 评论 -
Dijksta+DFS求最短路径问题
Dijkstra+DFSDijkstra+DFS思想Dijkstra实现DFS实现对于简单的求最短路径的问题,用Dijkstra算法就可以实现。当然,对于加了第二标尺的:比如:如果最短路径有多条,选择边权最小的(花费最小)或者是点权最大的(物质数目多的),也可以用Dijkstra算法,在路径相等的时候去更新第二标尺。然而,对于一些有多个标尺等更复杂的问题的时候。用Dijkstra+DFS算法。难度会降低许多。Dijkstra+DFS思想这个算法的思想是这样的:首先通过Dijkstra算法计算出最短原创 2020-05-10 23:49:45 · 1299 阅读 · 0 评论 -
一般树的遍历和图的遍历的比较
最近在做有关树的题目的时候,很多时候都会遇到要遍历树。这里就不再说关于二叉树的遍历了。具体可以参考一下另一篇博客二叉树。这里谈一下一般的树的遍历——也就是说一个结点的儿子结点的数目可以大于2。对于这种一般形式的树,常常使用邻接表来存储。也就是可以用vector<int>Adj这种形式,这就可以和图联系起来了。树和图的遍历方式都可以用深度优先搜索(DFS)和广度优先搜索(BFS)来实现...原创 2020-04-29 18:37:41 · 1455 阅读 · 0 评论 -
单源最短路径问题
单源最短路径问题概念Dijkstra算法Bellman-Ford算法概念单源最短路径问题是这样一个问题:在图中给定一个起点,求起点到其它顶点的最短距离。Dijkstra算法Dijkstra算法是用来解决边权非负的情况的。它的基本思想是设一个数组d[n]用来代表起点到其它顶点的最短距离。初始的时候d[start]为0,其它的d[i]设为无穷。然后从起点开始遍历整个图,若存在顶点u,使得d...原创 2020-04-17 22:58:54 · 454 阅读 · 0 评论 -
DAG图中的拓扑排序
拓扑排序概念思想代码应用概念DAG是指有向无环图,而拓扑排序是有向无环图的一个具体应用。拓扑排序是指将DAG图的顶点排成一个线性的序列。这个线性的序列是满足一下规则的:如果在DAG图中存在v->u,那么在这个序列中v一定是排在u的前面的思想拓扑排序在实际生活中有着广泛的应用。比如排课。如下图就是一个拓扑排序的例子:要求按照上图给出一个合理的排课序列。观察有向图的先序关系,我们...原创 2020-04-17 11:03:25 · 2417 阅读 · 0 评论 -
并查集操作
并查集并查集可以简单的看作是对集合的“合并和查找”。每一个元素都唯一属于一个集合,每一个集合都有唯一的一个根元素,来唯一标识这个集合。如何储存元素?可以用数组来存储元素,数组下标代表该元素,数组的值代表该元素的父元素。例如Father[a] = b。就代表a元素的父元素是b。如何表示根元素?规定一下,只要Father[i] = i ,则代表i为该集合的根元素。并查集的两个基本操作就...原创 2020-04-13 21:00:31 · 327 阅读 · 3 评论 -
二分及其典型应用问题
二分查找经典问题:在一个严格递增的序列中找出给定的数x二分查找的前提条件是给定的序列要是有序的。这样的话算法的一开始令[left,right]为整个序列的下标区间,然后每次测试当前[left,right]的中间位置mid=(left+right)/ 2,判断A[mid]与欲查询的元素x的大小:若A[mid]=x,则查找成功。若A[mid] > x ,则说明x在mid位置的左边,因此向...原创 2020-03-23 11:37:13 · 332 阅读 · 0 评论 -
动态规划经典题目
下面来总结一下动态规划的经典题目最大连续子序列和Given a sequence of K integers { N1, N2, …, N**K }. A continuous subsequence is defined to be { N**i, N**i+1, …, N**j } where 1≤i≤j≤K. The Maximum Subsequence is the cont...原创 2020-03-17 20:12:48 · 583 阅读 · 1 评论 -
C++大整数运算
在程序设计中,会遇到一些大整数的运算,这时候即使是long long类型也无法表示大整数。这个时候就可以用结构体来实现大整数的存储,计算等操作。大整数的基本操作大整数的存储定义一个结构体来表示#include<cstdio>#include<algorithm>using namespace std;struct bign{ int d[1000]; in...原创 2020-03-09 22:09:48 · 1882 阅读 · 0 评论 -
C++中常用的数学函数
总结一些常用的数学函数,在程序设计中经常用这些函数来实现计算操作。这些函数需要加上头函数 #include<cmath>abs(x)用法:这个函数是用来实现对整数取绝对值的操作。fabs(double x)用法:这个函数是用来实现对浮点数取绝对值的操作。pow(double x,double y)用法:用来求x的y次方,注意这里的x,y要是double型,返回的...原创 2020-03-07 21:58:24 · 906 阅读 · 0 评论 -
二叉树
二叉树的定义首先需要知道什么是树,树是一种由顶点和边构成的一种数据结构。可以这样来定义满足连通,且边数等于定点数减一的结构就是树。在一棵树中只有一个根节点,并且树中一定是不存在环的。二叉树的定义,这里给出二叉树的递归定义:要么二叉树没有根节点,是一棵空树要么二叉树是由根节点,左子树,右子树组成,且左子树和右子树又是一个二叉树树的性质树可以没有结点,这样的树叫作空树。结点的度:...原创 2020-03-04 23:24:35 · 680 阅读 · 0 评论 -
静态链表
静态链表什么是静态链表?静态链表的应用1.结点的定义2.初始化3.链表的建立4.排序5.解题什么是静态链表?大家都知道对于链表来说,构成链表的结点在内存中不是连续存放的。与之相对的是数组,数组元素在内存中是连续存放的。此外,链表的大小是可以动态改变的,而数组的大小在程序运行过程中是固定不变的。在一些程序设计题目中,结点的数目比较小,或是给出了结点的地址的话。就可以用静态链表来实现。所谓的静...原创 2020-02-23 22:20:58 · 483 阅读 · 0 评论 -
搜索专题
在算法中搜索是一个很常见的操作,比如在树的遍历,图的遍历中,都会用到搜索。在程序设计中一般有两种搜索方式:深度优先搜索和广度优先搜索。深度优先搜索是以"深度"来度量,一般通过递归来实现。而广度优先搜索则是通过"广度"来类比,通过队列来实现。无论是深度优先搜索还是广度优先搜索,都是可以通过迷宫问题来形象化。这里就不在多写,下面主要总结一下深搜和广搜的常见解题方法和代码。深度优先搜索最优解的问题...原创 2020-02-22 10:00:24 · 206 阅读 · 0 评论 -
C++中常见容器总结
C++中的STL库中有许多好用的工具,通过它们能够快速的实现数据的储存和常见的运算,下面就总结一下一些常用的容器。1. string在C++中定义了字符串容器,要用它需要在头文件中声明#include<string>并且加上 using namespace std;a)声明string str1 ="abc"; string str2 = "def"; str1 +=...原创 2019-10-29 23:16:44 · 327 阅读 · 0 评论 -
List中删除多个相同元素或全部元素的方法
最近写java代码的时候遇到了需要将List中的元素全部删除的情况,开始一股脑的就写下了如下代码:for(int i=0; i<list.size(); i++){ list.remove(i);}发现无论如何也删除不干净,仔细一想确实如此:list的大小在减小,i<list.size() 这个循环控制条件是在变化的当然是删除不完全的。下面给出两种删除方法,对于删除list...原创 2019-06-13 18:47:04 · 8914 阅读 · 0 评论 -
java实现十六进制转十进制
写了两种十六进制转十进制的方式,仅供参考。基本思路:用十六进制中每一位数乘以对应的权值,再求和就是对应的十进制方法一:/** * @param: [content] * @return: int * @description: 十六进制转十进制 */ public static int covert(String content){ ...原创 2019-06-16 22:29:59 · 63758 阅读 · 11 评论 -
PAT 1001 A+B Format(20 points(s))
**1001 A+B Format (20 point(s))**Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless ...原创 2019-06-30 08:13:20 · 156 阅读 · 0 评论 -
1002 A+B for Polynomials (25 point(s)) 多项式加法
1002A+B for Polynomials(25point(s))This time, you are supposed to findA+BwhereAandBare two polynomials.Input Specification:Each input file contains one test case. Each case occupies 2 l...原创 2019-06-29 22:41:37 · 347 阅读 · 0 评论