贪心算法(greedy algorithm)是指,在每一步都做出当时看起来最佳的选择,也就是局部最优的选择,期望这样的选择能够导向全局最优解。所以并不是所有的问题都能得到全局最优解。 典型的例子如分数背包问题:背包容量为50kg,有三个商品分别是重60元/10kg、100元/20kg、120元/30 ...
分类:
编程语言 时间:
2018-07-31 19:30:56
阅读次数:
194
动态规划指的是一个问题可以拆分成多个小的最优子问题,并且这些子问题具有重叠,典型的如斐波那契数列:f(2)=f(1)+f(0),f(3)=f(2)+f(1),f(4)=f(3)+f(2),若使用简单的递归算法求f(4),则f(2)会被计算两次,当计算f(n)时需要计算f(n-1)和f(n-2)而f( ...
分类:
编程语言 时间:
2018-07-24 21:43:29
阅读次数:
259
[TOC] 有向图的传递闭包是Floyd warshall 算法的一种应用(主要参考算法导论) 传递闭包的定义 对于有向图G(V,E)的传递闭包即是G(V,E ),其中E {(i,j):图G中包含一条由i到j的路径}。 Floyd warshall 传递闭包算法 Floyd warshall 代码 ...
分类:
其他好文 时间:
2018-07-23 22:42:05
阅读次数:
382
主要参考算法导论 [TOC] 基本性质 使用min_w(s,v)表示源节点s到v的最短路径长度; w(u,v)表示节点u到v的权重; u.d表示源节点s到节点u的当前路径长度; 松弛操作 include include include include using namespace std; def ...
分类:
编程语言 时间:
2018-07-22 23:32:10
阅读次数:
227
案例 & 8195;假如我们现在在设计一个英文翻译程序,要把英文翻译成汉语,显然我们需要知道每个单词对应的汉语意思。我们可以建立一颗二分搜索树来实现英语到汉语的关联。为了更快速地翻译,我们可以使用AVL树或者红黑树使每次查询的时间复杂度Θ(lgn),实际上对于字典翻译程序来说这么做存在一个问题,比如 ...
分类:
编程语言 时间:
2018-07-20 21:15:24
阅读次数:
171
选择排序 选择排序的思想非常简单,很多书或技术Blog都讲的很好,这里不赘述了,直接给出代码 如果考虑通用性,可以使用模板函数 插入排序 插入排序的思想非常简单,无论是经典教材《算法导论》还是不少技术文章都以扑克牌为例,手里的牌是有序的,每拿到一张新牌会为它在排好序的牌中找出合适的位置插入。 代码如 ...
分类:
编程语言 时间:
2018-07-14 18:24:25
阅读次数:
167
一、红黑树的介绍 先来看下算法导论对R-B Tree的介绍:红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 前面说了,红黑树,是一种二 ...
分类:
其他好文 时间:
2018-06-16 18:49:58
阅读次数:
196
下载地址:https://www.jb51.net/books/61370.html 读后感: 能看到睡着... ...
分类:
编程语言 时间:
2018-06-16 12:02:33
阅读次数:
119
原理参考《算法导论》,我借用了stl中的deque类,这样方便构造书中说的有序队列Q。其次,本博客的所有代码都采用C和C++混编形式,所以建议使用VS2015及其以上版本编译代码。 代码如下 声明一个Huffman类以及对应的节点数据 对应的成员函数实现 Huffman_init成员函数,构建Huf ...
分类:
其他好文 时间:
2018-06-15 15:49:07
阅读次数:
185