终于想起用户名

七月 22, 2008 at 6:55 上午 | In Default | 8 Comments

这个blog已经4个多月没有更新。除了自己懒,主要原因是我忘了用户名了……密码忘了还容易,帐号都忘干净就没法了。昨天灵光一现把帐号从记忆深处拉了出来,终于能看到这个后台管理页面,心里居然一阵激动。

以后还是保持这个blog的更新,虽然开学以后想必会很忙……直到我能自己架独立blog。

阅读(275 次)

Using LAPACK in C/C++

二月 22, 2008 at 1:00 下午 | In Default, Technology | 1 Comment

Fortran是科学计算的标准语言,无论是性能,库,还是普及程度都勿庸置疑地是老大。作为最古老的计算机语言,这么多年的积累让其它语言几乎没可能改变这一局面。可惜我在大学时只学了C,这得怪我们系里的课程安排……无奈之下,很多时候只能C + Fortran Library来干活。最常用的Fortran库无疑是Lapack,主要就是各种对角化。这篇文章里就把C/C++中调用Lapack的每一个细节都记录下来,主要目的是让我下次编程时可以不用重复回忆(我已经吃过一次亏了,花了一晚上时间来研究怎么在C/C++里面链接dll这种白痴问题)。如果有朋友也碰到类似的问题,而又碰巧看到了这篇文章(这是小概率事件,google虽然触角无数,但也难以伸到我这网络深处的小地方),也许可以帮你少走些弯路。
Continue reading Using LAPACK in C/C++…

阅读(823 次)

暴力求解24点

二月 15, 2008 at 10:44 下午 | In Default, Technology, algorithm | No Comments

是真正的暴力求解……穷举法。不过这个问题似乎也没有更好的方法了,各种算法除了暴力的程度,似乎也没有其他本质的区别。

好久没写程序,今天写得这个75%是从网上参考过来的。那个产生所有可能的后缀表达式的算法很漂亮,产生所有排列的函数也很简洁。唯一的缺点是,这个方法会搜索大量重复的表达式,总的搜索空间是全排列数乘上Catalan数,比指数增长还要彪悍。但是对一般4个数的24点,这个低效率还体现不出来。此外,输出的表达式是后缀的,看起来不怎么顺眼。但是后缀转中缀又很麻烦,我就懒得再折腾了。

import sys

def add(a,b):
  return a + b
def sub(a,b):
  return a - b
def mul(a,b):
  return a*b
def div(a,b):
  return float(a)/b

ops = {add:’+‘, sub:’-‘, mul:’*‘, div:’/‘}

def permute(seq):
  seqn = [[seq.pop()]]
  while seq:
    newseq = []
    new = seq.pop()
    for i in range(len(seqn)):
      item = seqn[i]
      for j in range(len(item) + 1):
        newseq.append(item[:j] + [new] + item[j:])
    seqn = newseq
  return seqn

def _exprs(expr, stk_depth, vals, ops):
  if not vals and stk_depth == 1:
    yield expr
  if stk_depth > 1:
    for op in ops:
      for e in _exprs(expr + [op], stk_depth - 1, vals, ops):
        yield e
  if vals:
    for e in _exprs(expr + [vals[0]], stk_depth + 1, vals[1:], ops):
      yield e

def exprs(vals, ops):
  return _exprs([], 0, vals, ops)

def eval(expr):
  stack = []
  for e in expr:
    if callable(e):
      b = stack.pop()
      a = stack.pop()
      try:
        stack.append(e(a, b))
      except ArithmeticError:
        return None
    else:
      stack.append(e)
  return stack[0]

def tostr(expr):
  ret = []
  for e in expr:
    if callable(e):
      ret.append(ops[e])
    else:
      ret.append(str(e))
    ret.append(’ ‘)
  return ”.join(ret)

if __name__ == "__main__":
  vals = [int(x) for x in sys.argv[1]]
  goal = int(sys.argv[2])
  for p in permute(vals):
    for e in exprs(p, ops.keys()):
      if eval(e) == goal:
        print tostr(e)

阅读(533 次)

新年好

