Pilihan Cerdas Sekolah Coding

Daftar Kelas Trial Gratis

Efisiensi Algoritma: Pengertian, Tujuan, dan Contohnya

Oleh Daniel Wirajaya (website)

Co-founder, Acutis Academy; Director, QuBisa. Pakar e-learning dengan pengalaman industri lebih dari 20 tahun.


Gambaran Efisiensi Algoritma

Mengapa Perlu Efisiensi Algoritma?

Seperti kata pepatah, “Banyak jalan menuju Roma,” demikian pula dalam dunia algoritma. Ada banyak algoritma yang berbeda untuk mencapai tujuan yang sama. Masalahnya, walaupun hasilnya sama, setiap algoritma memiliki kelebihan dan kekurangan masing-masing, sehingga harus digunakan secara tepat.

Contohnya, untuk melakukan pengurutan, kita mengenal ada algoritma insertion sort, merge sort, quick sort, dan lain-lain. Semua algoritma ini memiliki tujuan yang sama, yaitu untuk mengurutkan data. Hanya saja masing-masing memiliki kelebihan dan kekurangan, sehingga harus digunakan secara tepat.

Karena itu, efisiensi algoritma merupakan topik yang penting, karena tentunya kita menginginkan agar kita dapat menggunakan algoritma yang efektif dan efisien. Dalam artikel ini, kita akan mengupas topik ini secara lengkap termasuk apa definisinya, manfaatnya, cara mengukurnya, beserta contoh-contohnya,

Pengertian Efisiensi Algoritma

Efisiensi algoritma adalah ukuran seberapa baik suatu algoritma memanfaatkan sumber daya komputasi, terutama waktu dan memori, untuk menyelesaikan suatu masalah. Algoritma yang efisien akan menghasilkan output yang benar dengan waktu eksekusi yang cepat dan penggunaan memori yang minimal.

Tujuan Efisiensi Algoritma

Contoh Algoritma yang Efisien dan Tidak Efisien

Sebagai perbandingan antara algoritma yang efisien dan tidak efisien, mari kita angkat sebuah contoh di mana ketika diberi sebuah bilangan bulat positif N, kita harus mengecek apakah bilangan tersebut merupakan bilangan prima atau bukan.

Seperti kita ketahui, bilangan prima adalah bilangan yang hanya habis dibagi oleh 1 dan bilangan itu sendiri. Karena itu, untuk mengetahui apakah sebuah bilangan itu merupakan bilangan prima atau tidak, kita cukup mengecek apakah ada bilangan lain yang habis membagi bilangan tersebut. Bila ada angka lain selain dari 1 dan bilangan itu sendiri yang habis membagi bilangan tersebut, artinya bilangan itu bukanlah bilangan prima.

Implementasi dari algoritma ini dapat dilihat dalam kode C++ berikut ini.

    bool isPrimeNaive(int N)
    {
        if (N <= 1)
            return false;

        for (int i = 2; i < N - 1; i++)
        {
            // Cek apakah i habis membagi
            // Jika ya, berarti N bukan bilangan prima
            if (N % i == 0)
                return false;
        }
        // Tidak ada bilangan lain yang lebih kecil dari N yang habis membagi N
        // Berarti N adalah bilangan prima
        return true;
    }

Ketika fungsi di atas menerima input berupa sebuah angka prima, misalnya 97, maka ia akan mengecek satu per satu mulai dari angka 2 sampai dengan 96 apakah dapat habis membagi 97. Dengan cara kerja seperti ini, berarti jumlah pengecekan yang dilakukan akan meningkat seiring dengan semakin besarnya input yang diberikan.

Kalau kita telaah secara lebih teliti, kita dapat melihat bahwa angka yang dapat habis membagi sebuah b ilangan lainnya (yang disebut “faktor”) selalu berpasangan, kecuali jika faktor itu adalah akar kuadrat yang bilangan tersebut. Contohnya diperlihatkan dalam gambar di bawah ini.

Faktor dari 100

Dengan memanfaatkan hal tersebut, maka sebenarnya kita tidak perlu mengecek sampai N1, tetapi cukup sampai N. Jika sampai dengan N tidak ada angka yang dapat habis membagi bilangan N, berarti N adalah bilangan prima.

    bool isPrimeSqrt(int N)
    {
        if (N <= 1)
            return false;

        // Pertidaksamaan i * i <= n adalah setara dengan i <= akar dari N
        for (int i = 2; i * i <= N; i++)
        {
            // Cek apakah i habis membagi
            // Jika ya, berarti N bukan bilangan prima
            if (N % i == 0)
                return false;
        }
        // N adalah bilangan prima
        return true;
    }

Algoritma kedua ini jauh lebih efisien dibandingkan dengan yang pertama. Jika input yang diberikan adalah 97, seperti contoh di atas, maka jumlah pengecekan yang dilakukan adalah sekitar sepesepuluh kali lebih sedikit. Apalagi bila input yang dimasukkan adalah angka yang jauh lebih besar, maka penghematan yang didapatkan akan jauh lebih besar pula.

Faktor yang Mempengaruhi Efisiensi Algoritma

Berikut adalah beberapa faktor yang dapat mempengaruhi efisiensi algoritma:

Teknik untuk Meningkatkan Efisiensi Algoritma

Berikut adalah beberapa teknik praktek pemrograman yang dapat dilakukan untuk meningkatkan kinerja algoritma:

Kesimpulan

Efisiensi algoritma adalah aspek penting dalam pengembangan aplikasi. Dengan memahami konsep efisiensi algoritma dan menerapkan teknik-teknik yang tepat, kita dapat mengembangkan program yang lebih cepat, lebih efisien, dan lebih optimal.