Friday, September 24, 2010

to count the number of "1" for any input integer

first asking for an input, and transfer it into binary, then count the number of "1"
    int func(x)     {    
           int countx = 0;    
           while(x)      {      
                    countx ++;      
                    x = x&(x-1);      
           }    
           return countx;    
       }

Sunday, September 19, 2010

[ZT]A/B 向上取整的方法

作者:孙雪青
1. 问题
A,B都是整数并且 A>1, B>1
求 ┌ A/B ┐ 即 A/B 的上取整。
当 A/B 整除,往上取整返回值 为 A/B。
当 不整除,返回值是 int(A/B) + 1
这个算法的一个应用:如果你有一个动态增长的缓冲区,增长的步长是 B,
某一次缓冲区申请的大小是 A,这个时候,就可以用这个算法,计算出缓冲区的一个合
适大小了,正好可以容纳A,并且不会过于得多,多余部分不会比B多。
2. 方法
int( (A+B-1)/B )
3. HUNTON 的证明
上取整用UP表示
由于A>1、B>1,且A、B都是整数,所以可以设A=NB+M
其中N为非负整数,M为0到B-1的数,则
A/B = N + M/B
(A+B-1)/B = N + 1 + (M - 1)/B;
当M为0时,
UP(A/B) = N,
int((A+B-1)/B) = N + int(1 - 1/B) = N
当M为1到B-1的数时,0 <= M-1 <= B-2
UP(A/B) = N + 1,
int((A+B-1)/B) = N + 1 + int((M-1)/B) = N + 1
所以对A>1、B>1的整数A、B都有:
UP(A/B) = int((A+B-1)/B)

Saturday, April 10, 2010

中文量词趣谈

  一些平常的词句,例如“二十里山路”、“一杯咖啡”,其中的“二十”和“一”是数词;“里”和“杯” 是量词。这里数量词的用法在中文和英文、俄文等文字中是相似的。但是,中文里的量词用法远不是这么简单。

中文里说“一只羊”、“一条牛”、“一口猪”,这里的量词各不相同,但意思差不多。而在外语中却往往被省略掉了。量词的复杂用法,常常使学习汉 语的老外们感到难于掌握,其实这正是汉语词汇丰富多采的魅力所在。

首先是同一个名词,可以有不同的量词来搭配。比如说,一条船,一只船,大约没有什么区别,但是要说一艘船,可能就是比较大的船了,而有文学色彩 的“一叶轻舟”,那么这就是很轻巧的小船了。再比如说“一朵玫瑰”,一定是指玫瑰的花朵;“一只玫瑰“,就可能是带着枝叶的花朵;“一株玫瑰”则是包括了 根茎叶和花朵的整个植株,可以继续生长的生命体;“一盆玫瑰”指一棵独立的绿色植物,甚至可以是没有玫瑰花朵和花骨朵的只有根茎叶的盆栽。

另一种情况,许多不同的名词,却用同一个量词来表达。例如“条”。我们把许多性质不同、但形状大约都窄而长的物体都以“条”计量。例如一条河; 一条路;一条水渠;一条隧道;一条船;一条围巾;一条毛毯;一条裤子;一条裙子;一条黄瓜;一条丝瓜;一条肥皂;一条香烟;一条绳索;一条锁链;一条鞭 子;一条辫子;一条蛇;一条鱼;一条牛;一条尾巴……哎呀,一口气说下去,可以继续说出许多。还有对抽象名词讲的,例如一条意见;一条措施;一条规定;一 条纪律;一条指令;一条法律;一条界线……等等,等等。

体型硕大的牛,并不窄长,为什么用“条”计量呢?我想,在对一群牛计数的时候,数数的人可能看到每只牛身后有一条显著的粗而且长的尾巴,数牛只 数尾巴,以牛尾巴的数量代替牛的数量,于是就说成几条牛。如果数牛脑袋呢,就会说成几头牛了。

动物大多可以用“只”计量,人大多可以用“个”计量。例如说一个人;一个学生;一个护士;一个战士;一个运动员;也可以用“名”,说“一名学 生”等等,这是着重于统计数字的中性计量词。如果比较尊重的说法,要用“位”。例如一位教授;一位医生;一位代表;一位领队;一位翻译……。人死了,则不 分贵贱,都用一个特殊的量词,说一具遗体,一具尸体了。

