
算法和数据结构
文章平均质量分 51
此专栏主要为算法和数据结构方面的知识
如果大雪封门
地质大学搞计算机
展开
-
中缀表达式转前缀表达式理论+java代码
中缀表达式转换成前缀表达式和后缀表达式的极其简单方法import java.util.Arrays;import java.util.Scanner;import java.util.Stack;/* * 关于算术表达式的计算 * 中缀表达式转前缀表达式求解 * ( 3 + 4 ) × 5 - 6 * 输入一个等式操作数与操作符用空格隔开 * */public class ClassA { //定义所有的操作符及其优先级 static String opp = ")+-*/(";原创 2021-04-15 20:52:32 · 263 阅读 · 0 评论 -
二分算法详解-------整数二分(java实现)
二分算法主要分为整数二分和浮点数二分。 在处理有关于二分的问题时,所给数组是否满足单调性,只是我们选择使用二分算法的一个充要条件。在解答关于二分的问题时,一个非常重要的步骤便是关于分界点的判断。以下笔者对着两个算法做出详细的分析一.整数二分1.算法的基本思想我们给以将所给区间划分成两个部分,一部分满足某种性质,另一部分不满足该性质。如何找出这个分界点?这个时候便要用到二分的思想。(1).mid值什么时候为(L+R+1)/2什么时候是(L+R)/2?在写二分查找算法时,我们首先写check函数,当发原创 2021-04-01 21:17:26 · 501 阅读 · 0 评论 -
LeetCode面试题16.19 水域大小
面试题 16.19. 水域大小题目描述:你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。示例:输入:[[0,2,1,0],[0,1,0,1],[1,1,0,1],[0,1,0,1]]输出: [1,2,4]提示:0 < len(land) <= 10000 < len(lan原创 2021-03-31 15:35:06 · 173 阅读 · 0 评论 -
递归入门 ----- 三类基本递归问题
一.递归的概述1.什么是递归?程序调用自身的编程技巧称为递归( recursion)。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 ---- 百度百科2.递归求解的一般思路当我们对一个问题进行递归求解时,必然需要明确其递归式。而递归式又由两个重要的部分组成,一是递归出口,而是递归关系。 而解决递归问题的突破口正在于此。下文将介绍几种基础的递归问题及求解思路。二.数列问题1.给定数列:1,3,5,7,9 … 请你利用递归求该原创 2020-08-21 23:32:32 · 1175 阅读 · 0 评论 -
深度优先搜索(DFS) ----- 递归与非递归写法及DFS拓展
一.DFS概述1.Depth First Search 是遍历图的常用方法之一,它类似于与数的先根遍历,是数的先根遍历的推广。DFS的基本实现思想是从图中的某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v路径相通的顶点都被访问到。若此时图中尚有顶点未被访问(说明该图不是连通图),则另选图中一个未曾被访问的顶点作为起始点,重复上诉过程,直至图中所有的顶点都被访问到为止。eg:如下图DFS的遍历的详细过程,选择起始点为v12.实现DFS的关键要点(1)结合上原创 2020-08-18 19:05:04 · 2924 阅读 · 0 评论 -
Dijkstra算法的深入浅出
一.Dijkstra算法可以解决的问题在给定的带权有向图中,我们任意指定一个点作为源点,求该源点到其他各点的最短路径时,我们便需要用到Dijkstra算法。二.Dijkstra算法的实现思想1.应该用什么数据结构来存储带权有向图?我们知道,用于存储图的数据结构主要是邻接表和领接矩阵,由于Dijkstra算法需要经常用到边的权值,这里我们采用领接矩阵存储更加好一些。2.实现Dijkstra算法还需要引入那些数据结构?(1)in[]t s 用于记录已经走过的点,每当我们找到源点到另一个点的最短路径原创 2020-08-13 21:17:07 · 291 阅读 · 0 评论 -
有向无环图下的关键路径
一.什么是AOE-网络和关键路径?AOE-网(Activity On Edge)即边表示活动的网。AOE-网是一个带权的有向无环图,其中顶点表示事件(Event),弧表示活动,权代表活动持续的时间。通常AOE-网可以用来估算工程的完成时间。正常情况下,网中只有一个入度为0的点(称作源点)和一个出度为0的点(叫做汇点)。由于AOE-网中有些活动可以并行的进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度(这里说的路径长度是指路径上各活动持续时间之和,不是路径上弧的数目)。路径长度最长的叫做原创 2020-08-12 21:51:55 · 1060 阅读 · 0 评论 -
哈夫曼树及其引起的思考
一.什么是哈夫曼树?哈夫曼树又称最优树,是一类带权路径长度最短的树。首先给出路径和路径长度的概念。从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上的分支数目称作路径长度。树的路径长度是从树根到每一个结点的路径长度之和。结点的带权路径长度为从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子结点的带权路径长度之和,通常记作WPL。对于哈夫曼树而言,其有一个非常显著的特点 ------- 没有度为1的结点.这类树又称严格的二叉树,对于这样的二叉树,根据其特点,如果原创 2020-08-11 16:02:19 · 964 阅读 · 0 评论 -
拓扑排序的经典案例分析 ----- 课程表
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 :[0,1]。给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的...原创 2020-04-30 17:49:37 · 500 阅读 · 0 评论 -
有向无环图下的拓扑排序
几个基本概念1.有向图:顾名思义,从一个点到另一个点,并非向无向图那样默认双向可达(只要两点之间存在边就相互可达),有向图是严格按照方向单向可达。2.有向图的环:对于一个有向图,如果从A出发,存在一条通路可使其又回到A,那么我们说该有向图存在环。3.有向无环图:一个不存在环的有向图。...原创 2020-04-29 22:31:05 · 2451 阅读 · 0 评论 -
无向图中最小生成树的解决办法(2) ----- Kruskal算法
Kruskal算法思想假设连通网 N={V,{E}},令最小生成树的初始状态只有n个顶点而无边的非连通图T={V,{}},然后在E中选择代价最小的边,若加入该边后不会形成环,则将该边加入到T中,否则舍去此边而选择下一条边,以此类推,直到所有顶点都被包含为止。结合下图将会对这个过程有更深刻的理解。在对上述过程有简单的了解后,其实现步骤可分为以下两个过程:(1)找出代价最小的边,(2)判断加入该...原创 2020-04-28 20:21:46 · 681 阅读 · 0 评论 -
无向图中最小生成树的解决办法(1) ----- Prim算法
什么是最小生成树?对于n个顶点构成的通信网,通信网可以构建许多不同的生成树,每一颗生成树都是一个通信网。我们现在要在该通信网中找到一颗生成树,该生成树连接所有顶点,且总花费最小。这样的生成树即称为最小生成树。prim算法的求解过程对于如下无向图,试求其最小生成树,顶点和顶点之间边的值为两点之间的花费。prim算法求解思想我们假设N=(V,{E})是连通网络,TE是N上最小生成树的边的集...原创 2020-04-27 21:23:28 · 1455 阅读 · 0 评论 -
分治算法的深入理解
在利用分治算法求问题解时其基本思路可以分为以下几个步骤:(1)分解,将要解决的问题划分成若干规模较小的同类问题(2)求解,当子问题划分得足够小时,用较简单的方法解决(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解.下面我们将通过具体的实例来对以上步骤做出详细的分析。最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大...原创 2020-04-26 00:50:47 · 375 阅读 · 0 评论 -
分治算法的简单概述
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。下面我们通过几个经典的例子来深入了解分治的思想。二分查找问题描述给定一个按升序排列的数组,找出其中某个特定的值,返回其下标的值。eg: 1,2,3,4,5,6,7,8,9 ,请找出其中9的位置,返回其...原创 2020-04-24 18:12:17 · 265 阅读 · 0 评论 -
八皇后问题的深入剖析
问题描述在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?问题分析解决该问题的关键在于当我们放置一个皇后后,如何表示占领了当前行,当前列,当前斜线(正斜线,反斜线)。对于行,我们可以从第一行开始依次向后放置皇后,形成一个"天然"不会发生冲突的过程。对于列,我们可以设置一个状态数组stateCol[8]表示当前列是否被...原创 2020-04-23 12:28:09 · 290 阅读 · 0 评论 -
DFS和BFS下的迷宫问题
深度优先搜索(DFS) 类似于数的先根遍历,是数的先根遍历的推广。假设初始状态是图中所有的顶点都未曾被访问,则深度优先搜索可以从图中的某个顶点出发,访问此顶点,然后依次从v未被访问的邻接点出发深度优先遍历图,直至图中所有和v相通的顶点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上诉过程,直到图中所有的顶点都被访问到为止。广度优先搜索(BFS) 类似于树的...原创 2020-04-21 16:39:02 · 478 阅读 · 0 评论 -
动态规划(1)------ 背包动规
动态规划一般可分为线性动规,区域动规,树形动规,背包动规四类。**动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。**不像搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可...原创 2020-04-17 18:48:17 · 770 阅读 · 2 评论 -
动态规划(2)------线性动规
线性动规是动态规划的分支之一,其常见的问题有:最长上升子序列,合唱队形,挖地雷等。下文将对这些经典问题做出相应的解答分析。最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: 10,9,2,5,3,7,101,18输出: 4解释: 最长的上升子序列是 2,3,7,101,它的长度是 4。分析解答:由题意我们可知,“最长上升子序列”,顾名思义,序列的最后一...原创 2020-04-20 00:37:20 · 288 阅读 · 0 评论