随笔分类 -  算法与数据结构

摘要:加权随机算法一般应用在以下场景:有一个集合S,里面比如有A,B,C,D这四项。这时我们想随机从中抽取一项,但是抽取的概率不同,比如我们希望抽到A的概率是50%,抽到B和C的概率是20%,D的概率是10%。一般来说,我们可以给各项附一个权重,抽取的概率正比于这个权重。那么上述集合就成了: {A:5,B 阅读全文
posted @ 2016-09-28 21:16 godjob 阅读(16545) 评论(0) 推荐(0) 编辑
摘要:Simon Cooke,美国 (原作者) 北京理工大学 20981 陈罡(翻译) 写在前面的话: 循环缓冲区是一个非常常用的数据存储结构,已经被广泛地用于连续、流数据的存储和通信应用中。对于循环缓冲区,传统的操作方法是开辟一块连续的存储区,不 断地写入数据,当写入到存储区的末尾的时候,再从存储区的首 阅读全文
posted @ 2016-08-23 21:31 godjob 阅读(2407) 评论(0) 推荐(0) 编辑
摘要:Introduction The Bip-Buffer is like a circular buffer, but slightly different. Instead of keeping one head and tail pointer to the data in the buffer, 阅读全文
posted @ 2016-08-23 21:30 godjob 阅读(469) 评论(0) 推荐(0) 编辑
摘要:Contents What is Trie? Trie is a kind of digital search tree. (See [Knuth1972] for the detail of digital search tree.) [Fredkin1960] introduced the tr 阅读全文
posted @ 2016-08-03 23:13 godjob 阅读(368) 评论(0) 推荐(0) 编辑
摘要:首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配 阅读全文
posted @ 2016-08-03 22:36 godjob 阅读(1345) 评论(0) 推荐(0) 编辑
摘要:首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一 阅读全文
posted @ 2016-07-06 00:44 godjob 阅读(452) 评论(0) 推荐(0) 编辑
摘要:Download source code - 20.3 KBWhat is libconhashlibconhash is a consistent hashing library which can be compiled both on Windows and Linux platforms, ... 阅读全文
posted @ 2016-01-11 21:52 godjob 阅读(341) 评论(0) 推荐(0) 编辑
摘要:物理大师Susskind 斯坦福讲狭义相对论课(新浪公开课,以下视频第27'31''左右)http://open.sina.com.cn/course/id_80/也会记错坐标系旋转变换公式。而您一旦用以下这图解方法,随时眼见显然,再也不会搞错。 阅读全文
posted @ 2015-10-26 10:07 godjob 阅读(1266) 评论(0) 推荐(0) 编辑
摘要:Point-In-Polygon Algorithm — Determining Whether A Point Is Inside A Complex Polygon© 1998,2006,2007 Darel Rex Finley. This complete article, unmodifi... 阅读全文
posted @ 2014-09-27 20:23 godjob 阅读(849) 评论(0) 推荐(0) 编辑
摘要:题目:两个字符串,一个是普通字符串,另一个含有*和?通配符,*代表零个到多个任意字符,?代表一个任意字符,通配符可能多次出现。写一个算法,比较两个字符串是否相等。发现许多公司笔试面试都有这道题目,于是自己搜了一下,从redis源码util.c源文件中可以找到这么一个函数,实际上glib中也有类似的实现int stringmatch(const char *pattern, const char *string, int nocase) { return stringmatchlen(pattern,strlen(pattern),string,strlen(string),nocase)}st 阅读全文
posted @ 2013-10-18 19:48 godjob 阅读(5834) 评论(0) 推荐(0) 编辑
摘要:这篇文章是stackoverflow的一篇帖子。上面提到了很多有用的数据结构。有的听过了,经常用,有的没有听过,记录下来。Trie树。应用比较多,一个比较cool的trie的应用TRASH-A dynamic LC-trie and hash data structure。Bloom filter。wiki链接删除某一项是不允许的,不过可以实现可计数的counting bloom filter在BigTable,Cassandra中都有使用可以用来快速检查是否拼写错误Rope:rope 数据结构表示不能修改的字符序列,与 Java 的 String非常像。但是 ropes 效率奇高的字符串变换 阅读全文
posted @ 2013-09-11 15:20 godjob 阅读(367) 评论(0) 推荐(0) 编辑
摘要:原理 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K 阅读全文
posted @ 2013-07-01 19:51 godjob 阅读(278) 评论(0) 推荐(0) 编辑
摘要:问题描述给定一个字符串,求出其最长重复子串例如 abcdabcd最长重复子串是 abcd最长重复子串可以重叠例如abcdabcda这时最长重复子串是 abcda中间的 a 是被重叠的。直观的解法是,首先检测长度为 n - 1 的字符串情况,如果不存在重复则检测 n - 2, 一直递减下去,直到 1 。这种方法的时间复杂度是 O(N * N * N),其中包括三部分,长度纬度、根据长度检测的字符串数目、字符串检测。改进的方法是利用后缀数组后缀数组是一种数据结构,对一个字符串生成相应的后缀数组后,然后再排序,排完序依次检测相邻的两个字符串的开头公共部分。这样的时间复杂度为:生成后缀数组 O(N)排 阅读全文
posted @ 2013-04-12 23:11 godjob 阅读(297) 评论(0) 推荐(0) 编辑
摘要:CS 312 Lecture 25Splay TreesA splay tree is an efficient implementation of a balancedbinary search tree that takesadvantage of locality in the keys used in incoming lookup requests.For many applications, there is excellent key locality.A good example is anetwork router. A network router receives net 阅读全文
posted @ 2013-04-12 10:55 godjob 阅读(317) 评论(0) 推荐(0) 编辑
摘要:1、常见数据结构线性:数组,链表,队列,堆栈,块状数组(数组+链表),hash表,双端队列,位图(bitmap)树:堆(大顶堆、小顶堆),trie树(字母树or字典树),后缀树,后缀树组,二叉排序/查找树,B+/B-,AVL树,Treap,红黑树,splay树,线段树,树状数组图:图其它:并查集2、常见算法(1) 基本思想:枚举,递归,分治,模拟,贪心,动态规划,剪枝,回溯(2) 图算法:深度优先遍历与广度优先遍历, 最短路径,最小生成树,拓扑排序(3) 字符串算法:字符串查找,hash算法,KMP算法(4) 排序算法:冒泡,插入,选择,快排,归并排序,堆排序,桶排序(5) 动态规划:背包问题 阅读全文
posted @ 2013-04-10 23:07 godjob 阅读(203) 评论(0) 推荐(0) 编辑
摘要:开篇我先给出一个外国的splay tree的演示demo,跟着这个demo看下面的文章对你理解splay tree 有很大的帮助,并且里面有实现好的C语言版和java版 的splay tree(网站中输入节点个数会自动生成树,可以对其任意造作)网站衔接:http://www.link.cs.cmu.edu/cgi-bin/splay/splay-cgi.pl一、简介:伸展树,或者叫自适应查找树,是一种用于保存有序集合的简单高效的数据结构。伸展树实质上是一个二叉查找树。允许查找,插入,删除,删除最小,删除最大,分割,合并等许多操作,这些操作的时间复杂度为O(logN)。由于伸展树可以适应需求序列 阅读全文
posted @ 2013-04-10 22:47 godjob 阅读(1790) 评论(0) 推荐(0) 编辑
摘要:在看libevent源码中TAILQ的时候发现了一些让我迷惑的地方,就是里面的双端队列以及链表中节点的next与prev指针,它的设计与我们一般的链表以及linux内核的list完全不一样,因为里面的prev根本不是指向前一个节点,而是指向前一个节点的next元素的地址:#define TAILQ_HEAD(name, type) \struct name { \ struct type *tqh_first; /* first element */ \... 阅读全文
posted @ 2013-03-29 17:37 godjob 阅读(2135) 评论(0) 推荐(0) 编辑
摘要:View Code 1 /* 2 Source Code for Cryptography (Just a touch) 3 4 5 6 SOURCE CODE FOR MD5 7 8 md5.h (the include file for the above C code) 9 10 Karn Encryption: Symmetric Secret with MD5 11 12 SHA-1 By Steve Reid 13 14 RSA Crypto Toolkit Totality 15 16 DES Encrypti... 阅读全文
posted @ 2012-10-21 23:45 godjob 阅读(548) 评论(0) 推荐(0) 编辑
摘要:最近在看国外某个开源的 C语言算法库,可能知名度不是很高,但是比较容易看懂,适合入门,今天看到了一个Trie这个文件的代码,原本不知道这是什么意思的,看来一下代码之后发现每个节点都会有256大小的节点数组,256和什么对应呢?没错,作为一个程序员你应该对256这个数字很熟悉,那是因为有256个ASSIC,这里256是一个byte的大小。实际上也就是将字符转换为字节形式(无 符号非负整数),然后从高字节向低字节逐个检测,按照字节所表示的数字放到对应数组的位置上,在这个位置建立一个结点node,再取出下一个字节,对应放 入node的数组位置上,直到字符串的字节形式被完全遍历,那么就得到了这个字符串 阅读全文
posted @ 2012-10-01 01:17 godjob 阅读(323) 评论(0) 推荐(0) 编辑
摘要:A*寻路初探(转载)作者:Patrick Lester译者:Panic2005年译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念。这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为学习人工智能的开始。这篇文章非常知名,国内应该有不少人翻译过它,我没有查找,觉得翻译本身也是对自身英文水平的锻炼。经过努力,终于完成了文档,也明白的A*算法的原理。毫无疑问,作者用形象的描述,简洁诙谐的语言由浅入深的讲述了这一神奇的算法,相信每个读过的人都会对此有所认识(如果没有,那就是偶的翻译太差了--b)。现在是年月日的版本,应原作者要求,对文中的某些 阅读全文
posted @ 2012-06-08 17:16 godjob 阅读(233) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示