二月 6, 2008 at 12:41 下午 | In Default | 2 Comments

居然年三十了,同志们新年快乐。
转载ws短信一条:工资翻个十倍,爱情出点小轨(这个免了),理想早日放飞,卧佛快点到来,百合多多灌水,BN再战三百回。
我来继续ws:多收offer(此条送本宿舍申请团),多看动画(此条送所有宅男),多泡mm(此条特送Bcui和Bhui),多写禁书(此条送Bluo),等等等等。

阅读(748 次)

Mathematics in Physics

二月 6, 2008 at 12:21 下午 | In Default, Physics | No Comments

我向来认为学数学的都是一等一的聪明人;学物理的就要稍微差一些。但是物理学家有个硕大的优势,就是他的研究对象有时远比研究者聪明。大自然往往出人意料,所以物理学影响数学的名例数不胜数,反过来的就逊色很多。以前高中时看杨振宁的演讲,谈到规范场和纤维丛的对应关系,真是漂亮的结果。二十世纪的数学肯定是几何和数学的天下,荣耀几乎都归于几何学家和拓扑学家。这个风气估计也影响到了物理学界,大家都喜欢把自己的结果拔高到topological的高度,这样才能吸引到足够的眼球和引用率。

作为一个物理系学生,我自己对数学和物理之间关系的认识这几年也有很大变化,很大程度上受到了南大物理系氛围的影响,毕竟南大物理主攻凝聚态,和玄之又玄的超弦比起来,能量在几个eV的电子无疑是再实在不过的东西。以前刚进物理系的时候,满怀着对理论物理的热情,对场论和数学物理无比向往。数学与物理学结合最密切的分支,无疑是场论(包括弦论在内)。弦论对数学的要求更是到了令人发指的程度,我想我一辈子都不会搞明白代数几何到底在说些什么。当然,弄那么多复杂的数学结构,到底是好是坏,不是我一个外行人能判断的。不过从目前看来,弦论对数学的影响似乎还要在物理学之上,想想教皇E. Witten是Fields奖得主就明白了。
Continue reading Mathematics in Physics…

阅读(506 次)

杂博

二月 5, 2008 at 6:39 下午 | In Default | No Comments

今天早上起来,习惯性的开邮箱……看到一封Admission 2008……激动莫名。Boston College虽然物理排名不怎么样,但好歹是个offer,终于摆脱了三无状态。

随后又有一条坏消息。UMich发面试通知;2月29日在上海。但是我没收到,难道这个学校就这样黄了?

在家里实在无聊,银魂补完计划进度喜人,已经扫荡了50集。开始几天几乎是除了吃饭睡觉都在看,现在每天睡觉前看三集。所谓物极必反,我终于想起来还带了一堆paper回来看。但是做了一阵,数值模拟的结果总是不对,也很让人郁闷。

阅读(618 次)

龙书第二版下载

一月 24, 2008 at 5:17 下午 | In Default, Technology, compiler | 4 Comments

compiler-aho.pdf
今天终于把龙书第二版的电子书传上去了。不知道链接什么时候会失效。
失误,一开始写成第三版了

阅读(1037 次)

Evil of Memory Leak

十一月 19, 2007 at 1:44 下午 | In Technology, gc | 2 Comments

本篇含技术内容,不喜者勿入。

这是一个关于内存泄漏的凄惨故事。内存泄漏,乃是C/C++ Programmer最恐惧的Bug之一;来不知其来,去往往也不知其去,潜伏在层层花括号深处,当你发现它的时候,往往已经是程序崩溃之时。我几天前还被一个诡异的memory bug困扰了一晚,此bug举止异于常bug,在调试时单步执行没有任何问题,但一运行就出一些稀奇古怪的结果。以至于我都无法定位bug的位置,最后不得不借助于石器时代的printf调试大法,在可能出错的位置加上一摞一摞的printf才找到bug的可能位置。就算我已经定位到某一行代码,在我盯着屏幕看了半天,看得眼前快要出现幻觉,还是想不通bug从何而来。果然,从哪里来,到哪里去,是个终极关怀级别的问题。这一块代码和内存分配有关,无奈之下只好重写一遍,用了个稍微不同的逻辑。然后bug消失,程序再次和谐。