前面我们说,许多外语中,对量词是省略不用的。说句老外不中听的话,那是他们的词汇疲乏。汉语中许多常用的量词信口说来千变万化,已经让学习汉 语的老外们眼花缭乱,接应不暇。

有些文学作品中量词的使用更达到出神入化、叹为观止的水平。

明末的文人张岱有一篇著名的小品文《湖心亭赏雪》,是短隽有味的典范之作。其中有这么一句:

湖上影子,唯长堤一痕,湖心亭一点,

与余舟一芥,舟中人两三粒而已。

西湖雪夜,万籁无声,上下一白,惟有“一痕”、“一点”、“一芥”、“两三粒”,点缀在这片晶莹雪白之中,颇像一幅淡雅的水墨画。这几个量词的 使用,让读过这篇短文的人过目难忘,印象深刻。无不钦佩作者驾驭文字的能力达到炉火纯青的地步。
作者:梁域卉   文章来源:北京科普之窗

Monday, April 5, 2010

从前有棵树叫高数,上面挂了很多人

很久很久以前,在拉格朗日照耀下,有几座城:分别是常微分方城和偏微分方城这两座兄弟城,还有数理方程、随机过城。从这几座城里流出了几条溪,比较著名的 有:柯溪、数学分溪、泛函分溪、回归分溪、时间序列分溪等。其中某几条溪和支流汇聚在一起,形成了解析几河、微分几河、黎曼几河三条大河。

河边有座古老的海森堡,里面生活着亥霍母子,穿着德布罗衣、卢瑟服、门捷列服,这样就不会被开尔蚊骚扰,被河里的薛定鳄咬伤。城堡门口两边摆放着牛墩和道 尔墩,出去便是鲍林。鲍林里面的树非常多:有高等代树、抽象代树、线性代树、实变函树、复变函树、数值代树等,还有长满了傅立叶,开满了范德花的级树…人 们专门在这些树边放了许多的盖(概)桶,高桶,这是用来放尸体的,因为,挂在上面的人,太多了,太多了…

这些人死后就葬在微积坟,坟的后面是一片广阔的麦克劳林,林子里有一只费马,它喜欢在柯溪喝水,溪里撒着用高丝做成的ε-网,有时可以捕捉到二次剩鱼。
后来,芬斯勒几河改道,几河不能同调,工程师李群不得不微分流形,调河分溪。几河分溪以后,水量大涨,建了个测渡也没有效果,还是挂了很多人,连非交换代 树都挂满了,不得不弄到动力系桶里扔掉。
有些人不想挂在树上,索性投入了数值逼井(近)。结果投井的人发现井下生活着线性回龟和非线性回龟两种龟:前一种最为常见的是简单线性回龟和多元线性回 龟,它们都喜欢吃最小二橙。

柯溪经过不等市,渐近县和极县,这里房子的屋顶都是用伽罗瓦盖的,人们的主食是无穷小粮。
极县旁有一座道观叫线性无观,线性无观里有很多道士叫做多项士,道长比较二,也叫二项士。线性无观旁有一座庙叫做香寺,长老叫做满志,排出咀阵,守卫着一 座塔方。一天二项士拎着马尔可夫链来踢馆,满志曰:“正定!正定!吾级数太低,愿以郑太求和,道友合同否?”二项士惊呼:“特真值啊!”立退。不料满志此 人置
信度太低,不以郑太求和,却要郑太回归。二项式大怒在t密度函树下展开标准分布,
布里包了两个钗钗,分别是标准钗和方钗。满志见状央(鞅)求饶命。二项式将其关到希尔伯特空间,命巴纳赫看守。后来,巴纳赫让其付饭钱,满志念已缴钱便贪 多吃,结果在无参树下被噎死(贝叶斯)。

Sunday, March 21, 2010

读博和大便的相同点

 1. 都是憋出来的;
 2. 肚子里有货才爽,否则很痛苦;
 3. 即便肚子里面有货,也得有paper才行;
 4. paper越多心里越踏实;
 5. paper上的都是屎;
 6. 一般来说paper不能是别人用过的;
 7. 当然,即使paper虽然是别人用过的,但是看不出来就行;
 8. 运气够好的话可以借到paper;
 9. 没有paper的话,如果你很有钱也能解决问题;
10. 实在没有paper,直接拍拍屁股走人是很需要勇气的;
11. 读博和大便的缩写都是db。

