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
Posting Komentar