摘要:
ASH前段时间贴出了一个问题: 对于有K个元素的数组 int a[K]={....};写一个高效算法将数组内容循环左移m位 比如: int a[6] ={1,2,3,4,5,6} ,循环左移3位得到结果{456123}, 要求: 1不允许另外申请数组空间,但可以申请少许变量 2不允许采用每次左移 这是一个有趣的问题,当时ASH给出了一个很简单的解法: 1、将整个数组倒排; 2、将前k-m个元素和剩下的m个元素分别倒排。 这个算法需要对每个数组元素做两次写操作,所以我当时在考虑,有没有一种方法,只对数组元素进行一次写操作就完成移动? 最直观的想法,就是从第一个元素开始,把它一步移动到最终的目的位 阅读全文
posted @ 2006-04-25 17:16
计算机技术
阅读(1171)
评论(0)
推荐(1)
摘要:
代码的编译是计算机科学的一大命题,其博大精深,难以尽数。这里,我们捡着一个小命题娱乐一下。程序代码中,总是少不了数学运算,其实对于我们来说很熟悉的数学计算,在计算机里也是要做一些编译处理的。例如,4+9*3+7-2这样一个简单的四则运算,对于人来说就是: 4+9*3+7-2=4+27+7-2=31+7-2=38-2=36这里面,我们实际上已经在下意识里做了很多思考。首先,大脑会按照运算符划分开各个子算式,然后找出运算优先级的子式,按顺序计算完后,将结果填充给下一级,依次递归,直至整个算式完成。 计算机的编译/解释过程,其实跟这个很像,也是先找出最高优先级的子式,然后依次递归构造出一个语法解析树 阅读全文
posted @ 2006-04-03 22:35
计算机技术
阅读(251)
评论(0)
推荐(0)
摘要:
Forms and the Top-Level LoopThe things which you type to the LISP interpreter are called forms; theLISP interpreter repeatedly reads a form, evaluates it, and prints theresult. This procedure is called the read-eval-print loop. 我们输入到LISP解释器的东西被称为语句;LISP解释器逐条循环读取每条语句,进行解析,将结果打印出来。这个过程被称为读取-解析-打印循环。So 阅读全文
posted @ 2006-04-02 21:43
计算机技术
阅读(231)
评论(0)
推荐(0)
浙公网安备 33010602011771号