Saturday, 11 September 2021

Mendel's First Law (Rosalind)

    

rosalind



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