Permutasi dan Kombinasi dengan Python

 Permutasi

Pertama sekali untuk dapat melakukan permutasi di Python kita harus mengimpor fungsi permutations dari paket itertools. Fungsi permutations() menerima argumen list sebagai input dan mengembalikan sebuah list berisi semua permutasi yang mungkin.

Kombinasi

Fungsi combinations menerima argumen list dan sebuah bilangan r, dan mengembalikan daftar tuple dari semua kombinasi dengan panjang r yang mungkin.

jika n tidak jauh dari r maka menggunakan definisi kombinasi rekursif mungkin lebih baik, karena xC0 == 1 Anda hanya akan memiliki beberapa iterasi:

Definisi rekursif yang relevan di sini adalah:

nCr = (n-1) C (r-1) * n/r

Ini dapat dihitung dengan baik menggunakan rekursi ekor dengan daftar berikut:

[(n - r, 0), (n - r + 1, 1), (n - r + 2, 2), ..., (n - 1, r - 1), (n, r)]

yang tentu saja mudah dihasilkan dalam Python (kami menghilangkan entri pertama sejak nC0 = 1) oleh izip(xrange(n - r + 1, n+1), xrange(1, r+1)) Perhatikan bahwa ini mengasumsikan r <= n Anda perlu memeriksa untuk itu dan menukar mereka jika tidak. Juga untuk mengoptimalkan penggunaan jika r <n/2 maka r = n - r.

Sekarang kita hanya perlu menerapkan langkah rekursi menggunakan rekursi ekor dengan mengurangi. Kita mulai dengan 1 karena nC0 adalah 1 dan kemudian gandakan nilai saat ini dengan entri berikutnya dari daftar seperti di bawah ini.


1.    Untuk menghindari overflow, lakukan semuanya di ruang log. Gunakan fakta bahwa log (a * b) = log (a) + log (b), dan log (a/b) = log (a) - log (b). Ini membuatnya mudah untuk bekerja dengan faktorial yang sangat besar: log (n!/M!) = Log (n!) - log (m!), Dll.

2.    Gunakan fungsi gamma sebagai ganti faktorial. Anda dapat menemukannya di scipy.stats.loggamma. Ini adalah cara yang jauh lebih efisien untuk menghitung faktor-log dari penjumlahan langsung. loggamma(n) == log(factorial(n - 1)), dan demikian pula, gamma(n) == factorial(n - 1).


Komentar

Postingan populer dari blog ini

Aturan Penjumlahan

Distribusi Binomial

Geometric Distribution & Poisson Distribution