算法
FarmerJohn
Java后端工程师。
肿瘤学研究生;平时也喜欢研究算法、统计学、机器学习、深度学习、贝叶斯分析、临床数据分析、生信数据分析、Android开发。
展开
-
最大独立集和最大完全子图
定义最大独立集:当且仅当对于U 中任意点u 和v所构成的边(u , v) 不是G 的一条边时,U 定义了一个空子图。当且仅当一个子集不被包含在一个更大的点集中时,该点集是图G 的一个独立集(independent set ),同时它也定义了图G 的空子图。最大独立集是具有最大尺寸的独立集(摘自:百度百科:最大独立集)。最大完全子图:图中任意两顶点都直接相连的图,称为完全图,也称全连接图。图...原创 2020-03-22 00:35:40 · 11887 阅读 · 0 评论 -
马尔可夫聚类 MCL
本文转载自:聚类算法——MCLBackgroundDifferent ClusteringVector Clustering我们在描述一个人时,常常会使用他所拥有的特点来表示,比如说:张三,男,高个子,有点壮。那么,这就可以用四维向量来表示,如果再复杂一些,就是更高维的向量空间了。根据各个维度的特征进行聚类是常见的数据分析任务,这类聚类方法包括:系统聚类法、K均值聚类法等。Gr...转载 2020-03-17 22:05:16 · 5320 阅读 · 0 评论 -
PID控制算法
本文转自:一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)最近讨论一个根据血糖监测值调整葡萄糖输注速度的问题,小伙伴考虑用PID实现,因此简单过了一遍PID算法。PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原理上来理解PID控制。PID(proportion integration...转载 2019-10-12 20:40:56 · 815 阅读 · 0 评论 -
动态规划常见类型总结
本文针对动态规划的常见类型进行总结。虽说总结的是动态规划,但顺便把递推也放了进来。严格来说,递推不属于动态规划问题,因为动态规划不仅有递推过程,还要有决策(即取最优),但广义的动态规划是可以包含递推的,递推是一类简单的、特殊的动态规划,毕竟动态规划与递推密不可分。动态规划类型主要分为纯粹动态规划问题和复合动态规划问题。几点说明:1、博主本人于2012年对信息学竞赛中的动态规划问题进行了总结...原创 2019-03-26 23:55:28 · 19696 阅读 · 3 评论 -
km算法与最佳匹配
KM算法该算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[ i ],顶点Yj的顶标为B[ j ],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[ i ]+B[j]>=w[i,j]始终成立。 KM算法的正确性基于以下定理: 若由二分图中所有满足A[ i ]+B[j]...转载 2011-10-16 15:33:56 · 2027 阅读 · 0 评论 -
BWT算法原理解读
测序数据alignment有一些不错的算法,其中Burrows–Wheeler transform算法(简称BWT)是非常高效的一种。本文简单总结下BWT算法思路和原理。BWT的计算与还原BWT计算及还原步骤此处不赘述,大致如下图(图1和图2)所示,详细讲解可参考其他资料。 图1:BWT计算(图片来自宾州大学王凯老师) ...原创 2019-07-31 12:17:21 · 11798 阅读 · 2 评论 -
马尔可夫链蒙特卡罗算法 MCMC
马尔可夫链蒙特卡罗算法(MCMC)是贝叶斯推断中的明星算法,困惑笔者颇久,阅读了刘建平大佬的博客及知乎上的一些阅读笔记后,终于有了些自己的理解。本文基于刘建平大佬的博客进行梳理,复制粘贴较多(甚至截图),权且当成读书笔记。蒙特卡罗方法原文链接:MCMC(一)蒙特卡罗方法要理解好MCMC,得先从第二个MC——Monte Carlo开始说起。引入求解积分问题(即面积计算类问题,尤其...转载 2019-10-06 14:50:35 · 8985 阅读 · 0 评论 -
字符串的非精确匹配
对于字符串的exact matching,KMP、Suffix Tree等方法是利器,但是对于inexact matching,这些方法就有些吃力了,虽然也能使用Suffix Tree解决一些错配问题或通配符问题,但是使用范围很有限。对于inexact matching,一般使用Dynamic Programming处理。DP是老朋友了,时隔6年,好久不见。这里使用的DP比较简单,转移方程容易理解...原创 2018-05-08 13:34:17 · 1367 阅读 · 0 评论 -
生物信息学算法笔记
入门生物信息学,选了一条比较难的路,直接从底层算法开始,这种做法其实不太明智。读了"Algorithms on Strings, Trees and Sequences",一本厚厚的算法书,后半部分其实读得有些粗糙。今天读完了第一遍,总的来说还是有些收获,将笔记记录于此。全书总共分为四部分:基本字符串算法、后缀树算法、非精确匹配算法、映射与测序。基本字符串算法以KMP为代表,这个是基本功,而且...原创 2018-05-19 22:14:17 · 14322 阅读 · 0 评论 -
后缀树系列三:后缀树的应用
前面两篇转载的后缀树系列文章已经描述了后缀树的线性构建算法。创建后缀树的O(n)算法,除了1995年E. Ukkonen大幅简化的算法,还有Peter Weiner的73年年度最佳算法、Edward McCreight1976的改进算法、Juha Kärkkäinen 和 Peter Sanders2003年进一步简化的线性算法,可以根据自己喜好选择。 转载的本系列文章应该预设有第三篇的(后缀树...原创 2018-05-06 14:41:59 · 3095 阅读 · 0 评论 -
约瑟夫问题
约瑟夫递推公式 问题描述:n个人(编号1~n),从1开始报数,报到m的退出,剩下的人继续从1开始报数。求胜利者的编号。 分析:当m<n时,第一次编号为m的出队,重新报数的顺序为:m+1, m+2, m+3,…… n, 1, 2,……m-1,给他们重新编号为: 1, 2, ...原创 2011-10-27 22:21:09 · 618 阅读 · 0 评论 -
三分法求解凸函数的最值
转了牛人的: 二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值。但当函数是凸性函数时,二分法就无法适用,这时三分法就可以“大显身手”~~ 如图,类似二分的定义Left和Right,mid = (Left + Right) / 2,midmid = (mid + Right) / 2; 如果mid靠近极值点,则Right = midmid;否则(即midmid靠近极值点)...转载 2011-10-30 15:49:17 · 2925 阅读 · 2 评论 -
树的直径与树的中心
1. 树的直径概念:树中的最长路。求法:两次深搜或DP。1-两次深搜:任找一点A为源点,深搜遍历得到最远点B,这个最远点B必定在直径中(感性想想,以A点为源点找到的最长路后面一段必定属于树的直径的一部分);再以这个最远点B为源点深搜遍历求一个最长路,这个最长路即为树的直径。2-DP:显然最长路的两个端点必然是叶子或者根节点。设f(i)表示到i最远的叶子,g(i)表示到i次远的...原创 2011-10-29 17:49:22 · 4036 阅读 · 1 评论 -
poj字符串总结
1)poj1002 难度:1题意:给你一些字母与数字的对应关系,忽略‘-’,求是否有重复的号码,若有重复则输出重复次数(按字典序输出)。分析:先将所有字符串统一为数字串,然后字符串Qsort。2)poj1200 Crazy Search 难度:2题意: 找出不相同的子串数量,字母表大小和子串长度会给定.分析:将n长的字符串转为nc进制的数字(longint能够承受),并用bool数组标记。对于...原创 2011-10-14 20:37:11 · 4470 阅读 · 0 评论 -
KMP与最小覆盖子串
我对KMP的一些理解(lyp点拨的):pre[i](或next[i])的实质是串str[1..i]的最长且小于i的“相等前、后缀”分别为str[1..pre[i]](前缀)与str[(i-pre[i]+1)..i](后缀),通俗讲就是:使str[1..i]前k个字母与后k个字母相等的最大k值。KMP算法详解可见:http://blog.csdn.net/fjsd155/artic...原创 2011-10-12 16:53:55 · 5525 阅读 · 0 评论 -
poj2054
Poj2054转了大牛XQZ的……(http://hi.baidu.com/cheezer94/blog/item/d98eca065202a2f237d122da.html)给定一棵N个有权值的节点的有根树(默认根节点编号为1)。每个节点的权值为Ci。现在需要遍历这棵树。每访问到一个点,该点的访问代价为这个点的权值与当前未被访问的点的权值之和。遍历顺序为拓扑序,即访问i时i的父亲...转载 2011-10-09 12:22:27 · 1799 阅读 · 0 评论 -
贪心总结
经典贪心题:1)旅行家的预算2)节点网络3)求最大得分4)删数问题5)取数游戏6)独木舟7)最大整数8)Radar转换模型—〉贪心求解先算出每个岛在哪个区间范围内建立雷达站能够覆盖到这个岛,按左端点快排。第一个雷达建立在区间的右端,而后一次判断每个区间的左端点,如果在最新建立的雷达右面,那么肯定需要一个雷达,而且也建在区间右端。如果左端点在雷达左面,这个时候要考虑区间的右端在雷达的左面还是右面,如...原创 2011-10-08 19:22:26 · 1217 阅读 · 0 评论 -
后缀树系列一:概念以及实现原理( the Ukkonen algorithm)
首先说明一下后缀树系列一共会有三篇文章,本文先介绍基本概念以及如何线性时间内构件后缀树,第二篇文章会详细介绍怎么实现后缀树(包含实现代码),第三篇会着重谈一谈后缀树的应用。 本文分为三个部分,首先介绍一下后缀树的“前身”– trie树以及后缀树的概念;然后介绍一下怎么通过trie树在平方时间内构件后缀树;最后介绍一下怎么改进从而可以在线性时间内构件后缀树;一,从t...转载 2018-05-06 00:33:18 · 5299 阅读 · 0 评论 -
后缀树系列二:线性时间内构建后缀树(包含代码实现)
上一篇文章已经介绍了后缀树的前前后后的知识,并且采用各种技巧逼近线性时间了,至于具体怎么操作大家看完之后应该多多少少有点想法了。而之所以将本文跟上一篇文章分开,主要考虑有三:第一,和在一起文章就会太长了,看的头疼。第二,理论跟实现本来就有差异,本文中一些具体实现并没有严格遵守上文中的条条框框。当然了,主题思想是一样的。第三,本文会从具体实现的角度,在实现过程中进一步阐述上文中的原理...转载 2018-05-06 00:36:43 · 625 阅读 · 0 评论 -
LCS、LIS、LCIS 与动态规划
话说LCS有O(n*m)的算法,LIS也有O(n*m)的算法;XX日,LIS被栈和二分优化了,复杂度变为了nlogn,于是n排列的LCS也被优化了,也达到了nlogn.nlogn的LCS:设有序列A,B。记序列A中各个元素在B 中的位置,用序列C存,求C的LIS即可。LCS与LIS结合,于是有了LCIS,LCIS有n*m的算法。代码如下:for i:=1 to n do begin t:=...原创 2011-10-31 20:40:57 · 709 阅读 · 0 评论