Recently in Programming Category

推荐两本算法书

| 2 Comments | No TrackBacks
推荐两本很棒的算法书,两本书为同一作者- Steven Skiena。目前似乎只有英文版,而且国内好像也没有影印版可以买。
  1. The Algorithm Design Manual (2nd edition)。既可以作为手册,也可以作为初级教程。里面有很多很好的例子,很多问题作者用他自己独特的视角去分析和讲解。平时工作或学习中如果遇到算法方面的问题,很多都可以从书中找到答案。在作者的网站上有和这本书基本配套的课程视频。电子版可以在http://www.51leifeng.net/thread-24530-1-1.html 下载。
  2. Programming Challenges。算法竞赛指导书,可以作为上面那本书的进阶书籍。电子版可以在http://forum.byr.edu.cn/wForum/disparticle.php?boardName=ACM_ICPC&ID=19636&start=1&listType=1 下载。

C/C++中的参数与局部变量存储

| No Comments | No TrackBacks
store.JPG对于C/C++来说,函数的参数以及局部变量存储在堆栈中,左图展示了当一个函数被调用时其参数(parameters)以及局部变量(automatic local variables)是如何在堆栈中存储的,该数据通常被称作Activation Record。需要注意的是参数和局部变量的创建者是不同的,参数是由调用函数(caller)进行创建及初始化,局部变量则是由被调用函数(callee)创建与初始化。
下面将通过一个例子来演示参数及局部变量是如何被维护的。

void main(int argc, char** argv)
{
   int i=5;
   foo(i, &i);
}
void foo(int i, int* pi)
{
   int n = 10;
}
store2.JPG

float,int类型转换

| 5 Comments | No TrackBacks
float与int之间类型转换的低效是由其bit存储结构决定的(见图)。例如:
int i = 5;
float f = i;
其中i与f的二进制存储结构是不同的,二者的转化涉及到了存储结构的转换。
对于i来说,
5 => 5 * 2^0
5 => 2.5 * 2^1
5 => 1.25 * 2^2
因此当i向f进行转换时,需要计算小数部分23bits中每一位的值,使其无限接近0.25。后再计算exp部分使exp-127的值为2。从而得到最终的f。
另外一个例子:
int i = 5;
float f = *(*float)&i;
在这个例子中,由于i的存储结构并不会发生变化,也就是
00000000 00000000 00000000 00000101
但是它会被按照float的存储方式来解释,也就是
1.(2^(-21)+2^(-23)) * 2^(0-127)
因此最终f的值将会非常非常的小。
bit

Scalability

| 1 Comment | No TrackBacks
在做research project和写paper的时候,有一个问题一直困扰着我。究竟系统或算法的input size (e.g. dataset的大小) 增加到多少才算进行了一次有效的scalability test?毕竟很多系统都是在input增大到一定程度的时候才会出现问题,但是这个程度却似乎很难估计。甚至做实验的时候,有时很难把这个input size增加到很大,倒不是不想,而是有很多东西限制着。记得前一阵在做XML keyword search system,我们首先需要parse XML document并且为其中每一个keyword通过B+ tree建立inverted list,但是当XML document增大到上百兆的时候,建立index的过程将是痛苦的,在laptop上运行了1个多小时,index文件增加到上G,却依然没有结束,无奈之下,在最后的scalability test中放弃了选择如此大的input size,太耗费时间了,但如果input size达不到一定值得话似乎又说明不了什么问题。或许给我一台64位高配置的机子情况会有所不同。
最近看了一篇文章,google也会有scalability的问题,这要得从gBrain extension for Firefox说起,感兴趣的可以看这篇文章Google Public Relations,这里真得赞一下google对待其用户的态度。

郁闷的indentation

| 2 Comments | No TrackBacks
一直都想把web programming好好学习和实践一下,可惜总是持续了一段时间就停下了。最近由于xml keyword search research的一些idea用web的方式能够更好的呈现,因此又重新啃起了python。把lighttpd server配置好,随便写了一个小程序想试着运行一下,结果浏览器上出现了internal server error。对着程序检查了好久也没有发现什么问题。写程序用的是Notepad++,最后实在没辙只好打开IDLE,想用python shell run一下。打开一看就傻眼了,其中有一行代码因为偷懒是从另外一个地方copy过来的,所以indentation没有consistent,有一行代码用了4个空格,其他的用的是tab,在Notepad++中也没有看出来,就没有朝indentation去想。编程有时真是一个silly mistake就可以浪费很长的时间。

Recent Comments

  • Mardell Freudenstein: Great Post. I would love to read more in future. read more
  • Dorsey Lopata: Great Post. I would love to read more in future. read more
  • Chrystal Kitelinger: Great Post. I would love to read more in future. read more
  • SEO Web Directory: What is an Article Directory? An Article Directory is a read more
  • Shana Mayze: Howdy that’s a very interesting view, It does give one read more
  • Eldon Sanjose: I particularly like the definition of goals before you undertake read more
  • Jonah Vidrine: Hi thanks a lot for a discerning post, I really read more
  • Cricket Headlines: I can see that you are an expert at your read more
  • stock broker: I'm interested in using some of your content for my read more
  • katier7: actually---- go into their my space now read more