算法
文章平均质量分 78
TaiSung
Good developers who are familiar with the entire stack know how to make life easier for those around them.
展开
-
广度优先搜索(BFS)
广度优先搜索算法(Breadth-First-Search),又译作宽度优先搜索,或横向优先搜索,简称BFS,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。原理:从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。实现方法:首先将根节点放入队列中。从队列中取出第一个节点,并检验它是否为原创 2013-07-31 23:46:16 · 1045 阅读 · 0 评论 -
用于不相交集合的数据结构——查并集
不相交集合数据结构的概念和操作: 不相交集合数据结构(disjoing-set data structure)保持一组不相交的动态集合S={S1,S2,S3,……Sk}。每个集合通过一个代表来识别,代表即集合中的某个成员。不相交集合数据结构支持如下操作:1 . MAKE_SET(x): 建立一个新的集合,其唯一成员就是x,所以其代表也就是自己。因为各集合是不相交的,故要求x没有在原创 2014-01-21 21:18:44 · 2092 阅读 · 0 评论 -
一维和二维子数组之和最大值
一、约定所谓子数组,是连续的。只求和,不返回子数组的具体位置。元素是整数,所以数组可能包含正整数,0,负数。二、一维数组子数组之和的最大值最直接的求法——暴力求解 记sum[ i,...j ]为数组A中第i个元素到第j个元素的和(其中0/** * 常规解法求一位最大字段和 * @author DaiSong * @Date 2013年12原创 2013-12-02 15:10:03 · 805 阅读 · 1 评论 -
Bellman-Ford算法及其队列优化(SPFA)
一、算法概述 Bellman-Ford算法解决的是一般情况下的单源最短路径问题。所谓单源最短路径问题:给定一个图G=(V,E),我们希望找到从给定源结点s属于V到每个结点v属于V的最短路径。单源最短路径问题可以用来解决许多其他问题,其中包括下面几个最短路径的变体问题。包括单目的最短路径问题、单结点最短路径问题、所有结点对最短路径问题,这里不详细介绍。回到bellman-Ford,原创 2013-08-27 15:03:52 · 2060 阅读 · 0 评论 -
几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
几大最短路径算法比较 转自:http://blog.csdn.net/v_july_v/article/details/6181485几个最短路径算法的比较:Floyd 求多源、无负权边的最短路。用矩阵记录图。时效性较差,时间复杂度O(V^3)。 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路转载 2013-08-24 10:44:19 · 1181 阅读 · 0 评论 -
A*算法
A*算法A*在游戏设计中有它很典型的用法,是人工智能在游戏中的代表。 A*算法在人工智能中是一种典型的启发式搜索算法,为了说清楚 A*算法,我看还是先说说何谓启发式算法。 一、何谓启发式搜索算法: 在说它之前先提提状态空间搜索。状态空间搜索,如果按专业点的说 法就是将问题求解过程表现为从 初始状态到目标状态寻找这个路径的 过程。通俗点说,就是在解一个问题时,找到转载 2013-08-20 22:22:50 · 614 阅读 · 0 评论 -
求二进制数中1的个数
问题描述任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有的算法。如果您上头上有更好的算法,或者本文没有提到的算法,请不要吝惜您的代码,分享的时候,也转载 2013-08-06 15:55:01 · 526 阅读 · 0 评论 -
LCS(最长公共子序列问题)
LCS(Longest Common Subsequence),即最长公共子序列。一个序列,如果是两个或多个已知序列的子序列,且是所有子序列中最长的,则为最长公共子序列。原理: 事实上,最长公共子序列问题也有最优子结构性质。然后,用动态规划的方法找到状态转换方程。 记:Xi=﹤x1,⋯,xi﹥即X序列的前i个字符 (1≤i≤m)(前缀)原创 2013-07-25 22:40:12 · 879 阅读 · 0 评论 -
最长递增子序列(LIS)
最长递增子序列(Longest Increasing Subsequence) ,我们简记为 LIS。题:求一个一维数组arr[i]中的最长递增子序列的长度,如在序列1,-1,2,-3,4,-5,6,-7中,最长递增子序列长度为4,序列为1,2,4,6。 解法一:快速排序+LCS 刚开始做这道题的时候,由于之前做过几道LCS的题,于是最先想到的是快速排序+LCS的方法。这原创 2013-08-01 22:57:29 · 1322 阅读 · 0 评论 -
Floyd-Warshall算法:求结点对的最短路径问题
Floyd-Warshall算法:是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。原理:Floyd-Warshall算法的原理是动态规划(DP)。设D_{i,j,k}为从i到j的只以(1..k)集合中的节点为中间节点的最短路径的长度。若最短路径经过点k,则D_{i,j,k}=D_{i,k,k-1}+D_{k原创 2013-07-25 17:46:35 · 1407 阅读 · 0 评论 -
LeetCode 39. Combination Sum 题解
这题有几个主要的点,首先,题目要求输出所有的组合数,而不是数据所有组合总的个数,如果是求个数用动态规划更好解决。但是要输出所有的组合数的话使用回溯法更容易处理。其次,题目要求不能包含有重复的组合,这是解决这个题目的一个难点。最后,保存解决方案的时候要注意Java里List的浅拷贝和深拷贝,不然浅拷贝最后得到空值。解法:其实回溯的方法还是比较简单的,为了后面处理的适合容易去重...原创 2019-01-03 11:24:13 · 216 阅读 · 0 评论