编程沙龙(03)
IT商界
“算法演义”里讲的矛盾了吗
读者 凌泉:第一期“算法演义”里讲的冒泡法的说明是轻的元素上浮,而程序实现时是重的元素下沉,是否有矛盾?还有为什么要用仿Pascal语言来实现,难道就不能用“正宗”的Pascal或C版的实例示之吗?
主持人:原先这样安排内容时,最主要的想法是“重意轻式”。可以理解成:一是不论程序具体实现会选用什么语言都可以达到目的。不用真Pacscl或者Delphi来实现的原因是暂时想淡化数据结构的概念。二是把握算法的精髓,做到举一反三,正过来行,逆过来也行。
当然如果你能通过我们的栏目学习多种编程语言,那就更好了(特别是想先培养编程兴趣的朋友,不要过早地去定用什么语言)。另外像上面提到的“冒泡法”它的正向实现方法(算法演义第一期文中说明的“轻的元素”上浮),你可以自己试着写一下,如果有问题,可以发E-mail给我们。
怎样学编程
读者 刘东凯:什么是编写程序?我对电脑什么也不懂。能否编写程序?
主持人:其实写程序并非十分困难,也非深不可测。我现在就觉得程序写到后来就是体力活。学写程序就像学英语一样,李阳不是有开口说Crazy English吗?学写程序就是动手写Wonderful Software。对于编程新手而言,首先要培养起对编程的兴趣和信心。
你可以看看“编程魔方”栏目,然后试着自己照着做。一般初学编程者,我建议用VB、Delphi或C++Build。这里澄清一点,是选实验的平台,不是选语言(至少不是首要的)。因为这三平台的快速开发功能比较强,适合新手。
而VC上手比较难,容易打击初学者的信心和兴趣。此外,在C\C++、BASIC和Pascal语言中,BASIC是比较简单的,Pascal是比较规范工整的(也是数据结构和算法书常用的语言),C\C++自不用说,功能强大,内容丰富,但有一些新手比较难懂的地方。我的观点,不论用什么平台或语言,要想成为高手都要付出巨大的努力,但如果你只想玩玩,那VB、Delphi能更容易给你带来成就感。
冒泡算法的复杂性
读者 wkj:请问冒泡排序算法的时间复杂性的表达式是如何得出的?
主持人:关于时间复杂性的问题,的确值得好好说一说。其实算法的时间复杂性简单理解就是为了完成任务算法所需执行的指令条数或语句条数。但这样简单的说法会受不同的程序设计语言和不同程序员的程序设计风格的影响,所以不适合当做衡量标准。
为此,我们必须找出一种比较合理的方式来度量时间复杂性。这里就提出了算法的基本运算的概念。在冒泡中,基本运算就是指元素的比较和交换。算法演义里时间复杂性就是考量元素比较的次数(最坏情况下)。暂时我们先淡化一下这个问题,在以后的文章中,再具体地讲。