知识卡片

并列与嵌套结构如何把复杂性收敛为确定值"1"

结构图卡

内容

三种平面结构中,”复杂度是否确定”决定了它们能不能被当作层次结构里”具有不变性”的一层来对待。并列结构(多个互不相关的域A..Z)之所以不应存在相互关系,是因为一旦存在关系,”处理这些关系”本身就会带来复杂性的增加,这与并列结构”总量不变、复杂性不变”的初衷相矛盾;因此只要并列域之间确实无关,无论域的个数怎么增长,系统规模线性增长而复杂性始终保持确定值1。嵌套结构(核心A与外围B..Z)里,如果B..Z之间本身还存在关系,图会变成网状,复杂性剧增;但可以把任意存在关系的B、C合并进核心(扩大A为A’),使A’与D..Z(此时D..Z之间无关,构成一个并列结构)之间只剩一条确定的关系m。这样,把嵌套结构A’_Z看作一个整体,其复杂性由”核心自身确定值1”与”核心到外围的关系m”共同构成,记为1+m——由于关系m本身是确定的,这个1+m依然是一个确定值。由此得出的结论是:非层次结构(无论是并列还是嵌套)都不会带来系统整体复杂性的持续增长,都可以被视为层次结构中某一层”具有不变性”的独立部分;对层次结构本身而言,任意两层之间自身的复杂度是1,层次结构整体的复杂性由层间关系的复杂性决定(1+m),且由于不变部分复杂度恒为1,层次结构整体的复杂性变化必然来自可变部分。可迁移启发:判断一个子系统的复杂度是不是”确定的”,不需要数出它里面有多少个模块,而是看它内部各部分之间的关系是不是能被穷举、被确定下来——只要关系是有限且确定的,规模再大也只是”1”这个确定值,只有关系本身不确定,复杂度才真正失控。

结构图

flowchart TB
  A["并列结构A..Z<br/>域间无关系→复杂度恒为1<br/>(规模随个数线性增长,复杂性不变)"]
  B["嵌套结构A(核心)_Z<br/>B/C间有关系→合并进核心得A'"]
  B --> C["A'与并列的D..Z<br/>只剩确定关系m<br/>整体复杂度=1+m(确定值)"]
  A --> D["均可视为层次结构中<br/>'具有不变性'的一层"]
  C --> D

参考来源

- 位置:《我的架构思想:基本模型、理论与原则》第6章《架构的表达与逻辑》之"6.4 系统总量不变,其本质是复杂性的不变"(源文件:_epub-src/ch016.xhtml) - 结论依据:原文说明"并列结构之间是不应有相互关系的。因为并列结构之间若存在关系,则'处理这些关系'将带来系统本身的复杂性的增加……若B..Z的任意组合之间存在关系,则它应当视为A的一部分……当我们把A'与D_Z看成整体结构A'_Z时,其复杂性应该由上述确定值1与一个关系m构成,可计为1+m", 直接支撑本卡关于并列/嵌套结构复杂度收敛的结论。 - 原始内容:由于嵌套结构可以理解为分成"核心与非核心两层"的层次结构,因此总的来说,非层次结构(嵌套和并列)的使用并不会带来系统整体复杂性的增加。