这个set/array操作有名字吗?

Dyl*_*tie 17 arrays algorithm math set-theory powerset

给定输入数组

[a,b,c,d,e]
Run Code Online (Sandbox Code Playgroud)

和'加入'功能 (a,b) => (a+b)

我的代码返回以下数组数组,包含通过将join函数应用于各种元素对而获得的每个可能的变体,同时保持顺序:

[
  [a,b,c,d,e],
  [a,b+c,d,e],
  [a,b+c+d,e],
  [a,b,c+d,e],
  [a+b,c,d,e],
  [a+b,c+d,e],
  [a+b+c,d,e],
  [a+b+c+d,e],
  [a,b,c,d+e],
  [a,b+c,d+e],
  [a,b+c+d+e],
  [a,b,c+d+e],
  [a+b,c,d+e],
  [a+b,c+d+e],
  [a+b+c,d+e],
  [a+b+c+d+e],
]
Run Code Online (Sandbox Code Playgroud)

在视觉上,我想要做的是:

有序分区图

代码可以工作,但我不知道该怎么称呼它 - 并且想要使用熟悉此操作的其他开发人员可以理解的名称,如果存在这样的名称.它不是一个电源组,但它是类似的......这个特定的set/array操作有一个名字吗?

编辑:好的.它们不是排列 ; 排列将是不同顺序的5元素阵列[[a,b,c,d,e], [e,d,c,b,a], [a,d,b,c,e], ...]

它们不是分区,因为任何子集只能包含输入的相邻元素. - 换句话说,分区允许这样:

描绘非相邻元素的分区的图

(这可能源于纯集理论,没有有序集的概念.)

它们不是组合,因为输出的每个元素都只使用输入集的每个成员一次.

我认为myArray.OrderedPartitions((a,b) => (a+b))可能是一个适当的简洁和解释.

MBo*_*MBo 5

编辑后 - 这些是数组的所有分区(它们的计数是2 ^(n-1),因为你可以用joiner(+)替换任何分隔符(冒号)).

注意 - 这些是数组分区,而不是设置分区.


G. *_*ach 5

正如mbeckish在评论中所说的那样,这些集合(一旦原始集合上的顺序被修复)与依赖于顺序的整数分区同构,这显然通常被称为组合.每组中恰好有2 n-1种成分.对于每一个1kn,有确切(n-1) choose (k-1)的组成n元素融入k套,保护您开始搞的定的顺序.为了使其可视化,请考虑按顺序放置的集合的元素以及按该顺序作为邻居的元素之间的空间; 把你的例子想象成A|B|C|D|E.您会注意到确实存在n-1可能的边界.要创建k-composition,您只需选择k-1那些可能的边界,这可能是您生成集合的方式,也可能不是.求和所有(n-1) choose (k-1)用于k1n然后让我们2 n-1个尽可能组合物的数量.