Membangkitkan Kombinasi

Membangkitkan Kombinasi dari sebuah himpunan S berarti membentuk himpunan C yang merupakan salah satu subhimpunan dari S.

Permasalahan umum dalam membangkitkan kombinasi adalah:

Diberikan sebuah himpunan S, tentukan:

  • Semua kombinasi yang mungkin dari himpunan S
  • Semua kombinasi r elemen dari himpunan S
  • Kombinasi r elemen dari himpunan S, pada indeks ke-i sesuai urutan leksikografik

Membangkitkan Semua Kombinasi yang Mungkin

Cara paling mudah untuk membangkitkan semua kombinasi (himpunan bagian) yang mungkin adalah dengan menggunakan representasi biner.

Setiap himpunan bagian {a, b, c, d} yang berisi 4 elemen, dapat direpresentasikan sebagai bilangan biner 4 digit, yang masing masing bit menunjukkan ada tidaknya elemen tersebut dalam himpunan. Himpunan {a, c} misalnya, dapat direpresentasikan dengan bilangan biner 1010 (atau desimal 10), jika elemen-elemen a, b, c, d berturut-turut diwakili oleh bit ke 3, 2, 1, dan 0.

 Himpunan      :   { a,  b,  c,  d }
 Representasi biner:     1   0   1   0
 Himpunan bagian:   { a,      c     }

Representasi seperti ini memetakan setiap macam kombinasi dengan tepat satu bilangan asli. Daftar berikut menunjukkan semua kombinasi dari {a, b, c, d} beserta representasi binernya.

 Himpunan        Biner  Desimal
 --------------- ------ -------
 { }              0000     0
 { a }            1000     8
 { b }            0100     4
 { c }            0010     2
 { d }            0001     1
 { a, b }         1100    12
 { a, c }         1010    10
 { a, d }         1001     9
 { b, c }         0110     6
 { b, d }         0101     5
 { c, d }         0011     3
 { a, b, c }      1110    14
 { a, b, d }      1101    13
 { a, c, d }      1011    11
 { b, c, d }      0111     7
 { a, b, c, d }   1111    15

Berdasarkan ini kita dapat menyusun sebuah algoritme yang akan membentuk semua kombinasi yang mungkin, berdasarkan bilangan asli yang berkaitan dengannya. Banyak kombinasi yang mungkin untuk sebuah himpunan S, sesuai dengan banyaknya elemen himpunan kuasa dari S, adalah:

Maka bilangan asli yang berkaitan dengan masing-masing himpunan bagian S adalah berada dalam jangkauan .

Berikut ini adalah pseudocode-nya:

 Diberikan sebuah himpunan S:
 n = banyak elemen S
 
 for i = 0 to 2n-1
 begin
   B = representasi bilangan i dalam bentuk biner
   S' = { }
 
   for j = 0 to n-1
   begin
     if digit ke-j dari B adalah 1 then
       tambahkan kepada S' elemen ke-j dari S
   end
 
   Tuliskan S'
 end

Kelemahan algoritme ini adalah daftar kombinasi yang dihasilkan tidak otomatis dalam keadaan terurut secara leksikografik.

Lihat pula


Templat:Algoritme-stub