목록의 파티션으로, 나는 목록 집합의 부분 집합의 집합을 의미합니다. 즉, 집합의 서로 다른 쌍의 집합이 비어 있고 모든 부분 집합의 합집합이 원래 목록과 같습니다. 내 입력 목록 {1,π,x}
그때 내가Mathematica에서리스트의 모든 파티션을 얻으려면 어떻게해야합니까?
{ {{1},{π},{x}}, {{1,π},{x}}, {{1,x},{π}}, {{1},{x,π}}, {{1,π,x}} }
목록의 파티션으로, 나는 목록 집합의 부분 집합의 집합을 의미합니다. 즉, 집합의 서로 다른 쌍의 집합이 비어 있고 모든 부분 집합의 합집합이 원래 목록과 같습니다. 내 입력 목록 {1,π,x}
그때 내가Mathematica에서리스트의 모든 파티션을 얻으려면 어떻게해야합니까?
{ {{1},{π},{x}}, {{1,π},{x}}, {{1,x},{π}}, {{1},{x,π}}, {{1,π,x}} }
는 당연히는 Combinatorica 패키지가 이미이 기능 (SetPartitions)가, http://mathforum.org/advanced/robertd/bell.html
BellList[1] = {{{1}}};
BellList[n_Integer?Positive] := Join @@
(ReplaceList[#,
{{b___, {S__}, a___} :> {b, {S, n}, a},
{S__} :> {S, {n}}}
] & /@ BellList[n - 1])
s = {a, b, c, d, e};
bell = [email protected]@s /. n_Integer :> s[[n]]
에서 코드를 적용 또는 사용!
Needs["Combinatorica`"]
comb = SetPartitions[{a, b, c, d, e}]
검사 둘 다 같은 결과를 (그러나 다른 순서에) 반납
Complement[bell, comb] == {}
[email protected] == [email protected]
(* Both of the above return True *)
@ Mr.Wizard, 그게 정신적으로 구문 분석하는 동안 조금 걸릴거야,하지만 내가 말할 수있는 한, 고마워! – Michael
@Michael, 표준 라이브러리에서이 기능을 확인하는 것을 잊어 버렸습니다. 방금 한 업데이트를 확인하십시오. –
@ 사이먼, 편집 해 주셔서 감사합니다. –
를 반환하는 기능을 원하는 경우
예를 들어, 사람을 필터링 한 후 (Subsets[x]
사용) 어디 Union[x]
세트의 원래 세트가 아닙니다.
조금 느리지 만 직관적이라고 생각합니다.
'{{1, x}, {π}} '의 조합은 원래 집합이 아닙니다. 그러나 OP는 그것을 요구했다. –
@BillyONeal 왜 조합 {1, x}와 {π}가 {1, π, x}와 같지 않다고합니까? 집합의 요소 순서는 집합의 정의와 상관이 없습니다. – Michael
@Blender : 나는 정정합니다. :) –
@yoda : 영업 이익은 용어와 혼동 될 수 있습니다. 이들은 파티션이 아니라고 동의합니다. – Blender
@Blender 그래, 나는 그가 뭔가 다른 것을 얻고 있을지도 모른다는 것을 깨달았다. – abcd
@Blender, yoda : 이들은 Mathematica 명령어 [Partition] (http : // reference)의 의미가 아닌 [세트 감각의 파티션] (http://en.wikipedia.org/wiki/Partition_of_a_set)입니다. .wolfram.com/mathematica/ref/Partition.html). – Simon