我个人喜欢用C写东西,尽管已经有无数与memory leak搏斗的经验,每次仍然免不了犯这类错误,经验虽然不停增长,错误好像未见减少。所以有时候觉得Java, C#这样的带Garbage Collection的语言也不错,但昨天看了一篇文章,讲述了一个C#中的内存泄漏怎样导致200万美金旁落的悲惨故事。涉及到这么大的支票,我们的兴趣总会提高一些。
Continue reading Evil of Memory Leak…

阅读(814 次)

推荐一篇博文

十一月 15, 2007 at 12:26 上午 | In Default | 1 Comment

因为我老是在blog写一些半桶水的技术文,大家的感觉可能是这个家伙无趣得很。今天决定推荐一篇博文,顺便给maoz同学拉拉票(虽然我这儿的访问量实在趋近于零)。maoz同学参加了Feedsky主办的博客大赛,有点像环法,每天都要写一篇命题作文(或者应该叫话题作文),坚持不懈一个月,你就完成比赛了。至于能不能拿到那台作为奖品的手提,鉴于有像和菜头那样的巨无霸参赛,我对maoz同学不表乐观。说实话看到这篇文章还是通过和菜头的blog。写了半天,不见庐山真面目,赶紧给一个链接:

关于父亲

下面是投票链接:投票点此

插播广告完毕。

对于这篇文章,我不知道该做些什么评论。也许就用鲁迅的话,直面惨淡的人生。maoz同学,据我所知(如果我没弄错的话),是属于产量极少的高智商人类,而且,强调一下,是个非常有趣好玩的人。说到这儿插几句,其实以前就看过maoz的blog,但没想到这个挺有意思的blog的主人居然是我的旧识,虽然也有许多年未见了(这句话可能不准确),我对maoz同学的印象也基本停留在N年以前,但想来现在应该也差不太远(希望如此)。但这篇文章,确实不像出自一个比我还小一岁的女孩子之手。

最近似乎几个国产Web 2.0网站都挺热闹,feedsky在办博客大赛,豆瓣的注册用户忽然就到了1000000个。中国的网络,真的是在夹缝里生存,从一开始就营养不良,到现在都不知营养良为何物了,但看到这些成绩,还是值得高兴一下。

阅读(1000 次)

龙书第二版

十一月 12, 2007 at 10:31 下午 | In Default, Technology, compiler | 9 Comments

说到龙书(Dragon Book),喜欢玩编译器和程序语言的老大们肯定是人手一册,在编译器技术这一块的教科书中地位几乎有如圣经。说到这儿又要鄙视一下国产的什么编译原理教材,简直是不知所云,抄都抄得这么潦草。

计算机领域的经典著作,常常会有些“小名”或俗名,如无人不知的TAOCP,C语言圣经K&R,算法入门宝典CLR。TAOCP是书名的缩写,此书堪称最有名的算法书籍,我估计也是被完整阅读次数最少的计算机书籍,之一都省掉了。K&R和CLR都是作者名字的开头第一个字母。龙书算是比较有个性的,这个外号来自其封面。1977年,Alfred V. Aho和Jeffrey D. Ullman写了一本Principles of Compiler Design,封面是一位骑士枪挑一头绿色恐龙,因此得名龙书。到了1986年,此书升级换代,书名变成了Compilers: Principles, Techniques and Tools,沿用至今,作者增加了Ravi Sethi。封面依然是一位骑士和一头恐龙,只不过恐龙变成了红色,骑士则坐在了电脑前。仔细看的话,发现龙身上纹身“Complexity of Compiler Design”,骑士全副武装,盔甲上书“Data Flow Analysis”,夹着一把写着”LALR Parser Generator”的宝剑,盾牌上则写着”Syntax Directed Translation”。
Continue reading 龙书第二版…

阅读(1551 次)

下一页 »

Zero Sound , powered by 赛族 & WordPress MU | Theme: Pool by Borja Fernandez.
Entries and comments feeds.