LISP语言的主要特点

优点
(1) LISP具有和图灵机相同的(也就是理论上最高的)计算能力;
在计算机科学的可计算理论中,人们已经证明递归函数和图灵机具有相同的(也就是理论上最高的)计算能力,通常指的是自然数集上的递归函数。这个结 论对符号集上的递归函数也成立。J.McCarthy在LISP中设计了一套符号处理函数,它们具有符号集上的递归函数的计算能力,因此原则上可以解决人 工智能中的任何符号处理问题。
(2)数据类型的唯一性,程序与数据的一致性;
LISP的数据类型和句法结构简单,甚至简单到具有唯一性和一致性:其数据和程序的表现形式是一样的, 都是用S-表达式一种形式.基本的数据结构是表(表是S-表达式的特例)。
(3)数据和程序的 等价性;
LISP的数据和程序不仅类型一致,而且作用也等价;
即:程序可作为数据被处理,数据也可作为程序来执行。
(4)LISP一切功能由函数来实现,程序的运行就是求值;
LISP程序的通常形式是一串函数定义,其后跟着一串带有参数的函数调用,函数之间的关系只是在调用执行时才体现出来。
(5)LISP语言的控制结构以递归为主;
大多数语言使用的控制结构是以循环为主的,有的程序语言允许递归,而LISP以递归形式为主。递归是LISP能力的源泉。当然现在LISP也有循 环结构和迭代。
(6)原子可以有任意多个值(特性值);
LISP非常重要的一个特点是每个文字原子可以加许多特性,每个特性有一个特性表及对应的特性值。由于原子的多值性给使用者带来很多方便,给问题 表示带来好处,使LISP很好用。
(7)LISP具有表的结构形式和规模的灵活性,不必预先设定;
(8)具有收集无用单元的功能。

缺点
(1)初学者不容易习惯LISP的句法结构,特别是多层表的括号配对写法;
(2)数据类型少(常用的只有表和原子),使其表达能力受限;
(3)规范性差(无标准版本,不同的LISP文本间差别较大);
(4)程序的可读性不及一般的高级语言;
(5)执行速度慢。
LISP 执行速度慢的原因有几个:(1)一般的 LISP是解释型, 程序边解释边执行当然比编译型慢;(2)LISP的控制结构主要是递归,递归费时间费空间;(3)内存空间动态变化。LISP不要求用户在程序 中写一些用来指示内存分配的说明语句,全部内存必须动态的分配,直到没有空间时才开始收集无用单元。  

why lisp

LISP是一种计算机表处理语言,是函数型语言。它是LIST Processing的缩写,是研究人工智能的有力工具。LISP是继FORTRAN(FORTRAN是1954年提出,1956年开始使用)之后出现的第二个古老的(1958年提出,1960年开始使用)计算机高级语言,至今使用近五十年仍受重视,并为人工智能语言的发展作出了不可磨灭的贡献。它是一门历史悠久,用途广泛,功能极强,生命力极强的人工智能程序设计语言。

Lisp语言具有其他高级语言不可比拟的特征。它具有坚固的理论基础,丰富的表达能力,较强的可塑性,也提供了操作系统的许多设施,如命令解释器、文件管理、多任务等。所有这些特征为符号计算和人工智能研究提供了一个方便的工具。

First, Lisp is far from archaic or dead! Although it is one of the oldest programming languages (invented in the early 1960s, along with Fortran!), it is still widely used in the Artificial Intelligence community.

Lisp is also the only programming language with certain very useful features, such as true macros, that are critical when you are inventing a new programming language, because they enable you to extend Lisp's syntax1. Lisp is the most natural language in which to write complex 'symbolic reasoning' programs, Symbolic reasoning involves manipulating conceptual objects, such as 'genes', 'ontologies', 'pathway models', and the like, and Lisp was built specifically for this sort of manipulation. This is why it has remained popular in the most advanced computing circles, esp. in Artificial Intelligence.


(1. Python, which is more-or-less lisp w/o the parens, is missing several critical features to do what we do in BioBike, esp. true macros, which enable you to manipulate expressions, create sub langauages, and engage in applicative programming. Someday the Python crowd will realize that uniform syntax is a good thing, and will re-adopt parens (or something like them), and then Python will just be Lisp again, and much the better for it! )