随笔分类 - [41]Algorithm算法
-
Leapin' Lizards
摘要:Leapin' Lizards题目大意:在一个网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高 度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同 一个石柱上。这个应该还算是比较难的网络流的题目了吧, 至少对我这个刚刚接触新手的人来说只这样的,AC的过程是痛苦而又备受煎熬的,最后一步步调试下来成功提交的那刹 阅读全文
-
快速高斯模糊
摘要:快速高斯模糊经由厉害博主Imageshop的博文http://www.cnblogs.com/Imageshop/archive/2013/01/07/2849782.html提示,我这里实现了高斯模糊函数,但是有一下几点问题向各位讨教探讨:①这个函数处理速度没有Imageshop博主描述的速度快,如何提高效率。②高斯模糊后感觉整幅图像会向右下角平移一定距离,没有详细研究过算法本身,这样是否为正常,有何解决方案,大家一起探讨。(反正我用高斯模糊后图像载进行USM锐化得到了我觉得很不理想的结果,原因应该就是这个平移造成的)③高手帮看看我这个函数是否本身就有错我做的工作很简单①我将contrast 阅读全文
-
河内之塔 算法
摘要:河内之塔 算法河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。我们来把这个故事变成一个算法:把三个柱子标为ABC 阅读全文
-
OJ题目JAVA与C运行效率对比
摘要:【JAVA】深深跪了,OJ题目JAVA与C运行效率对比(附带清华北大OJ内存计算的对比)看了园友的评论之后,我也好奇清橙OJ是怎么计算内存占用的。重新测试的情况附在原文后边。-------------------------------------- 这是切割线 --------------------------------------------最近自学Java,试着用Java刷几道OJ的题来熟悉基本语法。起初几道简单题,没太留意程序的执行效率。今天做了一道简单的递归题,竟然运行超时了!由于本人算法方面功底太差,不懂的如何优化,想了个投机的办法应付了过去。但又觉得不可思议,照以前用C语言刷 阅读全文
-
关协同过滤
摘要:有关协同过滤的总结 1 基于用户的最近邻推荐: 主要思想:找出与当前用户有相似偏好的其他用户,即对等用户或最近邻,然后对当前用户没有见过的产品P,利用其近邻对p的评分计算预测值。 注意:相似偏好是指对物品的评分偏好,而不是相似个人资料的用户。 对于具有相似偏好的用户集,采用Pearson相关系数,给定评分矩阵R,用户a和用户b的相似度sim(a,b)的求法是对【(用户a对产品pn的评价与用户a的平均评分之差)乘以(用户b对产品pn的评价与用户b的平均评分之差)的积】求和(一共P个产品),再除以【(用户a对产品pn的评价与用户a的平均评分之差)的平方的求和】的平方根与【(用户b对产品pn... 阅读全文
-
冒泡排序
摘要:冒泡排序 冒泡排序(Bubble Sort)是最为常用的一种排序方法,它是一类具有"交换"性质的排序方法 基本思想:通过序列中邻接元素的交换,使较小或较大的元素逐渐从序列的后端移到序列的前端,使较大或较小的元素从前端移动到序列的后端。这就像水底的气泡不断向上"冒"一样,因此称之为"冒泡排序" 举例分析:设有一个数据元素序列{3,6,4,2,11,10,5},要求按从小到大顺序排列,排序步骤如下图所示: 从上图可知:一个包含N个元素的序列,需要N-1趟的冒泡排序就可以将原序列排列有序,代码如下所示(C#实现): 1 public sta 阅读全文
-
二分查找法
摘要:二分查找法二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。二分查找法是已经排好顺序的集合,要从集合的中间开始查找,如果这个项小于我们要查找的数,则这个项前边的所有数都小于我们要查找的对象就无需再浪费时间去查在前边的数查找;如果搜寻的数天于我们要查找的对象那么这个数的后边的数都大于我们要查找的对象,则后边的数我们也不用再去查找了。下边我会用c#和c++两种语言给出代码c#二分查找代码?staticvoidMain(string[] args){int[] _array={ 1,3, 阅读全文
-
初探KMP算法
摘要:初探KMP算法数据结构上老师也没讲这个,平常ACM比赛时我也没怎么理解,只是背会了代码……前天在博客园上看见了一篇介绍KMP的,不经意间就勾起了我的回忆,写下来吧,记得更牢。一.理论准备 KMP算法为什么比传统的字符串匹配算法快?KMP算法是通过分析模式串,预先计算每个位置发生不匹配的时候,可以省去重新匹配的的字符个数。整理出来发到一个next数组, 然后进行比较,这样可以避免字串的回溯,模式串中部分结果还可以复用,减少了循环次数,提高匹配效率。通俗的说就是KMP算法主要利用模式串某些字符与模式串开头位置的字符一样避免这些位置的重复比较的。例如 主串: abcabcabcabed ,模式串:a 阅读全文
-
基础排序算法之快速排序(Quick Sort)
摘要:基础排序算法之快速排序(Quick Sort)快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序。同时如果随机选取中心枢(pivot),它也是一个随机算法。最重要的是,快速排序(Quick sort)的算法分析的过程非常给力。本文首先描述问题,再说明快速排序(Quick Sort)的基本思路并给出伪代码,之后贴出自己的Python代码。在验证完算法的正确性之后,给出如何选择好的中心枢(pivot)的方法,即随机快速排序(Randomized Quick sort),并贴代码。最后进行算法复杂度分析。问题描述问题描述和其他排 阅读全文
-
KMP算法精髓
摘要:KMP算法精髓这个算法的做法就是在部分匹配的时候,常规想法是向后移动一位,但是KMP想法是向后移动n位(n=m-L)。注释:这里m表示已经匹配了的字符的个数,L表示已经匹配了的那些字符组成的这个字符串的前缀和后缀的最长公共串的长度,比如说abbabab,这个串的L就为0,而abba的L就为2。本质就是这些已经匹配好的字符串如果前缀和后缀有相同的字符串,那么就把前缀相同的那个移到后缀相同的字符串的位置,完了。参考http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.htmlhttp: 阅读全文
-
习题
摘要:习题1、写出一个运行时间为的算法,使之能在给定一个由n个整数构成的集合S和另一个整数时,判断出S中是否存在有两个其和等于x的元素。首先对集合进行排序,用归并排序(),然后再从集合的第一个元素到最后一个元素,对集合进行二分查找,查找x减去该元素() 1 #include 2 #include 3 4 void merge(int A[], int p, int q, int r){ 5 int n1 = q - p + 1; 6 int n2 = r - q; 7 int i, j, k; 8 int *L = malloc(n1 * siz... 阅读全文
-
一致性哈希算法的研究
摘要:一致性哈希算法的研究之前由于一直在做客户端开发,对分布式内存缓冲数据存储的原理一直都存有很多疑问,想着无非是哈希算法,或者分级的数据查询,但这两种方式都有很多缺点,使用哈希算法扩展起来很麻烦,分级的话会造成最上级节点瘫痪,导致所有数据请求无法查询。 最近的新工作需要做一些大数据处理,也了解了一些memcache,HazelCast之类一些缓存系统,从网上搜了一些实现原理的资料,发现其核心是一种叫做一致性哈希的算法,不过我觉得叫“连续hash算法”更合适点,这篇文章上有些详细的介绍http://blog.csdn.net/sparkliang/article/details/5279393。 . 阅读全文
-
并查集
摘要:并查集(有点坑)纪念我死去的脑细胞们 .....小希的迷宫Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 20397 Accepted Submission(s): 6243Problem Description上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房 阅读全文
-
分类算法优缺点对比
摘要:分类算法优缺点对比1 贝叶斯分类器 优点:接受大量数据训练和查询时所具备的高速度,支持增量式训练;对分类器实际学习的解释相对简单 缺点:无法处理基于特征组合所产生的变化结果2 决策树分类器 优点:很容易解释一个受训模型,而且算法将最为重要的判断因素都很好的安排在了靠近树的根部位置;能够同时处理分类数据和数值数据;很容易处理变量之间的相互影响;适合小规模数据 缺点:不擅长对数值结果进行预测;不支持增量式训练3 神经网络 优点:能够处理复杂的非线性函数,并且能发现不同输入间的依赖关系;支持增量式训练 缺点:黑盒方法,无法确定推导过程;选择训练数据的比率与问题相适应的网络规模方面,没有明... 阅读全文
-
双指数边缘平滑滤波器用于磨皮算法的尝试。
摘要:双指数边缘平滑滤波器用于磨皮算法的尝试。说起为什么会看到这个东西,那还真的绕一圈。首先在写《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果及其他。一文时里面提到了导向滤波,然后看何凯明的《Guided Image Filtering》一文时又多次提到双边滤波,结果我就又把以前研究的双边滤波的文章翻出来看看,就再次翻到了Fast O(1) bilateral filtering usingtrigonometric range kernels一文,在论文的第10页有如下这段文字: The Java sour 阅读全文
-
字符串匹配算法之SimHash算法
摘要:字符串匹配算法之SimHash算法SimHash算法 由于实验室和互联网基本没啥关系,也就从来没有关注过数据挖掘相关的东西。在实际工作中,第一次接触到匹配和聚类等工作,虽然用一些简单的匹配算法可以做小数据的聚类,但数据量达到一定的时候就束手无策了。 所以,趁着周末把这方面的东西看了看,做个笔记。来历 google的论文“detecting near-duplicates for web crawling”--------simhash。 Google采用这种算法来解决万亿级别的网页的去重任务。 基本思想 simhash算法的主要思想是降维,将高维的特征向量映射成一个低维的特征向量,... 阅读全文
-
最短路径启蒙题
摘要:HDU-1874 畅通工程续 (最短路径启蒙题)hdu 1874比较基础,拿来练各种刚学会的算法比较好,可以避免好多陷阱,典型的最短路模板题 畅通工程续Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21028Accepted Submission(s): 7310Problem Description某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些. 阅读全文
-
选择排序
摘要:选择排序选择排序(Selection Sort) 基本思想:第i趟排序从序列的后n-i+1(i=1,2...n-1)个元素中选择一个最小或最大的元素,与该n-i+1个元素的最前面那个元素进行位置交换,直到i=n-1(每一趟的选择排序就是从序列中未排序的元素中选择一个最小或最大的元素,将该元素与未排序元素的第一个元素交换位置) 举例分析:设有一个数据元素序列{3,6,4,2,11,10,5},要求按从小到大顺序排列,排序步骤如下图所示: 从上图可知:一个包含N个元素的序列,需要N-1趟的选择排序就可以将原序列排列有序,代码如下所示(C#实现): 1 public static int[] S.. 阅读全文
-
算法框架与问题求解
摘要:算法框架与问题求解目录什么是回溯法?回溯法的通用框架利用回溯法解决问题问题1:求一个集合的所有子集问题2:输出不重复数字的全排列问题3:求解数独——剪枝的示范问题4:给定字符串,生成其字母的全排列问题5:求一个n元集合的k元子集问题6:电话号码生成字符串问题7:一摞烙饼的排序问题8:8皇后问题总结与探讨附:《算法设计手册》第7章其余面试题解答 摘了一段来自百度百科对回溯法思想的描述:在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其. 阅读全文
-
次小生成树问题探讨
摘要:次小生成树问题探讨 为什么写这个呢?因为那天听到了这个词,属于MST的扩展……最小K度树有空研究。一.理论准备 需要读者事先懂得prime算法,不太了解的请看博主这一篇http://www.cnblogs.com/hxsyl/p/3286956.html,也需要读者对DP了解一些。先看一个结论:次小生成树可由最小生成树换一条边得到,笔者认为很有必要搞清楚这一点,,否则对算法理解不够深入。 证明:咱换种方式去看待这个结论(一个生成树可以通过换边得到另一个生成树),T是某一棵最小生成树,T0是任一棵异于T的生成树,通过变换T0 --> T1 --> T2 --> ... --&g 阅读全文