Halo teman-teman, apa kabar? Kali ini saya ingin membahas sedikit tentang salah satu problem yang ada di web rosalind.info. Judulnya ialah "Independent Alleles". Sebagai acuan, teman-teman bisa cek dahulu problem yang akan kita bahas (disini).
Di problem ini kita akan disajikan 2 buah bilangan bulat (integer) yang mewakili "generasi ke berapa" dan "jumlah keturunan minimal", sebut saja k dan N. Dan tugas kita ialah mencari probabilitas dari munculnya keturunan AaBb, minimal N buah di generasi ke-k.
Idenya ialah dengan mencari total jumlah kemungkinan AaBb yang berjumlah minimal N buah; lalu dibagi dengan total semua kemungkinan.
Berikut kode pengerjaannya (dalam bahasa java) :
- public double comb (int n, int k) {
- double atas = 1.0;
- for (int i = 1; i <= n; i++) {
- atas *= i;
- }
- for (int i = 1; i <= k; i++) {
- atas /= i;
- }
- for (int i = 1; i <= n - k; i++) {
- atas /= i;
- }
- return atas;
- }
- public void solve() {
- int k = in.readInt();
- int n = in.readInt();
- int base = 1;
- for (int i = 0; i < k; i++) base *= 2;
- double res = 0.0;
- for (int i = base; i >= n; i--) {
- res += comb(base, i) * Math.pow(1, i) * Math.pow(3, base - i) / Math.pow(4, base);
- }
- out.printf("%.3f\n", res);
- }
Pertama, kita bisa mencari total semua kemungkinan dahulu (2^k); disini saya memakai variabel base untuk menghitungnya (baris 17-18).
Kemudian untuk mengkalkulasi, kita bisa memakai binomial distribution (baris 20-22). Inti dari binomial distribution sendiri ialah menghitung semua kemungkinan kombinasi sembari menghitung probabilitas di setiap kombinasi tersebut. Disini kita mencari kemungkinan kombinasi AaBb yang memiliki jumlah N buah sampai 2^k buah serta menghitung probabilitas di setiap kombinasi tersebut
Diatas, saya memakai fungsi in.readInt() untuk meng-input data integer. Fungsi tersebut adalah modifikasi dari salah satu sistem input yang ada di java (BufferedReader). Sedangkan untuk output-nya saya memakai fungsi out.printf() . Fungsi tersebut juga adalah modifikasi dari fungsi System.out.printf() yang merupakan fungsi default di java. Untuk lebih jelasnya teman-teman bisa melihat kode tambahan untuk memodifikasi fungsi tersebut (input maupun output) di versi lengkap kode saya di github.
Sekian dari saya. Jika teman-teman ingin menanyakan sesuatu, teman-teman bisa menulisnya di kolom komentar. Semoga bermanfaat dan sampai jumpa di artikel berikutnya!
Referensi :
Sumber gambar 1 :https://www.facebook.com/ProjectRosalind/
Sumber gambar 2 :http://rosalind.info/problems/lia/
No comments:
Post a Comment