数据结构与算法
文章平均质量分 78
xgf415
这个作者很懒,什么都没留下…
展开
-
动态规划算法--最短路径问题
问题:从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径——最短路径。下面将用Dijkstra算法解决最短路径问题。最短路径有一个重要特性:如果由起点A经过P点和H点而到达终点G是一条最短路线,则由点P出发经过H点到达终点G的这条子路线,对于从点P出发到达终点的所有可能选择的不同路线来说,必定也是最短路线。如下图: 例题分析:求从A到G的最短路径原创 2016-09-25 16:03:11 · 65447 阅读 · 12 评论 -
【算法入门】Trie 树详解及其应用
1. 什么是trie树 1.Trie树 (特例结构树) Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。转载 2017-08-01 08:59:40 · 2276 阅读 · 0 评论 -
【算法入门】A* 寻路算法具体过程及实现
http://www.360doc.com/content/16/1201/12/99071_610999046.shtmlhttp://blog.csdn.net/booirror/article/details/50834915http://www.cnblogs.com/technology/archive/2011/05/26/2058842.html转载 2017-08-01 09:08:08 · 12701 阅读 · 2 评论 -
【排序算法】基数排序:LSD 与 MSD
1.算法原理基数排序是通过“分配”和“收集”过程来实现排序。1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)2)收集,再将放置在0~9号桶中的数据按顺序放到数组中重复(1)(2)过程,从个位到最高位(比如32位无符号整形最大数4294967296,最高位10位)。而这个思想该如何理解呢?请看以下例子。(1)原创 2017-08-03 11:28:17 · 14301 阅读 · 3 评论 -
【算法入门】深度优先搜索(DFS)
1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。你可以跳过第二节先看第三节,:)2.深度优先搜索VS广度优先搜索2.1演示深度优先搜索的过程还是引用上篇文章的转载 2017-08-01 09:01:15 · 1307 阅读 · 0 评论 -
二叉树的链式存储
二叉树的链式存储结构原创 2016-04-19 17:13:54 · 8112 阅读 · 1 评论 -
动态规划算法
动态规划将复杂的多阶段决策问题分解为一系列简单的、离散的单阶段决策问题,采用顺序求解方法,通过解一系列小问题达到求解整个问题目的; 动态规划的各个决策阶段不但要考虑本阶段的决策目标,还要兼顾整个决策过程的整体目标,从而实现整体最优决策。需指出:动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种算法。必须对具体问题进行具体分析,运用动态规划的原理和方原创 2016-09-25 10:40:50 · 4866 阅读 · 0 评论 -
霍夫曼编码(Huffman Coding)
霍夫曼编码(Huffman Coding)是一种编码方法,霍夫曼编码是可变字长编码(VLC)的一种。霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。霍夫曼编码的具体步骤如下:原创 2016-09-22 21:44:16 · 147254 阅读 · 20 评论 -
用栈实现汉诺塔
汉诺(Hanoi)塔问题又称为河内塔问题。有位僧人整天把三根柱子上的金盘倒来倒去,原来他是想把64个一个比一个小的金盘从一根柱子上移到另一根柱子上去。移动过程中遵守以下规则:每次只允许移动一只盘,且大盘不得落在小盘上。如下图所示在博客如何编写递归程序(分治法)中,利用分治法递归程序提出了汉诺塔实现的方法,但是并没有在程序中真正地实现。由于汉诺塔的规则与栈的规则类似(先入后出原创 2016-07-26 20:12:31 · 17107 阅读 · 2 评论 -
如何编写递归程序(回溯法)
基于回溯策略的递归基本思想:在按某种搜索策略的搜索过程中,在某种状态,继续往前搜索已经确定不会得到正确答案的情况下,我们可以返回上一搜索状态,去沿新的可能性继续搜索。要回溯到上一状态,则说明我们在前进中的状态必须保存下来,我们采用“栈”来存放。它的求解过程实质上是一个先序遍历一棵“状态树”的过程,只不过这棵树不是预先建立的,而是隐含在遍历的过程当中。回溯法的特点搜索原创 2016-07-26 19:30:34 · 5714 阅读 · 1 评论 -
如何编写递归程序(分治法)
一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归调用在语法上很简单,递归即为普通的函数调用。但是在算法上却比较困难,主要需要解决下面两个问题:如何找到递归形式?如何找到递归边界?递归算法可以分为原创 2016-07-25 21:24:09 · 2401 阅读 · 0 评论