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
suntingCara 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.