
算法拾忆录
文章平均质量分 76
Coding懒懒
享受技术人生
展开
-
数据结构与算法分析 第二章
数据结构与算法分析(C语言描述)是一本比较全面的算法书籍。我将对书中内容结合其他知识进行总结。首先,算法(algorithm)是为求解一个问题需要遵循的,被清楚地指定的简单指令的集合。切记,一个需要1G字节内存的算法是没用的(我做web开发时,自己写的算法总是导致页面崩溃,血的教训啊)。贯穿全文的四个数学定义:定义1:如果存在正常数c和n0使得当N>=n0时T(N)=则记为原创 2015-03-26 18:47:23 · 1158 阅读 · 0 评论 -
不用库函数 求解立方根
题目:如标题所示,不用平方根库函数,求解一个数字的平方根。分析:这个问题有两个思路:思路1:采用二分的方式(无处不在的二分),上界初始化为数字本身,下界初始化为1,这样用二分,判断中间数字的平方和目标数字比较,再修改上界和下界,直到小于一定的阈值。思路2:采用牛顿法(数值分析中提到),采用微分的方式,从初始点开始,每次迭代,微分求解切线,然后求解切线和x轴的转载 2015-08-17 15:54:06 · 5733 阅读 · 1 评论 -
C语言求最小公倍数和最大公约数三种算法
最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数求最大公约数算法:(1)辗转相除法有两整数a和b:① a%b得余数c② 若c=0,则b即为转载 2015-08-17 15:20:19 · 905 阅读 · 0 评论 -
并查集 杭电1232畅通工程
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点转载 2015-08-12 23:48:09 · 520 阅读 · 0 评论 -
哈夫曼树详解
回答问题之前先来看看什么是压缩。当你有天走在路上,碰见熟人对你说:“吃了?”你一定知道他是在打招呼,既不是要请客也不是让你“没吃赶紧回家吃去”。这一句简单的“吃了”是礼貌和问好的体现,也是一种信息的压缩。笼统地说,把一系列已有信息通过一定方法处理,使得其长度缩短,并且信息含量基本或者完全不变,就称之为压缩。 计算机上的压缩过程我们都知道,计算机采用的是2进制系统转载 2015-08-12 23:31:26 · 2066 阅读 · 0 评论 -
算法策略的总结
策略是面向问题的,算法是面向实现的。 一、不同算法策略特点小结1、贪心策略 贪心策略一方面是求解过程比较简单的算法,另一方面它又是对能适用问题的条件要求最严格(即适用范围很小)的算法。 贪心策略解决问题是按一定顺序,在只考虑当前局部信息的情况下,就做出一定的决策,最终得出问题的解。 即:通过局部最优决策能得到全局最优决策2、转载 2015-07-17 17:44:35 · 1046 阅读 · 0 评论 -
五种常用算法
分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的转载 2015-07-17 17:33:51 · 5807 阅读 · 0 评论 -
字符串的全排列问题
问题输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba思路这是典型的递归求解问题,递归算法有四个特性:必须有可达到的终止条件,否则程序陷入死循环子问题在规模上比原问题小子问题可通过再次递归调用求解子问题的解应能组合成整个问题的解对于字符串的转载 2015-06-25 20:56:49 · 8406 阅读 · 1 评论 -
字符串的排列组合算法合集
http://blog.youkuaiyun.com/hackbuteer1/article/details/7462447全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题转载 2015-06-25 20:58:21 · 4867 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。 这种算法不太容易理解,网上有很多解释,转载 2015-05-21 11:37:21 · 329 阅读 · 0 评论 -
鸡兔同笼
最近做poj题目,看到推荐李老师的书,题目都比较基础,当作随笔吧。原创 2015-04-14 16:58:55 · 666 阅读 · 0 评论 -
并查集
本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find。更多的信息可以参考Algorithms 一书的Section 1.5,实际上本文也就是基于它的一篇读后感吧。原文中更多的是给出一些结论,我尝试给出一些思路上的过程,即为什么要使用这个方法,而不是别的什么方法。我觉得这个可能更加有意义一些,相比于记下一些结论。关于动态连通性我们看一张图来了解一下什转载 2015-04-22 11:06:31 · 486 阅读 · 0 评论 -
JAVA oj注意事项
基本输入输出其实我感觉在有c基础后,学习java还是挺简单的,写acm时候主要是不太适应java的输入输出,其实关键还是在于你心里是否接受java的语法(吐槽:java的api的名字太TM长了吧) 在c里输入输出的标准格式: [cpp] #include int main(void) { int转载 2016-06-20 15:01:43 · 2468 阅读 · 0 评论