【发布时间】:2013-04-08 18:55:04
【问题描述】:
给定输入数组
[a,b,c,d,e]
还有一个“加入”功能(a,b) => (a+b)
我的代码返回以下数组数组,其中包含通过将连接函数应用于各种元素对而获得的每个可能的变化,同时保持顺序:
[
[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],
]
在视觉上,我想要做的是:
代码有效,但我不知道该叫什么 - 如果存在这样的名称,我想使用其他熟悉此操作的开发人员会理解的名称。它不是一个幂集,但它是类似的……这个特定的集合/数组操作有名字吗?
编辑:好的。它们不是排列;排列都是不同顺序的 5 元素数组[[a,b,c,d,e], [e,d,c,b,a], [a,d,b,c,e], ...]
它们不是分区,因为任何子集只能包含输入的相邻元素。 - 换句话说,分区将允许这样做:
(这可能源于没有有序集合概念的纯集合论。)
它们不是组合,因为输出的每个元素只使用输入集的每个成员一次。
我认为myArray.OrderedPartitions((a,b) => (a+b)) 可能是一个合适的简洁和解释性。
【问题讨论】:
-
为什么
[a+b+c+d+e]不见了? -
@Landei 我的错误 :) 编辑了问题以包含缺失的排列。
-
这与部分总和或分段总和有关,但是,这不是准确的描述。
-
它们绝对是不是任何种类的排列!根据定义,排列是对同一组项目的重新排序。但是,这里没有两个具有相同项目的列表。
-
我称之为Order-dependent Integer Partition。它基本上等同于您可以将数字写为整数和的所有方式:
1+1+1+1+1 1+1+1+2 1+1+2+1 1+1+3 1+2+1+1 1+2+2 ...
标签: arrays algorithm math powerset set-theory