Artikel ini merupakan jawaban saya terhadap salah satu pertanyaan pada situs Kotakode.com, sebuah forum dan komunitas para developer di Indonesia. Lihat pertanyaan asli
Saya membeli buku Matematika Diskrit dan terdapat materi yang didalamnya meliputi:1. Logika
2. Himpunan
3. Matriks, relasi, dan fungsi
4. Induksi Matematik
5. Algoritma dan Bilangan Bulat
6. Kombinatorial dan Peluang Diskrit
7. Aljabar Boolean
8. Graf
9. Pohon
10. Kompleksitas Algoritma
Namun saya kurang mengerti dalam pengimplementasian-nya, Mohon penjelasannya 🙏
Matematika Diskrit adalah salah satu ilmu yang sebenarnya cukup berguna di dunia pemrograman, namun sayangnya banyak pengajar (termasuk dosen) menjelaskan ilmu ini dengan konvensi dan cara yang terlihat kurang relevan dengan dunia pemrograman saat ini, misalnya penggunaan simbol A ∪ B daripada A && B
dan ¬S daripada !S
.
Tujuan untuk belajar soal Logika dan Aljabar Boolean ini sebenarnya cukup jelas: agar kamu dapat memahami cara menggunakan perintah IF-ELSE dan operator Boolean secara baik dan benar. Di sini saya bakal kasih contoh sebuah function untuk mengecek apakah bilangan a
, b
, dan c
berurutan dari yang terkecil hinga teratas:
// Bahasa C
#include <stdio.h>
int main(){
int a = 3, b = 4, c = 9;
// Perhatikan penggalan berikut ini
if (a <= b && b <= c){
puts("Berurutan!");
} else {
puts("TIDAK berurutan!");
}
return 0;
}
Pertanyaannya di sini adalah, apa yang harus diubah sehingga perintah puts("Berurutan!")
lah yang ditaruh di dalam bagian else
dan sebaliknya. Dari materi Logika inilah kita mengetahui bahwa negasi dari A ∩ B (A dan B), yakni ¬(A ∩ B), sebenarnya sama dengan (¬A) ∪ (¬B) (tidak A atau tidak B). Sehingga, penggalan IF-ELSE tersebut dapat ditulis ulang sebagai:
if (!(a <= b) || !(b <= c)){
puts("TIDAK berurutan!");
} else {
puts("Berurutan!");
}
Dan karena penggalan !(a <= b)
sebenarnya sama saja dengan a > b
atau b < a
, maka hal tersebut dapat dipersingkat lagi menjadi:
if (a > b || b > c){
puts("TIDAK berurutan!");
} else {
puts("Berurutan!");
}
Kemudian, materi Pohon, Graph, dan Matriks juga sangat berguna untuk memahami berbagai jenis struktur data yang sering dipakai dalam dunia pemrograman sehari-hari. Jika kamu berminat untuk mengolah gambar menggunakan pustaka/library OpenCV, kamu nantinya akan sering bermain-main dengan transformasi Matriks yang mungkin kamu sudah kenal saat duduk di bangku SMA atau bahkan SD.
Sedangkan, Pohon (khususnya Pohon Biner / Binary Tree) merupakan salah satu topik yang paling sering ditanya saat kamu melamar pekerjaan di dunia software engineer. Mengapa? Karena struktur data tersebut kini masih berguna untuk melakukan pengurutan/penyortiran dan pencarian kumpulan data yang jauh lebih efisien daripada menggunakan deretan Array maupun Linked List.
Kalau kamu berminat dalam dunia keamanan siber (Cyber Security), kamu mau tidak mau harus memahami tentang Graph karena melalui Graph, kamu bisa memetakan relasi antara sebuah informasi dengan informasi lainnya untuk membantu kamu melancarkan proyek investigasi kamu. Oh iya, fitur navigasi dalam aplikasi peta seperti Google Maps juga tidak dapat dibuat secara efisien tanpa pemahaman soal Graph yang lebih kompleks dan mendalam.
Saya sebenarnya belum bisa menjawab hubungan antara semua bab yang kamu sebutkan dengan dunia pemrograman sehari-hari. Tetapi, ada beberapa hal lagi yang cukup penting: Himpunan bakal sangat berguna bagi kamu baik dalam dunia pemrograman berbasis objek (OOP) serta Database, karena nantinya kamu harus mencari hubungan-hubungan antar sebuah objek dengan objek lain, sebuah tabel/entity di dalam database dengan tabel/entity lain, dan hubungan antara himpunan data dengan himpunan data lain.
Dan tentunya, Kombinatorial, Peluang Diskrit, dan Kompleksitas Algoritma cukup penting juga untuk dipahami. Karena sebagai pemrogram/programmer yang baik kita tentunya tidak hanya membuat algoritma yang tepat, tetapi juga efisien baik dalam penggunaan memori maupun waktu. Dengan memahami ketiga hal tersebut, kamu dapat menentukan apakah algoritma yang kamu buat terasa berlebihan dalam menggunakan perintah-perintah pada komputer.
Demikian jawaban saya. Terima kasih.
Leave a Reply