![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
诚朴求食
机器学习、深度学习、数据分析、JavaEE、测试开发
展开
-
Floyd算法求最短路径——Java
前面讲述了利用贪心算法求解最短路径的两种算法,分别是BFS以及Dijkstra算法。接下来要介绍的这种是一种动态规划的算法——弗洛伊德算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释。从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为...转载 2018-04-22 10:21:52 · 7432 阅读 · 3 评论 -
Dijkstra算法求无向带权图最短路径——Java
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 Dijkstra算法采用的是贪心算法的策略,在整个算法过程中一直要维护两个表,这两个表分别表示尚未遍历的结点和已遍历的结点。大概过程如下:声明两个集合,open和close,open用于存储未遍历的节点,close用来存储已遍...原创 2018-04-23 14:04:01 · 11868 阅读 · 5 评论 -
利用广度优先遍历(BFS)计算最短路径——Java
今天看了数据结构中的图论,其中讲到求无向无权图的最短路径的方法,就是使用了广度优先遍历的方法进行求解。对照算法在Intellij IDEA上自己实现了一遍,下面把程序贴出来并进行一些解释。 首先我们要构建一个无向无权图,我要构建成如下所示的图。然后我想计算出从North Gate到Canteen的最短路径,程序的输出结果应该为:North Gate, Square, Canteen...原创 2018-04-23 14:14:20 · 4722 阅读 · 1 评论 -
树的三种遍历方式源码(递归与非递归)
在面试的时候,我们会经常被问到树的三种遍历,也就是前序遍历、中序遍历和后序遍历。所谓前序遍历,就是先访问根节点,再左,再右。命名方式就是根据根节点是在哪访问的去定义的。下面我们先用Java实现三种遍历的递归,是非常的简单。树的前序遍历:public void recursiveProOrder(Node root) { if (root != null) { S...原创 2018-05-08 22:30:19 · 607 阅读 · 0 评论 -
走棋盘问题(BFS问题)
题目内容为一个棋盘,长宽自己输入,棋盘状态自己输入(.表示无棋子,o表示有棋子),可以全部进行上移、下移、左移、右移操作,遇到边界棋子丢失,计算出最短步数使棋盘上仅剩下k个棋子。import java.util.*;public class BFS { public static int n = 0; public static int m = 0; public...原创 2018-04-25 21:33:22 · 1511 阅读 · 0 评论 -
递归、回溯和DFS的区别
递归是一种算法结构,回溯是一种算法思想。一个递归就是在函数中调用函数本身来解决问题。回溯就是通过不同的尝试来生成问题的解,有点类似于穷举,但是和穷举不同的是回溯会“剪枝”。剪枝的意思也就是说对已经知道错误的结果没必要再枚举接下来的答案了,比如一个有序数列1,2,3,4,5,我要找和为5的所有集合,从前往后搜索我选了1,然后2,然后选3的时候发现和已经大于预期,那么4,5肯定也不行,这就...转载 2018-04-25 22:37:29 · 15554 阅读 · 6 评论 -
快速排序和归并排序
快速排序和归并排序是面试的时候经常被问到的东西,对于其中的任何一个知识点都要对答如流才可以,比如手推、时间复杂度、原理等等。下面我就对这两种排序中常问到的知识点进行以下总结。快速排序快速排序代码如下(要做到熟记并理解):private static int Partition(int[] arr, int left, int right) { //arr[lef...原创 2018-05-06 17:07:25 · 585 阅读 · 0 评论