锁定老帖子 主题:银弹的数学解释
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-19
最后修改:2009-08-19
前几个礼拜找资料的时候,偶尔翻到了Library-Centric Software Design LCSD'05的几篇paper.
Todd L. Veldhuizen 开放系统实验室 印地安纳大学伯明顿分校. 摘要
假设1(强重用). 这种观点认为大尺度的重用可以通过组装大颗粒的预制组件来使得超大规模的软件生产成为可能。编程的所有活动可以归结为从软件库中选择恰当的组件,然后把它们装配起来。 这种观点认为,大尺度的重用的确会非常有效地降低软件实现的工作量,但是这种方法节省的只是那些大规模工程的某一个片段.对于那些非常规的工程来说,我们总要创造一定量的、无法在现有组件库中找到的新代码。 本文所阐述的观点认为,软件重用适用范围取决于特定问题域(problem domain)的内在禀性。如果问题域本身存在重用阻抗,那么各种编码利器、优良的软件文化只能在边际上影响软件模块的重用率。我们为问题域赋予一个熵参数H(entropy parameter) ,用它来度量问题域本身的多样性.当H为1时,软件是极度多样化的,期望从中获得重用性是几乎不可能的;实际上,我们可以看到对于大型工程来说我们直接从库中引用组件的比例趋向于0.对于那些H<1的问题域,软件在某种程度上具有一定的同质性,随着H的减小重用的可能性就逐渐增大。我们所构建的这个理论认为,对于一个应用来说,从库中可以获得重用的代码比例最多只有1-H,剩下的代码是为特殊应用编写的定制代码.当H趋向于0,我们就逐渐趋向于理想中强重用的形态——“通过组装大尺度的组件来编程”。重用的可能性的严格的受限于参数H,它是某个问题域的内在禀性。 我们构建这个理论时,将重用性看作是利用库来压缩或者归并软件的能力。“压缩后程序”这样的术语可能贯穿全文。所谓的压缩后程序是指采用库来编写的程序,“未压缩程序”是指那些没有引用过任何库组件的版本。对此我们将引入信息论(information theory)和柯莫哥罗夫复杂性(Kolmogorove complexity).在描述后文所涉及的可压缩性时,这两者之间有一些细微的差别.信息论主要侧重于分析出现频率的模式并且给出他们的最短表述——比如英语里我们用”car”来替代”automobile carriage“。而柯莫哥罗夫复杂性则着重于描述我们针对某一个特定的程序,如何找到一个具有相同行为最短表述的能力,而不考虑这个程序应该是什么。我们假定读者对信息论有一定的基础知识(相关资料可以在[7,Ch2]或[19]中找到)。对于柯莫哥罗夫复杂性,我们会在第三节回顾一下基本定理.
库组件与素数。 整数可以分解为若干素数的乘积;软件可以看作是一系列组件的拼装.库组件事软件的素数.如果否认他们之间的这些高度相似性,是一件极为短视的做法: 。素数有无穷多个;而在5.2.1中我们会证明对于某个特定的问题域需要无穷多个组件来把程序降低到指定的尺寸(由此可见库编写者不愁没工作) 。第n个素数是整数 的因子。而本文将指出第n个最为频繁使用的库组件的理想重用率为 (Section 4.2) 。厄多斯-卡茨定理(Erdos-Kac theorem) 指出一个整数的因子数目趋向于一个正态分布.我们测量实验数据暗示存在一个极为类似的定理(图4),该定理应该是可被证明的。 。素数定理指出第n个素数长度是bit.我们认为理想化的库配置是,第n个最频繁使用的组件尺寸应该在 与 之间
图1:从若干个Unix平台上收集的共享对象的数据。它显示了库组件的引用次数.很显然引用次数与齐普夫频率定律的 结果(带点对角斜线)极为吻合。在第六节中我们会具体的解释这一数据。
重用和齐普夫定律。我们知道硬件指令频率遵从一个经典的曲线,该曲线是George K.Zipf是在研究自然语言中的单词使用频率时所提出的[16,18,27].齐普夫指出,如果在一个自然语言中根据使用频率来排序的话,第n个单词的频率是 .齐普夫经验曲线在许多场合都会遇到.证据显示编程语言的结构也遵从齐普夫定律[5,17].那么将其扩展到库组件上也是很自然的。我们的结果支持这个结论.图1展示了三个Unix平台上的共享对象中子过程的使用次数,显然它是类齐普夫的 曲线。这个结果会在第6节有详细的描述.这个曲线的出现不是偶然的.在4.2节中我们会看到它是程序员们试图通过库重用来尽可能地编写简短代码的直接结果.同时它也使得重用率趋向于”最大熵”,也即齐普夫定律曲线。 (未完待续)
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-19
Kolmogorov complexity和重用也能结合在一起。哈哈
|
|
返回顶楼 | |
发表时间:2009-08-19
作者首先用一个定理告诉我们,现在的编程语言大同小异:
Theorem 1 写道 There is a universal machine Φ such that for any machine φ, there is a positive constant c such that CΦ(x) <= Cφ(x) + c Changing machines (programming languages) within the “optimal class” changes Kolmogorov complexity only by a constant additive factor. Corollary: current programming languages are about as good as one can get; they are all equally expressive in a K-complexity sense. 我想证明大致会像这样: 用 A 实现 B 的解释器(长为常数 c),那么对于相同的功能,可以将 B 代码作为数据输入给解释器运行,所以: (A 语言的最短表述) <= (B 语言的最短表述 + c) 但是 …… 举个例子,某 A 的每个符号恰好都是 B 语言对应符号的双写,那么一般 A 程序长度都是 B 的两倍。A 和 B 要达到常数级的代码量差别,往往就得让 A 实现一个 B 解释器来运行 B 代码 …… 就算 B 不是银弹,从 A 换到 B 依然是一个巨大的改进。 |
|
返回顶楼 | |
发表时间:2009-08-19
最后修改:2009-08-19
night_stalker 写道 作者首先用一个定理告诉我们,现在的编程语言大同小异:
Theorem 1 写道 There is a universal machine Φ such that for any machine φ,
there is a positive constant c such that CΦ(x) <= Cφ(x) + c Changing machines (programming languages) within the “optimal class” changes Kolmogorov complexity only by a constant additive factor. Corollary: current programming languages are about as good as one can get; they are all equally expressive in a K-complexity sense. 我想证明大致会像这样: 用 A 实现 B 的解释器(长为常数 c),那么对于相同的功能,可以将 B 代码作为数据输入给解释器运行,所以: (A 语言的最短表述) <= (B 语言的最短表述 + c) 但是 …… 举个例子,某 A 的每个符号恰好都是 B 语言对应符号的双写,那么一般 A 程序长度都是 B 的两倍。A 和 B 要达到常数级的代码量差别,往往就得让 A 实现一个 B 解释器来运行 B 代码 …… 就算 B 不是银弹,从 A 换到 B 依然是一个巨大的改进。 其实不用那么复杂,只要往一个程序的尾巴后面pad,nop指令就能做到了。这个问题作者在后面有很严格的处理,也正是由于这个问题,作者推论出通常我们所接触的可以复用的代码都不符合Kolmogorov compressibility,而是符合information theoratic compressibility.也就是说可复用性只跟领域内在的随机分布有关系,跟人为构造的程序结构没有关系,不是说你发明了NB的不得了的语言,类库或者模式就能提高软件的复用性。 |
|
返回顶楼 | |
发表时间:2009-08-20
2 库重用建模
下面的章节里我们会经常用到一个假定 的期望.例如,若是一个将程序集映射到实数集的函数,那么如果下列极限存在的话,期望E与该极限等价
|
|
返回顶楼 | |
发表时间:2009-08-24
2.2 熵参数H 定义1(熵参数) 将问题域的熵参数定义为当 时的最大值: 除了在某些试验性的场景之外,我们不能期望从这个定义中直接计算出H值,不过我们通过经验作出估计还是有可能的.我们引入H参数主要是做为一种理论工具来对那些具有大量相似特性的问题域 或者发散特性的问题域 进行建模型.H的主要用途有如下几点。 断言2.1 在一个熵参数为H的问题域内,通过库组件重用的代码期望比例最多只有1-H
|
|
返回顶楼 | |
发表时间:2009-08-27
2.3 库的熵最大化
|
|
返回顶楼 | |
发表时间:2009-08-27
作者继续
有趣的文章 |
|
返回顶楼 | |
发表时间:2009-09-01
最后修改:2009-09-01
没看明白,挺抽象,不知道谁能不能用一个简单的比喻来描述一下
大师通常是能将复杂问题简单化的 |
|
返回顶楼 | |
发表时间:2009-09-01
最后修改:2009-09-01
houniao 写道 没看明白,挺抽象,不知道谁能不能用一个简单的比喻来描述一下
大师通常是能将复杂问题简单化的 偶不是"大师",赫赫。 |
|
返回顶楼 | |