Ya, saya akan mengatakan mengetahui sesuatu tentang kompleksitas komputasi adalah suatu keharusan bagi setiap programmer yang serius. Selama Anda tidak berurusan dengan kumpulan data besar, Anda akan baik-baik saja tanpa mengetahui kompleksitas, tetapi jika Anda ingin menulis sebuah program yang menangani masalah serius, Anda memerlukannya.
Dalam kasus khusus Anda, contoh Anda menemukan komponen yang terhubung mungkin telah bekerja untuk grafik hingga mengatakan node. Namun, jika Anda mencoba grafik dengan 100.000100100.000 node maka algoritma dosen Anda mungkin akan mengaturnya dalam 1 detik, sedangkan algoritma Anda akan (tergantung pada seberapa buruk kompleksitasnya) diambil 1 jam, 1 hari, atau mungkin bahkan 1 keabadian.
Kesalahan yang agak umum dilakukan oleh siswa dalam kursus algoritme kami adalah beralih ke array seperti ini:
while array not empty
examine first element of array
remove first element from array
Ini mungkin bukan kode yang paling indah tetapi dalam program yang rumit sesuatu seperti ini mungkin muncul tanpa disadari oleh programmer. Sekarang, apa masalahnya dengan program ini?
Misalkan kita menjalankannya pada kumpulan data elemen. Dibandingkan dengan program berikut, program sebelumnya akan berjalan 50.000 lebih lambat.100.00050.000
while array not empty
examine last element of array
remove last element from array
Saya harap Anda setuju bahwa memiliki pengetahuan untuk membuat program Anda berjalan kali lebih cepat mungkin merupakan hal penting bagi seorang programmer. Memahami perbedaan antara kedua program tersebut membutuhkan beberapa pengetahuan dasar tentang teori kompleksitas dan beberapa pengetahuan tentang rincian bahasa tempat Anda pemrograman.50.000
Dalam bahasa kode pseudocode saya, "menghapus elemen dari array" menggeser semua elemen ke kanan elemen yang dihapus satu posisi dari kiri. Ini membuat menghapus elemen terakhir menjadi operasi karena untuk melakukan itu kita hanya perlu berinteraksi dengan 1 elemen. Menghapus elemen pertama adalah O ( n ) karena untuk menghapus elemen pertama kita perlu menggeser semua yang lain n - 1O ( 1 )O ( n )n - 1 satu posisi ke kiri juga.
Latihan yang sangat mendasar dalam kompleksitas adalah untuk membuktikan bahwa program pertama akan melakukan operasi sedangkan program kedua hanya menggunakannoperasi. Jika Anda memasukkann=100.000Anda akan melihat satu program secara drastis lebih efisien daripada yang lain.12n2nn = 100.000
Ini hanya contoh mainan tetapi sudah membutuhkan pemahaman dasar tentang kompleksitas untuk membedakan antara kedua program, dan jika Anda benar-benar mencoba untuk men-debug / mengoptimalkan program yang lebih rumit yang memiliki kesalahan ini, dibutuhkan pemahaman yang lebih besar untuk menemukan di mana bug itu. Karena kesalahan seperti menghapus elemen dari array dengan cara ini dapat disembunyikan dengan sangat baik oleh abstraksi dalam kode.
Memiliki pemahaman yang baik tentang kompleksitas juga membantu ketika membandingkan dua pendekatan untuk menyelesaikan masalah. Misalkan Anda telah datang dengan dua pendekatan berbeda untuk memecahkan masalah komponen yang terhubung pada Anda sendiri: untuk memutuskan di antara mereka akan sangat berguna jika Anda dapat (dengan cepat) memperkirakan kerumitan mereka dan memilih yang lebih baik.