Halo teman-teman, apa kabar? Kali ini saya ingin membahas sedikit tentang salah satu problem yang ada di web rosalind.info. Judulnya ialah "Mendel's First Law". Sebagai acuan, teman-teman bisa cek dahulu problem yang akan kita bahas (disini).
Di problem ini kita akan disajikan 3 angka integer yang mewakili jumlah organisme homozigot dominan (AA), heterozigot (Aa), dan homozigot resesif (aa). Tugas kita ialah mencari probability dari keturunan organisme-organisme tersebut yang memiliki fenotip dominan (AA/Aa) dalam bentuk desimal (double). Setiap organisme saling bertemu satu kali.
Cara 1:
Jadi, untuk mencari jawaban dari problem ini ialah pertama dengan mencari kemungkinan-kemungkinan keturunan yang menghasilkan AA/Aa. Kita runtut satu persatu (metode seperti gambar di atas):
- AA bertemu AA = 4 AA.
- AA bertemu Aa = 2 AA + 2 Aa.
- AA bertemu aa = 4 Aa.
- Aa bertemu Aa = 1 AA + 2 Aa + 1 aa.
- Aa bertemu aa = 2 Aa + 2 aa.
- aa bertemu aa = 4 aa.
Berikut kode untuk pengerjaannya (dalam bahasa java) :
static long seluncur (int x) {
return x * (x - 1) / 2;
}
static void solve() {
int k = ni();
int m = ni();
int n = ni();
long totDominant = (seluncur(k) * 4) + ((long)k * m * 4) + ((long)k * n * 4) + (seluncur(m) * 3) + ((long)m * n * 2);
out.printf("%.5f", 1.0 * totDominant / (seluncur(k + m + n) * 4));
}
Seperti yang teman-teman lihat, kodenya cukup simpel. Rumusnya ialah jumlah kemungkinan yang dikehendaki (AA/Aa) / jumlah semua kemungkinan.
Cara 2:
Cara kedua ialah dengan cara yang berkebalikan dengan cara 1. Jika di cara 1 kita langsung menghitung kemungkinan yang dikehendaki, di cara 2 kita menghitung kemungkinan yang dikehendaki melalui jumlah semua kemungkinan - jumlah yang tidak dikehendaki (aa). Rumusnya ialah (jumlah semua kemungkinan - jumlah yang tidak dikehendaki (aa)) / jumlah semua kemungkinan.
Disini saya memakai fungsi ni() untuk meng-input data string. Fungsi tersebut adalah extend dari salah satu sistem input di java, yaitu BufferedReader. Sedangkan untuk output-nya saya memakai fungsi out.printf(). Fungsi tersebut 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 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 :https://4eso7phymodee.wordpress.com/2015/03/22/mendels-laws/
No comments:
Post a Comment