明朝凌濛初写过初刻拍案惊奇,二科拍案惊奇,书中描写了很多离奇曲折的故事。而算法求解中,往往也会遇到让人拍案惊奇的方法,更有山穷水复疑无路,柳暗花明又一村。姑且用这篇文章,收集那些曾经遇到的那些虽然短小精悍,却拥有惊人解法的算法问题好了。
1.相同源代码,串行程序版本
1.1编译过程,利用我们自己编写的脚本,自动生成针对两种平台上的目标程序
源代码:solve.c
演示过程:solve.c位于test/目录下
首先,进入test目录,下面运行我们编写的脚步程序
该脚步首先读取配置文件信息,发现cell平台的配置信息,因此首先生成cell 平台上的目标文件
生成cell 平台上的目标文件:
该脚步程序首先针对源代码进行automake,然后脚步设置环境变量,对生成的makefile修改,使得最后的结果可以
#makefile
PROGRAM_ppu := solve
IMPORTS = $(SDKLIB_ppu)/libblas.so \
-lspe2 -lm -lnuma
LDFLAGS += -Wl,-rpath $(SDKLIB_ppu)
include /opt/cell/sdk/buildutils/make.footer
makefile实际执行的命令为:
/opt/cell/toolchain/bin/ppu32-gcc -o solve solve.c -Wl,-rpath /opt/cell/sysroot/usr/lib -L/opt/cell/sysroot/opt/cell/sdk/usr/lib -R/opt/cell/sdk/usr/lib -m32 -Wl,-m,elf32ppc /opt/cell/sysroot/usr/lib/libblas.so -lspe2 -lm -lnuma
1.枚举int值,统计二进制bit中1的个数
1.1记忆化统计1的个数,x^(x-1)直接统计
//enum int comb
int count(unsigned int x){
int i = 0;
while(x != 0){
x = x&(x-1);
i++;
}
return i;
}
void enumComb(int N,int M){
int one[1<<15];
for(int i = 0 ; i < (1 << (N+1)/2) ; i++){
one[i] = count(i);
}
int half = N/2;
for(int i = 1 ; i < (1 << half) ; i++){
for(int j = 1 ; j < (1 << N-half) ; j++){
if(one[i] + one[j] == M){
cout << i << " " << j << endl;
}
}
}
}
实现一个简单的实例操作系统,尽量实现文件系统,gui,及基本编译程序,可以使用的os。
如何实现一个ansi c语言的基本编译器。语法分析是指将给定的终结符串,找出从文法的开始符号推导出这个串的方法。基本上是看如何为一个串构建一个语法树。
语义分析则是指那些对应于每个产生式的动作序列,实际上就代表了这个产生式的语义动作。
关于链接器和加载器。主要完成重定位和符号解析。它的存在使得多文件编译称为可能,使得项目可以分割到多个文件,避免了将所以程序写到一个大文件里,一次编译。可以分别编译,然后用链接器链接起来。
看一个编译器产生的目标文件后,生成的目标文件中,包括data段,text段,bss段,同时为了链接还有重定位表,符号表,如果要支持调试还有调试信息。
思考大学计算机教育。观伯克利,斯坦福,mit计算机课程,察国内的教学体系。os,编译器之实现,理想的课程设计,自己造的计算机,写的os,设计的语言,实现的编译器,grep应用
很多地方我们应该借鉴下国外的,现在很多借鉴只是得其形 未得其神,都被阉割了。我是从整个课程的设计 和我们学习的过程来说的,其实是课程把我们阉割了。我们原本应该具有更高的实力的,可是现在我们没有做到,这就是教育失败的地方。
ok
陷阱1:手里拿着一个锤子,看到什么都是钉子。
首次印象判断失误+类比不严谨,比如NRV优化,比如滥用设计模式。学到一种知识,就像用,无论是否应该使用,喜欢调书袋。
比如看到这个问题N个整数,求其中任意N-1个数的乘积中的最大的一个。我想到的是另一个问题:
算法版:5082 m lonelyyanzi Apr 21 12:50 ○ 【合集】这个题怎么做? (6.1千字)
已知:A1 A2 A3 A4 … An
B1 = A2*A3* …*An
B2 = A1*A3* …*An
Bn-1 = A1*…*An-2*An
Bn = A1*A2*…*An-1
求出各个Bi(i= 1,2 …,n)
要求不能用除法(除法效率太低),时间负责度为nlog(n), 当时我找到了一个O(n)的算法。
参数传递如何实现?
【实现模型1】引入临时对象,使用拷贝构造函数初始化。然后利用bitwise copy将其拷贝到x0的位置。比如:
void foo( X x0 );
X xx;
foo( xx );
改写成
X __temp0;
__temp0.X::X ( xx );
foo( __temp0 );还有一件事需要做,修改foo的声明,可以避免bit-wise copy的那一步。
梁绿珠-晋武帝 荀灌娘-晋 祝英台-东晋孝武帝 苏若兰-东晋 谢道韫-东晋
梁绿珠-晋武帝
绿珠的故事,也是蛮让人感叹的,让我想起了之前的桃花夫人,历史还蛮有戏剧性的,之后到了唐朝竟然又发生了一段类似的故事。
貂蝉-汉末 蔡文姬-汉末 二乔-三国东吴 黄硕-三国蜀 甄妃-三国魏
貂蝉-汉末
貂蝉是中国古代的四大美人之一,"闭月"就是讲她。自黄巾农民起义后,东汉政权名存实亡,各地军阀割据混战,朝中董卓杀死皇帝,另立陈留王,只手遮天。东汉大臣王允于是以貂蝉为工具使用连环计对付董卓,使本已混乱不堪的政治局面更加混乱不堪。
<<萤之光>>:(绫濑遥主演,不愿恋爱的OL,不修边幅,因特殊原因而与上司一起生活的"干物女"的爱情喜剧,本季最喜欢这剧,很搞笑)
<<白夜行>>:充满了哀伤与无奈的爱情悲歌
<<欺诈猎人>>:讲述一位专门欺诈欺诈师的欺诈师的故事(好像有点绕口-_-b),相当精彩、
<<last friends>>:les倾向,
<<只属于我的女神>>:
<<白线流>>:可说是现代校园偶像剧最具代表性的作品之一
<<上班族金太郎>>系列:同名经典漫画改编,绝对是最为热血和励志的职场系日剧
<<蜥蜴女孩>>:颇具童话色彩的一部剧集
<<101次求婚>>:算得上是一部经典爱情励志剧吧^_^
<<3年B班金八老师>>系列:堪称影响最为深远,系列作品最多(以拍至第7部)的校园题材日剧
<<将太的寿司>>:寺泽大介的经典同名漫画改编,非常励志的一部作品!
<<GTO>>:我想此作就无须多言了吧
<<庶务二课>>:绝对是最为幽默.搞笑的日剧之一,其两部续集也相当精彩
<<高校教师>>.<<人间.失格>>.<<未成年>>:相当灰暗的三部作品,被称为野岛伸司的"校园三部曲",虽然剧中有着种种的扭曲.丑陋.叛逆和极端,但每一部作品所蕴涵的真挚情谊仍是令人感动.耐人回味,总之,这三部作品均无愧于经典之名!
<<无家可归的小孩I>>:讲述了一个小学生为了母亲的生命坚强机智的徘徊于这日渐扭曲.冷漠的成人世界,面对种种的变态之人和不平之事勇敢前进的故事
<<魔女的条件>>:经典的师生恋题材作品,情节唯美动人
<<漂流教室>>:同名漫画改编,绝对是一部发人深省的佳作
<<极道鲜师>>:一部有笑有泪有热血的精彩剧集(第二部也很不错,不过本人更喜欢第一部)
<<神啊.请给我多一点时间>>:深田恭子的成名作,日剧迷不可不看!
<<水男孩>>系列:充满了汗水与欢笑.友情与梦想的青春物语
<<与光同行>> 曾获日剧学院奖多项大奖的一部作品,全片对亲情的描写深刻而动人
<<白色巨塔>>:堪称医疗系剧集中的代表作之一
<<牵绊的爱>>(又译<<天真可爱>>):野岛伸司去年的新作,全剧对亲情与友情的描写细腻而生动,绝对是一部值得一看佳作
<<一升的眼泪>>:真人真事改编,感人至深的一部剧集
<<改造野猪>>:同名小说改编,越看越有味道,令人感触颇深的一部作品
<<世纪末之诗>>:堪称野岛伸司集大成之作,其经典程度不言而喻
<<圣者之行进>>:描写了一群智障青年在社会上遇到的种种歧视.不公和遭遇,整部剧可谓发人深思.耐人回味
<<龙樱>>:同名漫画改编,据说原作在日本被誉为"考生家长必备读物之一"
<<女王的教室>>:紧凑.精湛.耐人回味的一部剧集
<<春与夏>>:原作和剧本均出自<<阿信>> 的作者桥田寿贺子之手,对亲情的描写细腻而深刻,感人之余又不乏励志之笔
<<求婚大作战>>:(山下智久、长泽雅美主演,在青梅竹马的婚礼上获得回到过去重新追求她的机会,改变从青春期到长大共7年的恋爱和友情的爱情的喜剧故事。最强的美男美女组合,绝对养眼,青春校园的故事,虽说故事没什么特别,但情节不错,很感人)
<<诈欺游戏>>:(户田惠梨香、松田翔太主演,突然被卷入一场现金一亿圆巨额争夺战的阴谋之中, 因而与一名刚出狱的天才诈欺师联手合作, 成为诈欺游戏的最后赢家, 描述人类面对钜款而心生动摇的故事。故事很有趣,情节集集紧凑,比去年的诈欺猎人好看)
说明:最初写在bmy bbs上,现整理在此处,转载请注明作者:phylips@bmy,谢谢合作。
先来个序。
版上又有坑出现啊。最近,大概花了三天时间看了下java编程思想,中间也看了一部日剧,last friends,比较非主流的类型。虽然题目是透过c++看java,我也并不是一个纯正的c++er,其实我的语言经历大概跟某些ser差不多,最初都是从c和java开始的,c->java->c++->c->c++,大概是这样一个轨迹。老实说争论语言的优劣并无多大用处,现存的语言都有其优点,基本形成互补之势。但是不同的公司,因其业务的需求,可能某些语言会占优,但是也不会完全摒弃其他语言吧,语言是为满足人类需求而出现的,学了java去说c++不好或好也没啥必要,到底学啥,要看你未来的目标公司的偏好,当然这个也没有起到决定作用,现在公司大概会在笔试的时候对语言进行考察,有的也会提供c/c++,java独立的试题吧。很多公司,面试的时候没有对语言做定性规定,学好一门语言比学哪一门更重要些,大概是这样的吧。所以学习语言的能力是重要的,但是不是说你说一句“学习语言的能力是重要的”,就代表着你不用学习语言了,因为这种能力的获取需要学一门语言来培养。
1.测试数据生成器:主要作用生成大小规模可定制的测试数据,
比如高斯消元测试:采用预先设定x的指,然后随机生成符合条件的可解方程
比如矩阵相乘:采用随机方法,串行版本,生成矩阵及相乘结果,用以测试并行运算结果
2.运行环境初始化:环境信息,如何定义一个数据结构来保存这些信息
包括:节点计算能力,节点间通讯速度,当前负载,能耗,内存大小。
初步设计有两种:作为配置文件信息保存,运行测试程序包实时获取。可能主要由配置信息来实现,即我们在主节点,放置节点信息,读取后根据分配算法,分析节点信息以及程序的dag图,然后计算分配结果。
一.makefile:
编译时的makefile我们参考了/opt/cell/sdk/src/blas-examples下的makefile的写法,最终如下:
Makefile:
PROGRAM_ppu := solve
IMPORTS = $(SDKLIB_ppu)/libblas.so \
-lspe2 -lm -lnuma
LDFLAGS += -Wl,-rpath $(SDKLIB_ppu)
include /opt/cell/sdk/buildutils/make.footer
4 5
1.000000 4.000000 -2.000000 3.000000 6.000000
2.000000 2.000000 0.000000 4.000000 2.000000
3.000000 0.000000 -1.000000 2.000000 1.000000
1.000000 2.000000 2.000000 -3.000000 8.000000
静态对象语义
所谓的静态对象,是指从产生一直持续到程序结束的那些对象,在这个过程中不会动态的消亡,所以被称为静态对象。包括global对象,定义于namespace的对象,在class 函数 file里的static对象。其中函数里的是local静态对象,其他都是non-local的,local与non-local的初始化时机不同。对于local的静态对象,初始化发生在函数被调用期间,首次碰到该定义时。而对于non-local的静态变量则在main函数的usercode之前进行初始化。
转载请注明作者:phylips@bmy 出处:http://duanple.blog.163.com/blog/static/70971767200932185613881/
源自于以下问题:
float只能保证6位有效数字,那么下面的程序输出应该是多少呢?
int main()
{
float f = 0.1234567;
cout << f << endl;
cout << setprecision(7) << f << endl;
读着这么多当年的故事,仿佛轻轻吹过一阵阵的中国风。我深深的沉浸在那当年的明月中,明月下古人犹在。眼望着那么多感人的往事,辗转回到今天的世界,却感到丝丝的落寞,不知道那样的人是否可以在今天出现呢,于是怀着一种从历史到现实的失落,惆怅着。