Algorithm
文章平均质量分 87
Q1n6
这个作者很懒,什么都没留下…
展开
-
KNN算法
一、算法概述1、kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。最简单平凡的分类器也许是那种死记硬背式的分类器,记住所有的训练数据,对于新的数据则直接和训练数据匹配,如果存在相同属性的训练数据,则直接用它的分类来作为新数据的分类。这种方式有一个明显的缺点,那就是很可能无法找到完全匹配的训练记录。kNN算法则是从训练集中找转载 2015-03-26 21:24:04 · 451 阅读 · 0 评论 -
贪婪算法-霍夫曼树 霍夫曼编码
哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL= (W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。原创 2016-04-15 18:08:15 · 1368 阅读 · 0 评论 -
贪婪算法-最小生成树-Kruskal算法
最小生成树是找出图中包括所有结点的联通子图,使得其所有的边的权重之和最小。Kruskal 算法提供一种在 O(ElogV) 运行时间确定最小生成树的方案。其选择的贪心策略就是,每次都选择权重最小的但未形成环路的边加入到生成树中。其算法结构如下:将所有的边按照权重非递减排序;选择最小权重的边,判断是否其在当前的生成树中形成了一个环路。如果环路没有形成,则将该边加入树中,否则放弃。原创 2016-04-10 21:47:11 · 1954 阅读 · 0 评论 -
动态规划-最长公共子序列(LCS)
最长公共子序列问题是求两个序列的一个最长的公共的子序列,不一定是连续的,但是顺序必须是正确的。S1: b e a u t y w q l o v eS2: w e i q i n g b e a l o v e那么他们的最长公共子序列为bealove,长度为7(测试用例)c表用来记录最长子序列的长度,如图所示。/** * 最长公共子序列的动态规划算法原创 2016-04-09 17:01:55 · 426 阅读 · 0 评论 -
动态规划-最小二叉搜索树(OBST)
二叉查找树是按照二叉树结构来组织的,因此可以用二叉链表结构表示。二叉查找树中的关键字的存储方式满足的特征是:设x为二叉查找树中的一个结点。如果y是x的左子树中的一个结点,则key[y]≤key[x]。递归解法(盗图~)构造三个表,w表存储各节点出现频率,e表存储最优二叉搜索树的搜索成本期望值,root表存储最优子树的树根。根据三个表,可以利用递归来构建最优二叉搜原创 2016-04-10 14:33:09 · 5023 阅读 · 0 评论 -
动态规划-流水线问题
流水线问题如图所示,两条流水线上相应位置上的梯级S1j和S2j所完成的任务相同,但完成时间不同分别为c1j和c2j。指令从内存发射到流水线上的时间分别为c10,c20。如果从一条流水线转移到另一个流水线,产生流动成本x。这个问题的最优解决方案里面包含了对子问题的最优解,这就是动态规划里面的最优子结构。所以我们选择动态规划来解决流水线问题。/**流水线问题,用动态规划解决 * @author原创 2016-04-09 15:26:43 · 4043 阅读 · 0 评论 -
基础排序算法(Java实现)
1.插入排序/** * 插入排序,复杂度O(n^2) * @author Qing * */public class Insert { //打印数组 public static void print(int[] a){ int n = a.length; System.out.println(" "); for(int i = 0; i < n; i ++){原创 2016-04-07 17:28:05 · 327 阅读 · 0 评论 -
判断一个单链表是否有环及环的链接点
给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少? 解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。2、对于问题2,记录下问题1的碰撞点p,slow、fast从该点转载 2016-03-09 21:21:34 · 462 阅读 · 0 评论 -
大数运算
在编写涉及密码学以及其他需要处理超出了普通的int,double型的范围的数据时,java提供java.math.BigInteger类来处理这类问题,除此之外,还可以用openssl来处理大型数据的运算。OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSl协议,并提供丰富的应用程序供测试或其它目的使用。本文总结这两种方法的异同。原创 2014-12-19 16:12:04 · 1351 阅读 · 0 评论 -
单源多点最短路径-Dijkstra算法
Dijkstra算法使用了贪心算法思想,在实现Dijkstra算法的时候,维持一个节点的集合S,该集合节点到源点的最短路径都已经找到;而对于S集合之外的节点,放置在集合Q中,表示还没有找到最短路径的节点,每次添加到S的是离S最近的节点u,在将u加入S之后,对Q中节点更新其到源节点的距离。以下是java实现:首先构造Node对象:/** * Dijkstra算法的节点对象 * @auth原创 2016-04-16 21:52:52 · 4581 阅读 · 0 评论