2010-10-22

代码是如何炼成的

Posted in .NET at 17:14 Author:仲远

标签:

学过编程的人都会写代码。但是不是所有学过编程的人都会写好代码。要写出好代码,需要注意的事项很多,也不是一蹴而就。本文就谈谈程序员对于循环的敏感性问题。

想象我们要完成如下一个任务:

给定两个词组列表listA和listB,每个列表都包含了一堆词组 listA{pa1=“w1 w2 w3”, pa2=”w2 w1 w4″, pa3=”w5, w7, w6″, … } ,  listB{pb1=“w11 w12 w31”, pb2=”w21 w11 w41″, pb3=”w13, w21, w16″, … } 。listA和listB之间没有任何联系。如果我们想要在整个互联网的所有网页中,统计出liatA中pa1, pa2, pa3…和listB中的pb1, pb2, pb3… 同时出现在同一段文本中(比如同一个句子或者同一个页面)的次数(输出结果类似为:pa1 pb1 8762次,pa1 pb2 234次, …)。那么应该如何做?

(1)Naive的方法

(2)稍微高级些的方法

(3)比较好的方法 

这个问题的优化也许并没有涉及到很多算法上的东西,但是确实在实际中可能遇到的问题,如果代码写的好的话,能够大大节省程序运行时间。

(我怎么感觉有些像面试题呢。。。找工作的童鞋们就好好想想吧。。。)

不过写代码的人的思维中应该有根弦:通常而言,代码是需要在时间复杂度和空间复杂度上寻找平衡点的。这就意味着,要降低时间复杂度,就会增加空间复杂度,当然,有时候仅仅需要增加很少的空间复杂度(甚至还是在一个量级上的),就可以大大减少时间复杂度。

本文可以自由转载,转载时请保留全文并注明出处:
转载自仲子说 [ http://www.wangzhongyuan.com/ ]
原文链接:

3 Comments »

  1. 如何开发右脑 said,

    2010年October22日 at 17:21

    说的不错,会写跟能写好是两个截然不同的境界。

  2. 双s减肥药 said,

    2010年October27日 at 7:06

    有点深奥,不过还是谢谢分享

  3. 正品运动鞋 said,

    2010年October27日 at 10:10

    所以说写程序主要是解决问题的方法,而至于编程语言则只是个工具而已!

Leave a Comment

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word