Recently in Programming Category

推荐两本算法书

| 20 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

  • Pearlie Spencer: I recently came across your blog and have been reading read more
  • Michelle Jackson: Been lookin for some useful information for the past hour read more
  • Lynn Wright: Been lookin for some useful information for the past hour read more
  • Dylan L. Yu: I wish more people would write blogs like this that read more
  • SEO Company: Wonderful to read! read more
  • SEO Companies: Wonderful to read! read more
  • Search Engine Submission: Excellent job. read more
  • SEO Agency: Wonderful to read! read more
  • Janet M. Elkins: Great articles and content very informative looking forward to reading read more
  • Lynn Wright: I recently came across your blog and have been reading read more

About this Archive

This page is an archive of recent entries in the Programming category.

OS is the previous category.

Sharing is the next category.

Find recent content on the main index or look in the archives to find all content.