Учитывая входной массив
[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]
отсутствует? - person Landei   schedule 16.04.2013[ a+b, c+d, e ]
). - person LSerni   schedule 16.04.20131+1+1+1+1 1+1+1+2 1+1+2+1 1+1+3 1+2+1+1 1+2+2 ...
- person mbeckish   schedule 16.04.2013