![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 81
youwuwei2012
这个作者很懒,什么都没留下…
展开
-
区间树
区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值是区间的左端点。通过建立这种特定的结构,可是使区间的元素的查找和插入都可以在O(lgn)的时间内完成。 相比于基础的数据结构,增加了一个max[x],即以x为根的子树中所有区间的断点的最大值。区间树如下图所示: 这里的区间查找的并不是精确查找,而是查找和给定区间重转载 2014-04-16 20:51:47 · 587 阅读 · 0 评论 -
字符串的全排列和组合算法
全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题目是如何要求的(百度迅雷校招笔试题)。一、字符串的排列用C++写一个函数, 如 Foo(const char *转载 2014-06-21 20:50:58 · 381 阅读 · 0 评论 -
三种线性的非基于比较的排序算法:计数排序、桶排序与基数排序
转载自在计算机科学中,排序是一门基础的算法技术,许多算法都要以此作为基础,不同的排序算法有着不同的时间开销和空间开销。排序算法有非常多种,如我们最常用的快速排序和堆排序等算法,这些算法需要对序列中的数据进行比较,因为被称为基于比较的排序。基于比较的排序算法是不能突破O(NlogN)的。简单证明如下:N个数有N!个可能的排列情况,也就是说基于比较的排序算法的判定树有N!个叶子转载 2014-07-29 22:26:59 · 365 阅读 · 0 评论 -
Trie树
Trie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度。 下面以英文单词构建的字典树为例,这棵Trie树中每个结点包括26个孩子结点,因为总共有26个英文字母(假设单词都是转载 2014-06-22 17:12:57 · 376 阅读 · 0 评论 -
TF-IDF与余弦相似性的应用(二):找出相似文章
作者: 阮一峰上一次,我用TF-IDF算法自动提取关键词。今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新闻下方,还提供多条相似的新闻。为了找出相似的文章,需要用到"余弦相似性"(cosine similiarity)。下面,我举一个例子来说明,什么是"余弦相似性"。转载 2014-07-14 11:00:11 · 353 阅读 · 0 评论 -
TF-IDF与余弦相似性的应用(三):自动摘要
作者: 阮一峰有时候,很简单的数学方法,就可以完成很复杂的任务。这个系列的前两部分就是很好的例子。仅仅依靠统计词频,就能找出关键词和相似文章。虽然它们算不上效果最好的方法,但肯定是最简便易行的方法。今天,依然继续这个主题。讨论如何通过词频,对文章进行自动摘要(Automatic summarization)。如果能从3000字的文章,提炼出150字的转载 2014-07-14 11:03:42 · 411 阅读 · 0 评论 -
TF-IDF与余弦相似性的应用(一):自动提取关键词
原文作者:阮一峰这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到?这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它转载 2014-07-14 11:01:55 · 313 阅读 · 0 评论 -
引入哈希桶的概念来实现一个哈希表
http://www.nowamagic.net/academy/detail/3008088转载 2014-08-05 15:50:53 · 463 阅读 · 0 评论 -
最长递增子序列
问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.解法1:最长公共子序列法这个问题可以转换为最长公共子序列问题。如例子中的数组A{5,6, 7, 1, 2, 8},则我们排序该数组得到数组A‘{1, 2,转载 2014-08-25 17:22:59 · 422 阅读 · 0 评论 -
概率题:一个有趣的抛硬币问题
假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关。现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出两个“字”向上游戏就结束了,不用继续抛。上面这个题目我第一次见到是在pongba的TopLanguage的一次讨论上,提出问题的人为Shuo Chen,当时我给出了一个解法,自认为已经相当简单转载 2014-08-26 14:00:14 · 2594 阅读 · 0 评论 -
n对括号的匹配方式以及Catalan数通项公式的推导
4对括号有多少种可能的合法匹配方式?n对括号呢?此题是卡特兰数的一个通常应用,相似的还有出栈顺序等。关于卡特兰数的具体内容,请参阅百度百科或Wiki.http://baike.baidu.com/view/2499752.htm 网络上可以搜到很多相关的题目和解答,但是鲜有易懂的推导过程。这里记录一种推导过程如下: 结论:对于n对括号,合法的排列转载 2014-08-28 21:40:20 · 2923 阅读 · 0 评论 -
Manacher算法----O(n)回文子串算法
O(n)回文子串算法注:转载的这篇文章,我发现下面那个源代码有点bug。。。在下一篇博客中改正了。。 这里,我介绍一下O(n)回文串处理的一种方法。Manacher算法.原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-lo转载 2014-06-21 20:40:45 · 364 阅读 · 0 评论 -
动态规划求解01背包相关的基本问题
背包问题是经典问题,网上已经提供了很多优秀的解法,这里摘录动态规则的方法,同时顺便把背包相关的变形问题也一些阐述。问题:1. 经典背包问题:给定一个载重量为m,n个物品,其重量为wi,价值为vi,12. 变形:要求装入的物品重量最大?(问题很简单,但请先别BS我)3. 变形:要求装入的物品重量刚好等于背包的承重?换一种说法就是:N个数里挑出任意个数,使这些数的和转载 2014-04-06 10:44:01 · 625 阅读 · 0 评论 -
动态规划0—1背包问题
动态规划0-1背包问题Ø 问题描述: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?Ø 对于一种物品,要么装入背包,要么不装。所以对于一种物品的装入状态可以取0和1.我们设物品i的装入状态为xi,xi∈ (0,1),此问题称为0-11背包问题。转载 2014-04-06 15:21:42 · 889 阅读 · 0 评论 -
解答Google的一道面试题
这几天有一道Google的面试题在论坛炒得很火,题目如下:“有一个100层高的大厦,你手中有两个相同的玻璃围棋子。从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层面。”下面给出我的分析和解答。 为了得到两个棋子的最优策略,我们先简化问题,看看一个棋子的情况。如果手中只有一个棋子,为了得知临界层面,你只有一种选择:从2楼开始,一层一层地试,转载 2014-04-10 17:56:54 · 485 阅读 · 0 评论 -
一致性hash算法 - consistent hashing
一致性 hash 算法( consistent hashing )张亮consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N转载 2014-05-10 18:45:57 · 284 阅读 · 0 评论 -
高斯模糊的算法
作者: 阮一峰通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。"模糊"的算法有很多种,其中有一种叫做"高斯模糊"(Gaussian Blur)。它将正态分布(又名"高斯分布")用于图像处理。本文介绍"高斯模糊"的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑技术(data smoothing),适用于多个场转载 2014-07-14 11:04:25 · 487 阅读 · 0 评论 -
KMP算法
在介绍KMP算法之前,先介绍一下BF算法。一.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。 举例说明: S: ababcababa P: ababa转载 2014-06-25 15:27:06 · 341 阅读 · 0 评论 -
最近公共祖先LCA问题
解法一:暴力对待转载 2014-06-26 13:11:51 · 470 阅读 · 0 评论 -
最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
原文地址:http://www.cnblogs.com/zhangchaoyang/articles/2012070.html转载 2014-07-02 20:31:39 · 477 阅读 · 0 评论 -
编程之美------2.5 寻找最大的K个数
今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值。 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以下的方式,决定很好,推荐给大家。 所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题。 解转载 2014-07-28 11:04:08 · 549 阅读 · 0 评论 -
胜者树和败者树和堆
胜者树内部节点节点记录的是胜者的数值,而败者树内部节点记录的是败者的数值。胜者树内部节点可能记录的是同一个叶子节点的值,但是败者树不会是记录同一个叶子节点值。 胜者树更新的时候需要和兄弟节点比较,但是败者树只需要和父节点比较就可以了。 败者树比胜者树多一个节点来记录胜者。 胜者树败者树堆结构和功能和时间复杂度都相似 堆转载 2014-06-19 14:24:03 · 1100 阅读 · 0 评论 -
母函数详解
母函数(Generating function)详解在数学中,某个序列的母函数是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身转载 2014-08-31 00:40:30 · 508 阅读 · 0 评论