2011-11-29 16 views
8

Bir listenin bölümlenmesiyle, liste öğelerinin bir alt kümesini, herhangi bir bağımsız alt kümenin kesişiminin boş olacağı şekilde ve tüm alt kümelerin birleşimi orijinal listeye eşit olacak şekilde kastediyorum. Benim giriş liste {1,π,x} sonraMathematica'da bir listenin tüm bölümlerini nasıl alabilirim?

{ {{1},{π},{x}}, {{1,π},{x}}, {{1,x},{π}}, {{1},{x,π}}, {{1,π,x}} } 
+0

@yoda: OP terminolojisi ile karıştırılmamalıdır olabilir. Bunlar bölüm değil, katılıyorum. – Blender

+0

@Blender Evet, başka bir şeye ulaşabileceğini anladım. – abcd

+1

@Blender, yoda: Bunlar, Mathematica komutu [Partition] (http: // reference) anlamında değil, [setler anlamında bölümler] (http://en.wikipedia.org/wiki/Partition_of_a_set) .wolfram.com/mathematica/ref/Partition.html). – Simon

cevap

12

, beklendiği üzere Combinatorica paket zaten bu işlevi (SetPartitions) sahiptir 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]] 

kodunu adapte Ya kullanma!

Needs["Combinatorica`"] 

comb = SetPartitions[{a, b, c, d, e}] 

çek ikisi de aynı sonucu (ancak farklı sıralarda) dönmek olduğunu

Complement[bell, comb] == {} 
[email protected] == [email protected] 
(* Both of the above return True *) 
+0

, o ancak, zihinsel ayrıştırmak için biraz zaman alacak bildiğim kadarıyla, bu işi yapar söyleyebilirim teşekkürler! – Michael

+0

@Michael, Bu işlevi standart kitaplıklarda denetlemeyi unuttum. Yeni yaptığım güncellemeye bakın. –

+0

@Simon, düzenleme için teşekkürler. –

2
Ben kümesinin Powerset ile başlayacak

döndüren bir işlev istiyorum eğer

Örneğin, olanları süzmek sonra (Subsets[x] kullanın) ve nerede Union[x] setin orijinal seti değil.

Biraz yavaş, ama sezgisel buluyorum.

+0

Birliği {{1 x}, {π}} 'orijinal setidir; OP istediği halde. –

+3

@BillyONeal neden diyorsunuz o birlik {1, x} ve {π} eşit değil {1, π, x}? kümesinin elemanları sırası seti ... – Michael

+0

@Blender tanımına önemli değil: Ben düzeltilmiş buluyorum. :) Mr.Wizard @ –

İlgili konular