- 博客(71)
- 资源 (2)
- 收藏
- 关注
原创 lock free的循环队列
<br />1. 如果是一个生产者和一个消费者,则只需对读写index的更新是原子的就可以了,这种情况下只需要两个atomic的变量就搞定<br />2. 如果是多个生产者,则采用这种方式:<br /> a. 生产者原子的预定一个写的位置<br /> int curWriteIndex = writeIndex;<br /> do{<br /> curWriteIndex = wirteIndex;<br /> }while(cas(
2011-02-26 19:08:00 1127
原创 关于锁的一些想法
<br />1. 程序在进入临界区后有各种原因是被换出,中断,调度,阻塞等<br />2. 临界区内要短<br />3. spin lock要慎用,如果是使用spin lock,但是临界区太大,进入临界区的线程被调度,则另一个被调度的线程会忙等,白白浪费cpu,因此,一定要是多个cpu,且临界区很简单才能用spin lock,否则还是要容忍sleep带来的开销<br />4. 如果想用spin lock,但是不能确定这个lock的竞争情况和执行情况,可以用常规锁,执行代码,观察cpu 的利用率
2011-01-23 19:33:00 567
原创 最大间隙问题
<br />给定n个实数,求出相邻的两个数,这两个数的差值是所有相邻数的最大<br />例如 ,1 ,3 ,7,8, 则答案是3,7<br /> <br />思想如下:<br />找出最大值和最小值,则所有的两个数 m- n > (max-min)/n - 1<br />因此,设定n -1 个区间,区间长度为 (max -min )/ n - 1, 将所有数按照与min的差值映射到这些区间里<br />则所有的两个数必然是两个相邻区间的最大值和最小值。 因为区间内的数的差值是小于上面的平均数的。<br /
2011-01-23 19:29:00 1014
原创 linux 内存管理
<br />只是大概谢谢,笔记类型的。<br />1. 以页位单位<br />struct page {<br /> page_flags_t flags; //标记:是否需要写出,是否被锁在内存等,在linux/page-flags.h 中定义<br /> atomic_t _count; //页面引用计数<br /> atomic_t _mapcount; //有多少个页
2011-01-15 17:28:00 811
原创 很久未来,mark
<br />一年多未来了,换工作了,结婚,买房,生小孩了,msn上最早的日志都是5年多以前的了,时间飞逝,还是尽量写写,给未来留下一些什么吧<br />1. 换工作,其实都差不多,该干啥干啥<br />2. 现在没以前那么多的牢骚,没以前那么多的写东西热情,觉得一切都是骚包,其实骚包挺好<br />3. 总体来讲生活还是比较无聊,该好好跟儿子玩玩<br />4. 该学习还是要学习,要涨工资啊
2010-11-06 23:17:00 529
原创 gamm encoding
http://en.wikipedia.org/wiki/Elias_gamma_coding适合对大部分数都是比较小的数进行压缩
2010-05-28 11:56:00 728
原创 隐马尔可夫模型
前一篇文章没有系统地介绍这个模型,本篇文章将详细介绍1. 定义:The Hidden Markov Model is a finite set of states, each of which isassociated with a (generally multidimensional) probability distribution[]. Transitions a
2009-06-17 11:34:00 4575
原创 隐式马尔科夫链与维特比算法
1. 隐式马尔科夫链: 马尔科夫链是一系列的状态转换,设为x1...xn,其中xn至于xn-1相关,假设xi 会以p(i)的概率产生yi, 如下图所示: 观察到的是Y的序列,由于X序列不可见,是隐式的,因此称为隐式马尔科夫链 真实系统中,x与y之间有可能不是一一对应的关系,但总有一个从X到Y的概率 现在我们观察到了一个Y的序列,要计算如下两件事情:1. Y这个序
2009-06-15 20:02:00 8202 2
原创 语言模型
1. 对检索用户的通常建议是使用在文档中出现的词作为query,因此,如果一篇文章与查询词相关,那么这篇文章的模型可以生成这个query,因此检索模型从P(R = 1|q, d) 变为了P(q|Md),Md是文章的模型 2. 语言模型: a. 形式语言,例如有限状态自动机,根据文法来产生语言b. 不确定的状态的自动机,每一个状态可以以不同的概率产生不同的词或者结束例如状态q1:
2009-06-13 18:03:00 2899
原创 统计陷阱读书笔记
第一章 内在有偏的样本主要将通过偏差的样本来获得想要的数据,文中举例耶鲁大学毕业生的工资来说明这个问题,给出统计结论时却并未给出样本,通过合理的猜测,可以知道这样的样本是有偏差的,例如能联系上的人一般都不穷,愿意告诉别人自己工资的人更不穷 第二章 精心挑选的平均数一般给统计结论时却并不给出是那种平均数,是算术平均还是中位数或者是众数,通过这种方式来欺骗人,例
2009-06-10 20:59:00 2921
原创 向量空间模型
一: 不同区域的权重计算1. 对出现在文档的不通区域的term赋予不同的权值,例如title,author,body等,这样需要在倒排表中记录term每一次出现的位置2. 对不同的区域赋予不通的权值,Gi, 使得 Sum(Gi) = 13. 对于这个Gi的值,可以通过机器学习的方法来确定:给定一个文档集合和query,以及query与文档之间的相似性,然后假定一个表达式,采用这个样本
2009-05-24 15:02:00 2949 2
原创 倒排表交集的计算
1. 对倒排表进行排序2. 对排序后的倒排表进行求交集的时间复杂度是o(n + m)3. 两两合并和多路同时合并的效果差不多4.可以采用跳表来加速合并过程,所谓跳表即是 因此在查询时可以根据快表进行跳转,但快表的长度不宜太长或过短,经验值是log(n)
2009-05-16 23:43:00 1329
原创 词典压缩
1. 压缩目的: 将整个词典放在内存,避免多次访问硬盘2. 假设压缩前词典采用定长数组格式,每个数组的类型如下: struct{ char term[k]; int freq; pointer posting;} 假设指针长度为4, 则一个term耗费的内存为k + 4 + 4, 这里显然的浪费是在k,因为必须要指定一个定长的k。 因此一种压缩思路就
2009-05-16 23:29:00 1357
原创 通配符匹配
问题描述:对于一个给定的词典S和一个包含通配符的查询传a*b, 在词典中找出匹配a*b的所有串 1. 词典的结构: 对于匹配类,通常来说树结构是适用的2. 假设词典是树结构,切通配符在串的最后,即类似ab*这样,我们可以从树的根节点开始,沿着ab向下,找到所有的匹配串3. 那么对于a*b呢? 我们先考虑*ab的情况,如果我们的词典对每个串按反序也建立一颗树,即串abcd,我们有一颗
2009-05-16 15:42:00 2111
原创 建立索引
1. 索引是指倒排表两种算法如下:a. 将termid--docid 进行排序,termid为主键,docid为次键,然后建立termid到docid的倒排,例如:I --- 1 AB ---3 AB[1] ---3I ----2 ----> I -----1 --------
2009-05-14 14:17:00 705
原创 检索系统的硬件基础
一,基本的硬件时间如下: SymbolStatisticValue average seek time5 ms <!-- MATH $5/times 10^{-3}$ --> s transfer time per byte0.02 s <!-- MATH $2 /times 10^
2009-05-14 11:28:00 565
原创 double array trie
Trie 用于前缀匹配,在搜索引擎的切词中有广泛的引用,但trie占有空间太多,因此有doube array trie,参考文章:http://linux.thai.net/~thep/datrie/datrie.html 构建trie的方法主要有两种,一种是动态构建,如参考文章里的,另一种就是批量构建,算法如下:将所有的输入词进行排序,例如输入词是ab,ac,cd,ef则排好
2009-05-10 16:22:00 1793
转载 x-headers
原文链接:http://www.yeeyan.com/articles/view/37503/37323英文链接:http://mobiforge.com/developing/blog/useful-x-headers X头域解析191个读者 biAji@ yeeyan.com 2009年04月15日 双语对照 原文
2009-05-07 15:10:00 4184
原创 sparse-table
google的sparse table的结构主要思想:1. 首先是一个数组2. 并不真正地分配数组的每一个元素占用的空间3. 用一个bitmap来管理数组的每一个元素是否有值,如果有值,则分配空间4. 将数组分段,提高查询bitmap和在数组里增加新空间时的效率 参考文章地址:http://google-sparsehash.googlecode.com/svn/tru
2009-05-06 11:46:00 2294
原创 suffix tree,python 版
代码如下:## A Suffix-tree implementation#NODE_COUNT = 1class EdgeSet: Save edge, edge is identified by start node and first char def __init__(self): self.dict = {} def add
2009-04-19 22:18:00 2197
原创 Linux 内核中的 GCC 特性[zhuan]
文档选项<trvalign="top"><img alt="" height="1" width="8"src="//www.ibm.com/i/c.gif"/><img alt="" width="16"height="16" src="//www.ibm.com/i/c.gif"/><td class="small"
2009-04-09 22:39:00 905
原创 tc malloc
OverviewTCMalloc assigns each thread a thread-local cache. Small allocationsare satisfied from the thread-local cache. Objects are moved fromcentral data structures into a thread-local cache
2009-04-09 21:52:00 1514
原创 tcp rst packet
研究生期间有一段时间就总被connection reset by peer折磨,昨天又遇到这种情况,郁闷,不得不搞清楚了 Shutting down a socket connection involves an exchange of protocolmessages between the two endpoints, hereafter referred to as a shut
2009-04-07 19:44:00 3879
原创 产生随机树,从randk 产生 randn
主要使用方法是Rejection sampling描述如下:1. 如果n 2. 如果n >k, 则将n转换为k进制的数,然后根据n的位数产生几个随机数,将这个几个随机数作为n的不同位,联合起来作为产生的随机数,如果大于n,则拒绝,例如k=7,n = 10, 则n是2位数,调用rand7两次,将这两个随机数组装在一起,按7进制计算大小,如果大于10,则拒绝。 证明:由于每一位
2009-03-29 19:42:00 814
原创 in-place merge
问题描述:有一个数组a1...anb1...bn,在o(n)的时间内,o(1)的空间内,将数组merge为a1b1...anbn 解决方法:1. 直观地方法,计算每个元素的最终位置,并进行移动,问题,多个cycleFor instance consider the case when n=41 2 3 4 5 6 7 8It should become5 1 6 2 7 3 8 4
2009-03-29 19:04:00 641
原创 Subset sum problem
给一个整数集合s和一个整数n,请问s中是否存在一个子集合,这个集合里的元素和 等于 n 采用动态规划进行求解:1. 设集合x的最小和以及最大和分别是min,max,设一个二维数组 m[n][max-min]m[i][s] = 1表示找到了x[1...i]的一个子集和等于s 因此初试条件:m[1][x1] = 1递推关系: m[2][x] = 1
2009-03-29 13:06:00 3076
原创 杂记
1. pre-fork的多进程模型 在web server中广泛使用,即父进程先创建listen socket,然后fork子进程,所有子进程都在accpet同一个socket,这种方法去掉了fork的开销,在早期的linux版本中会存在惊群现象,意思是当有一个连接到来时,所有的进程都会被唤醒,但现在不会 2. 如何求一个数是不是平方数:最简单的方法,对1...n 进行binary s
2009-03-29 12:26:00 524
转载 how to copy a linkedlist
Copy link-list, If You Can Make a seprate copy of a linked list that has an extra pointer than theregular ones. This pointer points to any randam node in thelist.i.e.::node structure
2009-03-12 13:16:00 558
原创 一段痛苦的记录
......................................................如此痛苦的工作,换工作也是高不成低不就,还是有该死的xx公司,忍啊忍啊,我的生活暗淡无光,我很想很想爆发,强忍强忍,除了叹气还是叹气,慢慢找工作吧,一段经历,一辈子的痛苦铭记!!!
2009-03-05 21:05:00 544
原创 python mro computing
1. mro , metod resolutin order,用于决定方法的解析顺序,即确定调用那一个类中的方法2. 解析时要遵循的标准: a. 本地顺序:在一个类C的直接父类解析顺序要与写在c的声明中一致,例如C(A,B),如果A,B都有一个同名的函数,那么在调用C.xxx时应该调用A的这个方法,而非B的方法 b. 单调性,即如果在c的解析顺序里,A排在B的前面,那么
2008-11-23 17:17:00 1268
原创 python namespace and variable scope
python 有三个名字空间:1. 函数以及这个函数的外层函数2. 函数所在的模块3. built-inpython的搜索顺序从1-2-3函数和类的属性都是属于1所在的名字空间变量的作用域跟名字空间的地位相等,1里的变量只能在1里面被使用2里面的变量如果在1里面没有用global声明,那么该变量只是可读,如果进行写,那么只是创建一个新的变量而已def scope(): print t
2008-07-15 23:18:00 1778
原创 test notation from testNG
1. before和after系列 beforeSute,afterSuite,beforeCase, afterCase,以及他们的alwaysRun,一般情况下before的alwaysRun为true,但是after却可以用这个参数来配置在case运行失败的情况下的动作2. 将case组织为group,定制某个group是否运行,例如将case分为check-in和func
2008-07-13 23:37:00 610
原创 python object creation
python里everything is object,object creation主要涉及到一下几个函数1. __init__(self,*args,*kgs)2.__new__(cls,*args,**kgs)3.__call__(self,*args,**kgs)首先介绍这三个函数,接着介绍创建class本身这个对象,以及metaclass时这几个函数的具体调用顺序
2008-07-10 15:34:00 698
原创 [ZT]Understanding Python's "with" statement
Understanding Pythons "with" statementFredrik Lundh | October 2006 | Originally posted to online.effbot.orgJudging from comp.lang.python and other forums, Python 2.5’s new with statement
2008-07-01 23:07:00 559
原创 python generator / yield statement
所谓generator就是类似一个迭代器,从外面看的效果就是 for var in generator:{do something}实现方法大体分为几类:1. next方法,需要generator能够记住自己的状态,在递归的情况下很难2. 回调函数的方法,传一个函数给generator,每次有数据的时候调用这个函数,使用方式发生了变化,generator必须知道这个回调函数,并且回调函
2008-06-30 23:01:00 1637
原创 python descriptor 与 attributor search order
1. descriptor是一个对象,是一个class2.descriptor是一个有__get__,__set__,__delete__方法的类3.假设D是一个有上面三个方法的类,E是一个类,其中d是其的一个成员,d是D的实例,e是E的一个实例,e.d会调用D的__get__方法,get方法的参数为(self = d,obj = c,type = C) , e.d = f会调用d的__set__
2008-06-08 16:45:00 1010
原创 python object and class
pyhton 的class 与java,c++的大不相同,经过一段时间的迷茫,总结一下:1.pyhton里所有的东西都是对象,即class也是一个对象,java里的class虽然也是一个Class的实例,但基本上是一个数据和函数的集合体,是不放具体东西的,但python不一样,不一样的地方如下:a. python里所有对象可以动态地添加新的属性,当类动态地添加属性后,类的实例都能访问到该对象,其实
2008-06-02 22:57:00 6387
原创 python 如何parse缩进
parse时,采用一个堆栈,遇到缩进,将该缩进量压入堆栈,当读入新的一行时,如果该行的缩进等于栈顶的缩进,则不做任何操作,如果大于,则将该缩进量压入堆栈,并且生产一个indent token,如果小于,则从栈顶一次pop直到新的栈顶等于当前缩进量,对每个pop的产生一个dedent,indent和dedent将用于词法分析。
2008-05-03 22:10:00 986
原创 python __slots__
python新模式的class,即从object继承下来的类有一个变量是__slots__,slots的作用是阻止在实例化类时为实例分配dict,默认情况下每个类都会有一个dict,通过__dict__访问,这个dict维护了这个实例的所有属性,举例如下class base(object): v = 1 def __init__(self): passb = bas
2008-05-03 21:38:00 17739
Aggregated Search
2018-10-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人