
Algorithm Study
文章平均质量分 68
huntzw
这个作者很懒,什么都没留下…
展开
-
Dynamic Programming 学习笔记(二) LIS vs LCS
LIS (Longest Increasing Subsequence) 最长上升子序列。题目:给出一个序列a1,a2,a3,a4,a5,a6,a7….an,求它的一个子序列(设为s1,s2,…sn),使得这个子序列满足这样的性质,s1LCS (Longest Common Subsequence) 最长公共子序列。题目:一个数列 S,如果其分别是两个或多个已知数列的子序列,且是最长的原创 2012-01-05 18:03:12 · 618 阅读 · 0 评论 -
Single Number题解整理
Q: Given an array of integers, every elementappears three times except for one. Find that single one. 如果是其余元素均出现两次,这个题目很容易解决,我们直接可以用xor,把所有的数异或之后的结果,便是出现一次的数字。但是这个题目其余元素出现的次数是三次,如果数组中的元素都是三个三个出现的,原创 2014-04-08 20:50:04 · 554 阅读 · 0 评论 -
If advanced algorithms and data structures are never used in industry, then why learn them?
Here is one question from Quora. Just record it here...I and people I know have never used any advanced algorithms or data structures in industry and some of us have 20 years of experience in indust转载 2014-05-06 11:03:44 · 976 阅读 · 0 评论 -
两个数组的元素之和最大的前k项
题目:两个数组,从每个数组中取一个数相加,求最大的前k个和 数组A:1,2,3 数组B:4,5,6 则最大的前2个和:9,8。原创 2014-05-06 20:10:14 · 3391 阅读 · 0 评论 -
Hash 函数
Hashing H(key)= key %MLinear probe Slot = (home+i)%M Homeis index to which the key originally mapped by the hash function原创 2013-10-30 09:17:28 · 587 阅读 · 0 评论 -
Polay定理总结
polya定理主要就是解决一类着色问题,或者说是同构计数问题。对Ω的n个目标用m种颜色着色的图象集种类数。定理的内容:Pólya定理:设G={p1,p2,…,pg}是Ω上的一个置换群,C(pk)是置换pk的循环的个数,用M中的颜色对Ω中的元素着色,着色方案数为 l = 1/|G|*[c1(p1)+c1(p2)+c1(p3)+...c1(p[g])]=1/|G|*[m^c(p1)+m转载 2013-10-02 19:10:29 · 1863 阅读 · 0 评论 -
忘我之乘积的解答
Q: Given array a [n], Get array b [n] b [i] = a [0] * a [1] ... a [n-2] * a [n-1] / a [i] Requirements can not be used to divide In addition to traverse the counter with a [N] b [N], do not use原创 2013-07-04 10:45:11 · 603 阅读 · 0 评论 -
最大最小堆介绍
最大最小堆1. 定义:最小最大堆是一棵完全二叉树,且其中每个元素有一个key数据成员。树的各层交替为最小层和最大层。根结点在最小层。设x是最小最大堆的任意结点。若x在最小(最大)层上,则x中的元素的key值在以x为根的子树的所有元素中是最小(最大)的。位于最小(最大)层的结点称为最小(最大)结点。2. 特征:(1) 插入一个具有任意key值的元素(2) 删除ke转载 2013-07-19 09:26:32 · 1803 阅读 · 0 评论 -
最长公共子字符串 (Longest Common Substring)
问题:字符串 "ABABC", "BABCA" 最长公共子字符串是 "ABC"?solution1: suffix tree建立suffix tree时间复杂度是O(N), 查找公共子字符串的代价是O(m+n), m和n分别是两个字符串的长度。关于suffix tree请参考http://mila.cs.technion.ac.il/~yona/suffix_tree/原创 2013-06-21 18:14:51 · 1219 阅读 · 0 评论 -
二分搜索的应用
Binary Search 总所周知,在处理一些实际问题中也有很好的应用。举例如下:问题:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5} 是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。 答案: 二分解决。注意到a[0]5 /** 6 * @func: the binary search fur descendin原创 2012-12-11 14:47:11 · 1118 阅读 · 0 评论 -
机器人找金币
Q: 一个机器人一天能够找到4个金币,而50个金币可以购买新的机器人,问:在第N天,能够找到的金币数量的最大值?A:简单分析可得,如果有足够的钱,越早换机器人,对于不久后的某一天找到的金币数量越多。于是,依据动态规划的方法,构造一个换机器人的天数以及剩余金币的列表。然后,遍历这个列表找到金币最多的机器人数。结果可得。struct data{ int remain原创 2012-08-06 17:30:41 · 1753 阅读 · 0 评论 -
In-place Counting Sort
计数排序用于一定范围内的整数,并且这些整数的值比较小。该算法通过统计每个整数在序列中出现的次数来实现排序。由于它不是通过比较实现排序的,所以nlgn并不是复杂度的下限。当然,计数排序经常作为基数排序的子程序,由此基数排序能够更有效的处理大的key值。它比桶排序相比,桶排序的每一个桶需要链表或者动态数组来存储数据。 #define MAXCNT 10void counting_sor原创 2012-02-21 09:57:50 · 851 阅读 · 0 评论 -
Random Number Generation
原文链接如下:http://www.cs.ucl.ac.uk/staff/d.jones/GoodPracticeRNG.pdf我只是进行了简单的翻译,目的是进一步了解KISS算法。平时,当code中需要随机数的时候,我们往往求助于系统的函数,例如c语言的rand()函数。事实上,这些函数本省存在缺陷,它们不能够提供很好的随机数。当然在code中,不可能提供完全随机的数字,最好的状态只翻译 2012-02-27 15:55:41 · 1716 阅读 · 0 评论 -
蓄水池算法简介
从N个元素中随机抽取k个元素,但是N不定。每个元素抽取的概率是k/N。先选中前k个,从k+1到最后一个元素,以1/i (i = k+1, k+2, ... N)的概率选中第i个元素,并且随机替换一个原来选中的元素。 1 from random import Random 2 3 def RandomSelect(knum, rand=None): 4 selec原创 2013-07-04 10:51:29 · 926 阅读 · 0 评论