博文
[转载]人机对弈与64位技术及人工智能的未来研讨会实录(2005-06-23 17:03:00)
摘要:http://www.sina.com.cn 2004年07月02日 13:57 计世网 http://tech.sina.com.cn/it/2004-07-02/1357382594.shtml 1996年IBM“深蓝”电脑与国际象棋世界级大师卡斯帕罗夫的国际象棋人机大战,很多人现在还记忆犹新。电脑能战胜人脑吗?人和电脑谁将主宰未来?这个问题一直吸引无数人去探询答案,中国首次国际象棋“人机对弈”再一次给了人们探索的机会。 此次国内比赛与大家熟知的前几次“人机大赛”不同,人类选手不再是国外国际象棋选手,而是为中国获得众多国际象棋世界荣誉、近来状态上佳的国际象棋特级大师、人称“美女棋后”的诸宸;电脑选手也不再是庞大的服务器,而是已经进入寻常百姓家庭的、代表未来移动计算主 UC立体声聊天 新浪点点通个性smsDIY 海纳百川 候车亭媒体 轻松填问卷开心拿大奖 流趋势的“紫光之星”笔记本电脑。遵循服务器整体性能>台式电脑>笔记本电脑的基本概念,科技是否能发达到笔记本电脑可以挑战人类智慧的地步?这个谜底已经揭开。 2004年6月8日下午14∶00,在清华紫光大厦正式拉开了的首场比赛的战幕,对战双方是 “美女棋后”诸宸和 “紫光之星”笔记本电脑。经过两小时54回合的较量,人类棋手、“美女棋后”诸宸执黑负于电脑棋手“紫光之星”笔记本电脑。怀有身孕的诸宸总体表现非常出色,行至残局阶段仍然占据着多一个兵的优势。在只要保守行棋就可以稳和的情况下,诸宸很有勇气地选择了争取胜利的下法,最后因为超时而失利。 随后在6月12日,诸宸和“紫光之星”的第二次较量如约展开,有关专业人士赛前表示,从第一盘比赛的情况看,“人机对弈”对于诸宸来说不是很轻松的。第二盘比赛,从比分上当然诸宸处于不利地位。对于诸宸的挑战有两个,一个是如何对电脑取得优势,另一个是如何在优势情况下取得进展并进而取胜。从第一盘比赛看,电脑不是很容易被击败的。即使在形势比较差的情况下,它也会给对手制造难题,造成对手犯错误的机会。同时,清华紫光笔记本电脑事业部总经理也表示,以前的人机大赛之所以采用多CPU,原因在于在当时电脑单处理器整体运算上硬件无法同软件匹配,......
[转帖]实现真正意义上的二维动态数组模板(2005-06-22 15:44:00)
摘要:实现真正意义上的二维动态数组模板作者:zyq654321我们可以通过动态数组的反例来确定动态数组应该具有哪些特性。大家都知道以下的方式是定义一个静态数组。int iCount[10];int iCount[10][10];从上面可以看出,定义了静态数组之后,无论程序如果使这个数组,该数组在内存中所占空间的大小,位置是确定不变的。我们可以得出结论,对于编译器,静态数组的大小和空间是已知的,因此编译器可以自动为该数组分配空间。具体情况是:如果你定义了一个全局数组,编译器将在数据区为你的数组分配一个空间;如果是个局部数组(比如定义在某一个局数中),编译器为你的数组分配一个栈(Stack)空间。从静态数组的讨论中我们得出动态数组应具有的特性:在程序的运行中,动态数组是大小应该是可变的。因些动态组数的实现应该是基于动态的分配内存基础上。下面看这个例子:假设我们建立一个工厂工人的数据库,数据库中有多个表各代表不同的车间。每个表中保存该车间职工的信息,为了代码简单,可以只让数据库保存职工的姓名。下面是一个InputWorkers函数,以车间为单位输入全车间职工姓名,然后一次性将这些数据存入数据库中。void InputWorkers(){ int iCountOfWorkers, int iNo; …… 用户输入获得车间的人数和车间号 …… string* iArray = new string[iCountOfWorkers]; …… 用户输入车间所有职工的信息,并存在iArray数组中 …… StoreInDatabase(iArray, iNo ); //存入数据库 delete [] iArray;}在程序中iArray是个string指针,并不是数组。但是数组的原理和指针是一样的,比如p[1]是指数组p中的第二个元素,......
[转帖]揭开C/C++中数组形参的迷雾(2005-06-22 14:46:00)
摘要:揭开C/C++中数组形参的迷雾作者:乾坤一笑楔子 去年,周星星大哥曾经在VCKBASE/C++论坛发表过一篇文章“数组引用"以避免"数组降阶”,当时我不能深入理解这种用法的含义;时隔一年,我的知识有几经锤炼,终于对此文章渐有所悟,所以把吾所知作想详细道来,竟也成了一篇文章。希望本文能对新手有所启迪,同时也希望大家发现本文中的疏漏之处后不吝留言指教。 故事起源于周星星大哥给出的两个Demo,为了节省地方,我把两个Demo合二为一,也能说明同样的问题: #include using namespace std;void Foo1(int arr[100]){cout << "pass by pointer: " << sizeof(arr) << endl;}void Foo2(int (&arr)[100]){cout << "pass by reference: " << sizeof(arr) << endl;}void main(){int a[100];cout << "In main function : " << sizeof(a) << endl;Foo1(a);Foo2(a); }其运行结果如下: In main function : 400pass by pointer: 4pass by reference: 400 这段代码说明了,如果数组形参是数组名形式(或者指针形式,下文讨论)时,使用sizeof运算符,将得不到原来数组的长度;如果用传递原数组引用的方法,则没有问题。 这段代码的确很难理解,因为这短短的十几行涉及到了形参与实参的关系、数组名和指针的关系、引用的意义、声名和表达式的关系这4大类问题,只要有1条理解不透、或者理解不正确,就理解不透上面的这段代码。本文也就从这4个问题入手,把这4个问题首先解决掉,然后再探讨上面的这段代码。虽然这样看来很是繁复,但是我认为从根上入手来理解、学习,是条似远实近的道路。一、函数形参和实参的关系 void Foo(int a);Foo(10); 这里的a叫做形式参数(parameter),简称形参;这里的10叫做实际参数(argument),简称实参......
[转载]论程序设计方法(2005-06-22 14:22:00)
摘要:论程序设计方法作者:杨老师如果你是初学者----------------请不要阅读;但有志成为中高级程序员--------请务必阅读;如果你是中级程序员------------请务必阅读;如果你高级程序员--------------请批评指正。 本文是我在“软件工程师班”开学第一节课的讲义,和“计算机软件设计发展”讲座上的内容整理而成。写作本文的目的是引导学生从更高的层次来看待程序设计方法,为将来成为高级程序员而做好理论准备。一、计算机硬件环境对软件设计方法的限制 计算机的发明到现在已经60年了,计算机程序设计方法也伴随着计算机硬件技术的提高而不断发展。硬件环境对软件设计既有严重的制约作用,也有积极的推动作用。 在我的大学母校(此处删除6个字),数学系的一些老师,有幸成为了我国第一代的计算机DIY一族。呵呵,不要以为是组装PC机呦,他们组装的可是小型机。一人多高铁皮柜大小的主机,加上纸带机(后期改进为读卡机),组装好后,除了供学校自己的科研使用外,还在全国各地销售了十几台。当时(七十年代)一台的售价是10几万元人民币,如果换算到今天,相当于价值大约为100多万元,非常高档的小型计算机了。下面大家猜猜,这么高档的计算机,它的内存是多少那?(都把嘴闭好了,我要公布答案了)—— 4K。一块50公分见方的内存板,插入到主机箱中,好了------ 1K;再插一块内存板,好了------ 2K;再插一块内存板,好了------ 3K;再插一块内存板,好了------ 4K;再......不行了,插不起了,太贵了!这就是当时的环境。这样的环境下,用什么写程序那?当然只有机器码了。先用汇编写,然后翻阅手册手工改写为机器码,然后打卡或穿纸带,输入运行。可以想象,在当时的条件下,什么叫好的程序那?什么叫优秀的程序那?—— 技巧! 程序设计的最初始阶段,是讲究技巧的年代。如何能节省一个字节,如何能提高程序运行的效率,这些都是要严肃考虑的问题。而所谓的程序的易读性,程序的可维护性根本不在考虑范围之内。 今天,35岁以上的学习过计算机的朋友可能都使用过一种个人计算机——APPLE-II(中国也生产过这种计算机的类似产品“中华学习机”)。主频1M,内存48K(扩展后,最多可达到64K)。我就是使用这样的计算机长大的 :)。当年,类似的个人计算机产品,还有PC1500,Layser31......
Visual C++初学者入门的一条捷径(2005-06-19 20:34:00)
摘要:[文章信息] 作者: CQFZ 时间: 2005-02-14 出处: 博客 责任编辑: 方舟 [正文] 首先声明,我可不是什么高手,也就是刚脱贫。因为运气很好,买到了几本好书,在学习过程中几乎没走什么弯路,没费什么劲就入门了,现在一般的小程序能搞定了。看到那些因为不知从何下手而苦苦挣扎的朋友,希望我的文章能给他们一些帮助。 学编程急不得,上来就学VC肯定碰一头灰,说VC难就难在这点上了。如果硬上,意志坚强的话也许能挺过来,但也是会缺乏后劲,不得不回过头来补习基础知识。意志不坚强的话,很有可能就此放弃了,并留下一个VC难得不得了的印象。其实,只要踏踏实实一步一步来,VC也就是很简单点事。在这里我说一下,如果你还只是一个初中生,那么你就应当仔细考虑一下了。首先,限于你的知识和思维能力,学学C语言还应该没问题,但要学VC是要下相当大的功夫的。而且,你现在学到的东西将来一定会过时,所以不如把精力放在算法的研究上,毕竟这些东西永远都不会过时。 我觉着如果走对路子,入门VC,一个暑假应该够用了。 虽说学VC并不是传说的那么难,可不下些苦功夫是学不成的。在学VC前,你必须确定,你是因为热爱编程才学VC的,而不是出于炫耀或其他。否则,恐怕你坚持不到胜利的那一天。 对于首次接触编程的同学,我建议最好先学一下Quick BASIC(DOS里就有带,就是那个QBASIC.EXE),不用多学,知道什么是整型什么是浮点,以及DO...LOOP FOR...NEXT 等最基本的知识,能算个阶乘,求个积分就行了,关键要明白计算机是怎么执行命令的,对编程有个感性认识。如果你对自己有自信,也可以直接学C++,应该也不会多费太多事。不过我觉着因为有很多资料是FOR VB的,并且网页编程常用VB Script,以后你也很有可能要用到VB,所以了解一些BASIC对以后也是有帮助的。而且如果只是要算个小题用QB比VC、VB之类方便多了。(找个人教一两天应该就能搞定了吧) 之后我建议找本初高中信息学奥赛的书(有些奇怪吧)。这些书里讲解了基本的算法,写的却比较通俗,没什么高深的数学知识,容易理解。这些东西在数据结构课程中有系统严密的讲解,所以也可等以后再学。但我觉着现阶段写一些小程序,实现些常用算法对自己的思维是很好的锻炼,对以后的学习大有好处。我想,能......
写好C程序的10条秘籍(2005-06-19 20:32:00)
摘要:神乎其技,惟C程序,功到自成,十大建议! 1、汝应频繁催动lint工具,据其语法声明修习内力,此事皆因lint之思虑决断实远在君上。 2、不可依随NULL指针,如若不然,混沌痴颠必俟君于彼岸。 3、纵有天赋大智慧,知晓其事无碍,汝亦当尽数强制挪移函数参数为原型所期之数据类型,以免一时疏忽,致使数据类型向汝讨还血债。 4、若头文件未于函数原型之中声明返回值类型,汝当亲为此事,更须谨慎再三,以防不测降临汝身。 5、汝须亲核字符串、数组操作之越界与否。古之圣人有言: 尝祈门人对答“然也”,不意门人答曰“吾了然于胸无须多虑尽请宽心他日趋庭必当重谢”——所期者短,所获者长,此于数组,实最险要处也。 6、若函数声明内提及,于异常时将返回错误代码云云,汝当谨慎校核该返回值。或有校核语句使汝之代码增大数倍,令汝之手指因敲键而痛楚莫名之事,汝亦当如此。不然,汝固以为此异常之事难得一见,上苍亦必借此惩戒汝之傲慢。 7、汝应研习库函数,不当亲笔重写之。如是,汝之代码必短小易读,汝之心境必清爽恬淡。 8、纵汝不愿,汝亦应借括号、缩进之属,使汝之代码间架清晰,可为后者借鉴。汝之大智慧施于决疑解难则可,施于敷设谜团、淆乱文体则万万不可。 9、外部标识符之前六字符当与众不同。此律法看似粗陋,和者寥寥,然其效用自能延续永远。汝若不从此言,他日,汝欲连接程序于旧作之上时,必抓耳挠腮、蓬头垢面,狼狈之相尽现矣。 10、或有族类,大言炎炎,云“普天之下,莫非VAX”。于此等异端,汝当摒弃之、断绝之、远避之。更有异人,笃信魔道,以为纵汝所用电脑频繁换代,汝之程序亦能长久适用。汝亦不可与此类恶人来往,谨记谨记。 如何编写最烂的C 语言程序 1、重写标准库函数,把函数名改成你自己才懂得的晦涩的名字。 2、使用晦涩的,个性化的,无法移植的函数库,这样你就永远也不会离开你喜欢的平台了。 3、在所有函数调用前,使用最能精确描述函数功能的注释,比如printf("Hello world\n"); 4、记住:只有菜鸟才在代码中使用回车换行符; 只有菜鸟的徒弟才使用制表符; 高手会在代码中添加无数内嵌的汇编指令。 5、“用户界面”是给低能儿准备的,“用户”是决不会通过界面与你的程序打交道的。 6、如果你必须注释你的代码,那就从其他人的代码里随便抽几条注释,放到你的代码里吧。这是最快、最容......
C++未来断想(2005-06-19 20:24:00)
摘要:[文章信息] 作者: 曾毅 时间: 2004-08-05 出处: csdn 责任编辑: 方舟 [正文] 虽然C++从脱胎于C开始,一路艰难坎坷的走过来,但是无论如何C++已经取得了工业基础的地位。业界的大量用C++写成的产品代码以及大量的C++职业工程师则是最直接的证明。同时,我们可以看到各个高校的计算机专业都开设有C++这门课程,网络上对于C++的学习讨论也从来都没有停过。但是,在Java和.NET两大企业开发平台的围攻下,给人的感觉是C++越来越“不行”了。 C++在面向企业的软件开发中,在开发便捷性等方面的确要比Java和C#差很多,其中一个问题是C++语言本身比较复杂,学习曲线比较陡峭,另外一个问题是C++标准化的时间太长,丧失了很多的壮大机会,耗费了很多精力在厂商的之间的斗争上,而C++的标准库离一个完善的程序开发框架还缺少太多太多的内容,各个第三方的类库和框架又在一致性和完整性上没法和随平台提供的框架相提并论。难道C++真的要退出历史舞台了? 从C++目前的活跃程度,以及应用现状来说是完全能够肯定C++仍然是软件工业的基础,也不会退出历史舞台的。另外从Boost,Loki这些库中我们也能够看到C++的发展非常活跃,对于新技术新思维非常激进,C++仍然广泛受到关注。从ACE在高性能通信领域的应用,以及MTL这样的库在数值计算领域的出色表现,我们可以看到C++在高性能应用场合下的不可替代的作用,而嵌入式系统这样的内存受限开发平台,比如Symbian OS上,C++已经发挥着并且将发挥更大的作用。可以预见的是以后的软件无论上层的应用怎么变,它的底层核心都会是由C/C++这样的系统级软件编写的,比如Java虚拟机,.NET Framwork。因为只有这样的系统级软件才能完全彻底的发挥机器的功能。 需要看到的是两个趋势,一个趋势是C++变得更加复杂,更加学院派,通过模板等有潜力的语法因素构造越来越精巧的库成为了现代C++的热点,虽然在利用库实现新的编程范式,乃至设计模式等方面很有开创意义,也确实产生了一些能够便捷开发的工具,但是更多的是把C++变得更加强大,更加复杂,也更加难懂,似乎也更加学院派,不得不说它正在向边缘化道路发展。另一个趋势是C++在主流的企业应用开发中已经逐渐退出了,ERP这样的企业软件开发中基本上不会......
程序设计语言的进化(2005-06-19 20:22:00)
摘要:中国科学院软件研究所 宋靖宇----------------------------------------------------------------------1967年5月20日,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。之后,在1968年2月形成了Simula 67的正式文本。 也是在1968年,荷兰教授E.W.Dijkstra提出了“GOTO语句是有害的”观点,指出程序的质量与程序中所包含的GOTO语句的数量成反比,认为应该在一切高级语言中取消GOTO语句。这一观点在计算机学术界激起了强烈的反响,引发了一场长达数年的广泛的论战,其直接结果是结构化程序设计方法的产生。 相信当时没有任何人预见到当年发生的这两件事对后来计算机技术,特别是软件技术所产生的深远影响。尽管这两种方法的思想差异巨大,但是多年以后,无论是Ole-Johan Dahl和Kristen Nygaard,还是E.W.Dijkstra,都因其在这一年所取得的成就,获得了计算机界的诺贝尔奖——图灵奖。 随着计算机技术的迅猛发展,硬件成本不断降低,而软件成本却不断增加,因此,如何缩短软件生产周期和提高维护效率,研制出高质量的软件产品成为一个重要课题。 程序设计思想的进步 在20世纪60年代,软件曾出现过严重危机,由软件错误而引起的信息丢失、系统报废事件屡有发生。为此,1968年,荷兰学者E.W.Dijkstra提出了程序设计中常用的GOTO语句的三大危害:破坏了程序的静动一致性;程序不易测试;限制了代码优化。此举引起了软件界长达数年的论战,并由此产生了结构化程序设计方法,同时诞生了基于这一设计方法的程序设计语言Pascal。 由瑞士计算机科学家Niklaus Wirth开发的Pascal,一经推出,它的简洁明了以及丰富的数据结构和控制结构,为程序员提供了极大的方便性与灵活性,同时它特别适合微计算机系统,因此大受欢迎。结构化程序设计思想采用了模块分解与功能抽象和自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分......
国际信息产业大事记(2005-06-19 20:20:00)
摘要:1936年 ● 英国数学家A.M.Turing发明图灵机,为现代计算机硬件和软件做了理论上的准备。 1942年 ● 世界上第一台电子计算机ABC研制成功,它有300个电子管,采用二进制,基本体系结构与现代计算机已无二致。 1943年 ● 英国计算机“巨人”投入运行。不过1970年之前对它一直保密。 1945年 ● 现代计算机之父:冯·诺依曼第一次提出存储程序计算机的概念,即“冯·诺依曼机器”。 1946年 ● 2月10日,电子数字积分机和计算机诞生。它装有18000个真空管,总重量达30吨,耗资近50万美元,是世界上第一台多功能、全电子数字计算机,可以实现每分钟几千次乘法运算。 1946年 ● 5月英国剑桥大学研制成功第一台冯·诺依曼机器EDSAC。 1947年 ● 12月23日,美国贝尔电话实验室发明了世界上第一个晶体管。 1948年 ● 曼彻斯特大学开发出世界首台存储程序机Baby。 1950年 ● Engineering Research Associates制造出世界上第一台商用计算机ERA 1101。 1951年 ● 第一台数字式计算机UNIVAC1为美国人口普查创建。 1952年 ● Grace Hopper勾画出第一个“编译程序”蓝图,即将所有程序在执行之前都翻译成机器语言,为计算机商用做出重大贡献。 1955年 ● Grace Hopper开发出A-3编译器Math-Matic。 1956年 ● 世界上第一台采用晶体管元件的电脑研制成功。 ● 第一条跨越大西洋的电话电缆敷设完成。 ● Bell实验室开发出可视电话样机。 1957年 ● IBM设计出世界上第一个计算机硬盘RAMAC 350,直径24英寸、总容量5兆字节。 ● IBM开发出FORTRAN语言。 1958年 ● 第一台商用电子管计算机Univac Model 80发布。 ● MIT John McCarthy开始开发Lisp语言,1960年完成。 1959年 ● 世界上第一块集成电路问世。 ● 发表了Cobol语言规格,于1961年完成。 1964年 ● IBM发布IBM System/360计算机。 1965年 ● DEC推出真正被业界认可的世界上第一台标准小型机PDP-8。 ● 美国Dartmouth 学院的Thomas E.Kurtz 和 John Kemeny 开发出Basic语言......
[转]百度硬盘搜索分析(2005-05-22 13:44:00)
摘要:FROM:http://www.wespoke.com百度硬盘搜索将于下周一推出颇受注目的[百度硬盘搜索],说瞩目,原因是在搜索引擎大比拼的时代,能否吸引用户,吸引了用户后能否守住用户,现在似乎大家的共识是在桌面上了。而这一款硬盘搜索也将逼迫同行业的中文搜索引擎们要考虑如何巩固市场的问题了。百度硬盘搜索下载 http://disk.baidu.com/在使用了几天的百度硬盘搜索引擎概括的看起来有如下的特征:1] Google Like就是从设计风格上和理念上都沿袭了google 的硬盘搜索产品,趋同设计或者copy strategy是现在一个减少开发成本减少创新成本的绝招,这点上百度做的非常到位。2] Baidu Style当然,是中文产品,就有中文产品的特征。突出的特征有两个:1.中文分词--这个简直是废话!不能分词不就是google 硬盘搜索了么?2.加密码功能。这个功能很体贴,因为加了密码就在一定程度上保护了个人隐私,对于中国现在还不能人手一台电脑的国情考虑的比较周到。3] Something whoops.1. 图片搜索没有能给出缩略图,这样的话这个功能显然就型同虚设了。而且最重要的是,因为图片搜索在网页上的算法跟本地的文件系统的算法的差异很大,因此这个功能应该说开发的不算好。2. 长结构的语句搜索,硬盘搜索的分词系统不如百度网站本身的好。这点上等下我有两张图可以做对比。我想百度的硬盘搜索并没有完全采用百度网页的分词算法,因此可以从长句子的查询中得到结果,本地的硬盘搜索是先对长语句进行分词后进行“and”的查询结构,查询后没有进行进一步的“=”的验证。4] Something cool.1.索引的快速。我0.8G的笔记本平时运行个PPT都只喘气,20分钟内百度硬盘搜索索引了6000多个文档。搜索起来也非常的快。2.能够方便的索引中文word/ppt/pdf/xml/..... 并能够清晰的区分的方式显示搜索结果和数目。百度硬盘搜索能够占领多大的市场?这点上我没有概念,在百度硬盘搜索之前,我曾经使用过几个硬盘搜索工具,中文的硬盘搜索例如 88data.com ,就做的相当不错。不过市场还没有做起来,因此88data到现在的搜索量看起来还是一个可怜的数字。百度的客户端一直做的不错,以前的百度下吧我曾经用来下过一阵子电影,不过后来没有了Windows Deskto......
