编程珠玑-从数据出发改善程序

源自《编程珠玑》第 2 版第 3 章,《数据决定程序结构》

引子

为了统计 500 个变量各自出现的频次,你编写了下面这段代码,被同事笑死:

1
2
3
4
if (k == 1) c001++;
if (k == 2) c002++;
// if (k == ...
if (k == 500) c500++;

同事说,“你是不知道有数组这个东西嘛?用一个含有 500 个元素的数组,你这个代码可以从 500 行减到 10 行以内!”

其实这就是章节标题的含义——利用合理的数据结构、类型去思考程序的设计,将有可能获得诸多益处:

  • 程序更简短
  • 程序运行的时间、空间上更高效
  • Debug 更一览无余

做法

总的来说,可以从以下几点入手考虑:

  • 通常可以看看有没有数据可以被组装成数组
  • 用类去封装复杂的结构、操作
    • 这既可以是抽象化的面向对象
    • 也可以仅仅是将数据组织为一个新的类型
  • 尽可能地使用高级概念:
    • HTML:使用类似模板(非 C++ 模板)的方法,将多组数据填到统一的文本中去展示,这避免了单次的手动打印所有信息
    • 键值对:进一步约定了模板变量的类型
    • 数据库或电子表格:将数据和操作标准化,交给专业工具
    • 特定领域的编程语言:用 Python 做机器学习,R 做数据分析都是很好的例子,用 Tcl 做脚本等等

最终,在更优良的数据结构上设计程序。

作业

编写一个解决第 23 种情况的程序比较困难;编写一个通用的程序,然后令 n=23 可能更简单

k 阶常系数线性递归定义的级数为:

an=c1an1+c2an2++ckank+ck+1

其中,c1,,ck+1 为实数。

编写程序,输入 k,a1,,ak,c1,,ck+1,m,输出 a1,,am

不用数组又如何实现?

编程珠玑-从数据出发改善程序

https://xlindo.com/kewenlu2022/posts/5e4dda24/

Author

xlindo

Posted on

2021-12-22

Updated on

2023-05-10

Licensed under