返回   cpper编程论坛 > Blog > liuxinyu
注册账号 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记版面已读

未分类 没有归类的文章
旧

Solve a programming puzzle by permutation (1)

发表于 6 小时前 02:47 PM 作者: liuxinyu
liuxinyu 更新于 6 小时前 02:53 PM
1 Introduction

最近在网上看到一道有趣的题目,描述如下:假设有这样一种字符串,它们 的长度不大于26 ,而且若一个这样的字符串其长度为m ,则这个字符串 必定由a, b, c ... z 中的前m 个字母构成,同时我们保证每个字母出现且仅 出现一次。比方说某个字符串长度为5 ,那么它一定是由a, b, c, d, e 这5 个字母构成,不会多一个也不会少一个。这样一来,一旦长度确定,这个...
liuxinyu 的头像
高级会员
发表在 未分类
评论 0 liuxinyu 当前离线
旧

beautiful code第20章和第29章翻译

发表于 2007-11-06 06:26 PM 作者: liuxinyu
感谢pongba和meta的介绍,能够有幸翻译beautiful code中的两章,我将这两章的草稿共享给cpper的网友,姑且算还了上两个月的文债吧。

http://docs.google.com/Doc?id=djb8rzj_1ds5s8q
http://docs.google.com/Doc?id=djb8rzj_2hhhk8z

如果不想登录google doc的,可以直接看这里;

http://liuxinyu95.blogspot.com/
liuxinyu 的头像
高级会员
发表在 未分类
评论 0 liuxinyu 当前离线
旧

延迟求值和无穷(6)

发表于 2007-08-15 03:14 AM 作者: liuxinyu
5 stream in concurrent programming

上述的延迟求值计算,给出了无穷流模型,这一模型是函数式编程语言解决并发 编程的一种有效方案。在针对并发编程的各种思路中,通常有如下解决思 路[4]:
  1. 共享状态的原子操作(例如,Java/C++)
  2. 使用Active Object模式和消息传递(例如,Erlang, SALSA, Symbian)[5]
  3. 并发声明(在函数式编程语言种使用stream,例如Oz语言)
其中,最常见的,也是最难的就是第一个方法,这也就是在本文开头种提到的那 个问题。这一方法的本质困难在于保持公共数据的一致性。也就是数据的状态改变, 和并发竞争的矛盾。
使用函数式方法的好处在于,任何数据都不会被改变。因为函数式编程中无法...
liuxinyu 的头像
高级会员
发表在 未分类
评论 0 liuxinyu 当前离线
旧

延迟求值和无穷(5)

发表于 2007-08-15 03:12 AM 作者: liuxinyu
4 Infinity

从上面一节给出的超市交易问题看出,使用延迟求值模型,能够减少不必要的计算次 数,只有在真正需要某个数据时,才去进行计算。这样大大节约了计算成本,对于大 量的数据处理,能提高不少效率。
实际上,延迟求值不仅可以应用于大量数据处理,甚至可以直接为无穷的概念建 模。而针对无穷的计算是使用传统计算模型难以做到的。例如面对这样的需求:“建 立一个列表,代表全部自然数”。这个需求,用C++的数组类型,或者vector容器类 型,是难以满足的。而利用前面给出的stream_record 却可以非常简单的实现,如 下:
代码:
template< typename Succ>  
stream_record<int>* create_series(int n, Succ f){ 
    return (new stream_record<int>(n)) ->setNext(create_series< Succ>, n, f);
...
liuxinyu 的头像
高级会员
发表在 未分类
评论 0 liuxinyu 当前离线
旧

延迟求值和无穷(4)

发表于 2007-08-15 03:10 AM 作者: liuxinyu
这样,两种record就都能被使用了。测试代码如下:

代码:
template< typename Record>  
void print_rec(Record* r){ 
        if(r){ 
                std::cout<< r->value<<”, ”; 
                print_rec(r->next()); 
        } 
        else 
                std::cout<<” n”; 
} 
 
int main(int, char**){ 
        record* r1= new record(90, new record(250, new record(1000, 0))); 
        record* r2=transform(r1,
...
liuxinyu 的头像
高级会员
发表在 未分类
评论 0 liuxinyu 当前离线

所有时间均为格林尼治时间 +9。现在的时间是 09:18 PM


Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2009,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007

Search Engine Friendly URLs by vBSEO 3.1.0