Pengertian Algoritma
Kata "Algoritma" berarti "Seperangkat aturan atau instruksi terbatas yang harus diikuti dalam perhitungan atau operasi pemecahan masalah lainnya.
" Atau "
Prosedur untuk memecahkan masalah matematika dalam jumlah langkah terbatas yang sering melibatkan operasi rekursif."
Oleh karena itu, Algoritma merujuk pada rangkaian langkah terbatas untuk memecahkan masalah tertentu.
[image]
Penggunaan Algoritma:
Algoritma memiliki peran penting dalam berbagai bidang dan memiliki banyak aplikasi. Beberapa bidang utama di mana algoritma digunakan meliputi:
- Ilmu Komputer: Algoritma menjadi dasar pemrograman komputer dan digunakan untuk memecahkan masalah mulai dari pengurutan dan pencarian sederhana hingga tugas kompleks seperti kecerdasan buatan dan pembelajaran mesin.
- Matematika: Algoritma digunakan untuk memecahkan masalah matematika, seperti mencari solusi optimal untuk sistem persamaan linear atau mencari jalur terpendek dalam graf.
- Penelitian Operasi: Algoritma digunakan untuk mengoptimalkan dan membuat keputusan dalam bidang seperti transportasi, logistik, dan alokasi sumber daya.
- Kecerdasan Buatan: Algoritma adalah dasar dari kecerdasan buatan dan pembelajaran mesin, dan digunakan untuk mengembangkan sistem pintar yang dapat melakukan tugas seperti pengenalan gambar, pemrosesan bahasa alami, dan pengambilan keputusan.
- Ilmu Data: Algoritma digunakan untuk menganalisis, memproses, dan mengambil wawasan dari sejumlah besar data dalam bidang seperti pemasaran, keuangan, dan kesehatan. Ini hanya beberapa contoh dari banyak aplikasi algoritma. Penggunaan algoritma terus berkembang seiring munculnya teknologi dan bidang baru, menjadikannya komponen penting dalam masyarakat modern.
Algoritma bisa sederhana atau kompleks tergantung pada apa yang ingin Anda capai.
Ini dapat dimengerti dengan mengambil contoh memasak resep baru. Untuk memasak resep baru, seseorang membaca instruksi dan langkah-langkahnya dan melaksanakannya satu per satu, sesuai urutannya. Hasil yang diperoleh adalah hidangan baru yang dimasak dengan sempurna. Setiap kali Anda menggunakan telepon, komputer, laptop, atau kalkulator Anda, Anda menggunakan Algoritma. Demikian pula, algoritma membantu melakukan tugas dalam pemrograman untuk mendapatkan hasil yang diharapkan.
Algoritma yang dirancang bersifat independen bahasa, yaitu hanya instruksi murni yang dapat diimplementasikan dalam bahasa apa pun, dan hasilnya akan sama seperti yang diharapkan.
Mengapa Kita Memerlukan Algoritma?
- Algoritma diperlukan untuk memecahkan masalah kompleks dengan efisien dan efektif.
- Mereka membantu mengotomatisasi proses dan membuatnya lebih andal, lebih cepat, dan lebih mudah dilakukan.
- Algoritma juga memungkinkan komputer melakukan tugas yang sulit atau tidak mungkin dilakukan manusia secara manual.
- Mereka digunakan dalam berbagai bidang seperti matematika, ilmu komputer, teknik, keuangan, dan banyak bidang lainnya untuk mengoptimalkan proses, menganalisis data, membuat prediksi, dan memberikan solusi atas masalah.
Karakteristik Algoritma
Seperti seseorang tidak akan mengikuti instruksi tertulis apa pun untuk memasak resep, tetapi hanya yang standar. Demikian pula, tidak semua instruksi tertulis untuk pemrograman adalah algoritma. Untuk beberapa instruksi agar menjadi algoritma, harus memiliki karakteristik berikut:
- Jelas dan Tak Bisa Disalahartikan: Algoritma harus tidak ambigu. Setiap langkahnya harus jelas dalam semua aspek dan harus mengarah hanya pada satu makna.
- Input yang Terdefinisi dengan Baik: Jika algoritma menyatakan untuk mengambil input, input tersebut harus terdefinisi dengan baik. Mungkin memerlukan input atau tidak.
- Output yang Terdefinisi dengan Baik: Algoritma harus dengan jelas mendefinisikan output yang akan dihasilkan dan itu juga harus terdefinisi dengan baik. Harus menghasilkan setidaknya 1 output.
- Keterbatasan: Algoritma harus terbatas, yaitu harus berakhir setelah waktu yang terbatas.
- Dapat Dilakukan: Algoritma harus sederhana, umum, dan praktis, sehingga dapat dieksekusi dengan sumber daya yang tersedia. Tidak boleh mengandung teknologi masa depan atau hal lain.
- Independen Bahasa: Algoritma yang dirancang harus bersifat independen bahasa, yaitu harus berupa instruksi yang sederhana yang dapat diimplementasikan dalam bahasa apa pun, dan hasilnya akan sama seperti yang diharapkan.
- Input: Sebuah algoritma memiliki nol atau lebih input. Setiap instruksi yang berisi operator fundamental harus menerima nol atau lebih input.
- Output: Sebuah algoritma menghasilkan setidaknya satu output. Setiap instruksi yang berisi operator fundamental harus menerima nol atau lebih input.
- Ketegasan: Semua instruksi dalam algoritma harus tak ambigu, tepat, dan mudah diinterpretasikan. Dengan merujuk pada instruksi mana pun dalam algoritma, seseorang dapat dengan jelas memahami apa yang harus dilakukan. Setiap operator fundamental dalam instruksi harus didefinisikan tanpa ambigu.
- Keterbatasan: Sebuah algoritma harus berakhir setelah jumlah langkah yang terbatas dalam semua kasus uji. Setiap instruksi yang berisi operator fundamental harus berakhir dalam jumlah waktu yang terbatas. Loop tak terbatas atau fungsi rekursif tanpa kondisi dasar tidak memiliki keterbatasan.
- Efektivitas: Sebuah algoritma harus dikembangkan dengan menggunakan operasi dasar, sederhana, dan layak sehingga seseorang dapat melacaknya hanya dengan menggunakan kertas dan pensil.
Sifat-sifat Algoritma:
- Harus berakhir setelah waktu yang terbatas.
- Harus menghasilkan setidaknya satu output.
- Harus mengambil nol atau lebih input.
- Harus deterministik, artinya memberikan output yang sama untuk kasus input yang sama.
- Setiap langkah dalam algoritma harus efektif, yaitu setiap langkah harus melakukan beberapa pekerjaan.
Jenis-jenis Algoritma
Terdapat beberapa jenis algoritma yang tersedia. Beberapa algoritma penting adalah:
-
Brute Force Algorithm: Ini adalah pendekatan paling sederhana untuk mengatasi masalah. Algoritma brute force adalah pendekatan pertama yang muncul ketika kita menemui masalah.
-
Recursive Algorithm: Algoritma rekursif didasarkan pada rekursi. Dalam hal ini, masalah dipecah menjadi beberapa bagian sub dan fungsi yang sama dipanggil berulang-ulang.
-
Backtracking Algorithm: Algoritma backtracking membangun solusi dengan mencari di antara semua solusi yang mungkin. Dengan menggunakan algoritma ini, kita terus membangun solusi dengan mengikuti kriteria. Setiap kali solusi gagal, kita melacak kembali ke titik kegagalan, membangun solusi berikutnya, dan melanjutkan proses ini hingga kita menemukan solusi atau semua solusi yang mungkin telah diperiksa.
-
Searching Algorithm: Algoritma pencarian digunakan untuk mencari elemen atau kelompok elemen dari struktur data tertentu. Algoritma ini dapat memiliki jenis yang berbeda berdasarkan pendekatannya atau struktur data tempat elemen tersebut harus ditemukan.
-
Sorting Algorithm: Pengurutan adalah pengaturan kelompok data dengan cara tertentu sesuai dengan persyaratan. Algoritma yang membantu melakukan fungsi ini disebut algoritma pengurutan. Biasanya algoritma pengurutan digunakan untuk mengurutkan kelompok data secara meningkat atau menurun.
-
Hashing Algorithm: Algoritma hashing bekerja secara serupa dengan algoritma pencarian. Tetapi mereka mengandung indeks dengan ID kunci. Dalam hashing, sebuah kunci ditugaskan ke data tertentu.
-
Divide and Conquer Algorithm: Algoritma ini memecah masalah menjadi sub-masalah, menyelesaikan satu sub-masalah, dan menggabungkan solusi untuk mendapatkan solusi akhir. Ini terdiri dari tiga langkah berikut:
- Membagi
- Menyelesaikan
- Menggabungkan
-
Greedy Algorithm: Dalam jenis algoritma ini, solusi dibangun bagian demi bagian. Solusi untuk bagian berikutnya dibangun berdasarkan manfaat langsung dari bagian berikutnya. Solusi yang memberikan manfaat paling besar akan dipilih sebagai solusi untuk bagian berikutnya.
-
Dynamic Programming Algorithm: Algoritma ini menggunakan konsep penggunaan solusi yang sudah ditemukan sebelumnya untuk menghindari perhitungan berulang dari bagian yang sama dari masalah. Ini membagi masalah menjadi submasalah yang tumpang tindih yang lebih kecil dan menyelesaikannya.
-
Randomized Algorithm: Dalam algoritma berbasis acak, kita menggunakan angka acak sehingga memberikan manfaat segera. Angka acak membantu dalam menentukan hasil yang diharapkan.
Untuk mempelajari lebih lanjut tentang jenis-jenis algoritma, lihat artikel tentang "Jenis-Jenis Algoritma".
Kelebihan Algoritma:
- Mudah Dipahami: Algoritma mudah untuk dipahami karena mengikuti langkah-langkah yang terstruktur. Ini membantu programmer dan orang lain dalam memahami solusi yang diusulkan.
- Representasi Berjenjang Solusi: Algoritma adalah representasi langkah demi langkah dari solusi untuk masalah yang diberikan. Ini membantu dalam merinci bagaimana masalah dipecahkan dengan jelas.
- Pemecahan Masalah dalam Bagian-Bagian Kecil: Algoritma memecah masalah menjadi bagian-bagian kecil atau langkah-langkah, sehingga lebih mudah bagi programmer untuk mengubahnya menjadi program nyata.
Kekurangan Algoritma:
- Waktu yang Dibutuhkan: Menulis algoritma memerlukan waktu yang cukup lama, sehingga bisa memakan waktu.
- Kesulitan Memahami Logika Kompleks: Memahami logika kompleks melalui algoritma bisa menjadi sangat sulit, terutama untuk masalah yang lebih rumit.
- Pernyataan Cabang dan Pengulangan Sulit Ditunjukkan: Pernyataan cabang (if-else) dan perulangan sulit ditunjukkan dalam algoritma, terutama jika kompleksitas logika tinggi.
Cara Merancang Algoritma:
Untuk menulis algoritma, hal-hal berikut diperlukan sebagai prasyarat:
- Definisi Masalah yang Jelas: Masalah yang akan dipecahkan oleh algoritma harus didefinisikan dengan jelas.
- Pertimbangan Kendala Masalah: Kendala masalah harus dipertimbangkan saat menyelesaikan masalah.
- Input yang Dibutuhkan: Input yang dibutuhkan untuk memecahkan masalah harus ditentukan.
- Output yang Diharapkan: Output yang diharapkan saat masalah terpecahkan harus ditentukan.
- Solusi dalam Kendala yang Diberikan: Solusi untuk masalah ini harus ada dalam kendala yang diberikan.
Kemudian algoritma ditulis dengan bantuan parameter di atas agar dapat memecahkan masalah tersebut.
Contoh: Pertimbangkan contoh untuk menambahkan tiga angka dan mencetak hasilnya.
Langkah 1: Memenuhi Prasyarat
Seperti yang telah dibahas sebelumnya, untuk menulis algoritma, prasyaratnya harus dipenuhi.
- Masalah yang Akan Diselesaikan oleh Algoritma: Menambahkan 3 angka dan mencetak hasil penjumlahan mereka.
- Kendala Masalah yang Harus Dipertimbangkan: Angka harus berisi hanya digit dan tidak ada karakter lain.
- Input yang Dibutuhkan untuk Menyelesaikan Masalah: Tiga angka yang akan ditambahkan.
- Output yang Diharapkan Ketika Masalah Terselesaikan: Jumlah dari tiga angka yang diambil sebagai input, yaitu sebuah nilai bilangan bulat tunggal.
- Solusi untuk Masalah Ini dalam Kendala yang Diberikan: Solusinya melibatkan penjumlahan dari 3 angka. Ini dapat dilakukan dengan bantuan operator '+' atau operator bit-wise, atau metode lainnya.
Langkah 2: Merancang Algoritma
Sekarang mari rancang algoritma dengan bantuan prasyarat di atas:
Algoritma untuk menambahkan 3 angka dan mencetak hasilnya:
-
MULAI
-
Deklarasikan tiga variabel bilangan bulat, yaitu num1, num2, dan num3.
-
Ambil tiga angka yang akan ditambahkan sebagai input dalam variabel num1, num2, dan num3 secara berurutan.
-
Deklarasikan variabel bilangan bulat sum untuk menyimpan hasil penjumlahan tiga angka.
-
Lakukan penjumlahan tiga angka dan simpan hasilnya dalam variabel sum.
-
Cetak nilai variabel sum.
-
SELESAI
Langkah 3: Menguji Algoritma dengan Mengimplementasikannya
Untuk menguji algoritma, mari implementasikan dalam bahasa Python:
# Variabel untuk mengambil input dari
# tiga angka
num1 = num2 = num3 = 0
# Variabel untuk menyimpan hasil penjumlahan
sum = 0
# Ambil tiga angka sebagai input
num1 = int(input("Masukkan angka pertama: "))
num2 = int(input("Masukkan angka kedua: "))
num3 = int(input("Masukkan angka ketiga: "))
# Hitung jumlah menggunakan operator +
# dan simpan dalam variabel sum
sum = num1 + num2 + num3
# Cetak hasil penjumlahan
print("\nJumlah dari ketiga angka adalah:", sum)
Output
Masukkan angka pertama: 0
Masukkan angka kedua: 0
Masukkan angka ketiga: -1577141152
Jumlah dari ketiga angka adalah: -1577141152
Berikut adalah algoritma langkah demi langkah dari kode:
- Deklarasikan tiga variabel num1, num2, dan num3 untuk menyimpan tiga angka yang akan ditambahkan.
- Deklarasikan variabel sum untuk menyimpan hasil penjumlahan dari tiga angka tersebut.
- Gunakan pernyataan cout untuk meminta pengguna memasukkan angka pertama.
- Gunakan pernyataan cin untuk membaca angka pertama dan simpan di dalam num1.
- Gunakan pernyataan cout untuk meminta pengguna memasukkan angka kedua.
- Gunakan pernyataan cin untuk membaca angka kedua dan simpan di dalam num2.
- Gunakan pernyataan cout untuk meminta pengguna memasukkan angka ketiga.
- Gunakan pernyataan cin untuk membaca dan simpan angka ketiga di dalam num3.
- Hitung hasil penjumlahan dari tiga angka menggunakan operator + dan simpan di dalam variabel sum.
- Gunakan pernyataan cout untuk mencetak hasil penjumlahan dari tiga angka.
- Fungsi utama mengembalikan nilai 0, yang menunjukkan bahwa program berhasil dieksekusi.
Kompleksitas waktu: O(1) Ruang Tambahan: O(1)
Satu masalah, banyak solusi: Solusi untuk suatu algoritma dapat satu atau lebih dari satu. Ini berarti bahwa saat mengimplementasikan algoritma, ada lebih dari satu metode untuk mengimplementasikannya. Misalnya, dalam masalah di atas yang melibatkan penjumlahan 3 angka, hasil penjumlahan dapat dihitung dengan berbagai cara:
- Operator +
- Operator bit-wise
- Dan lain-lain
Bagaimana cara menganalisis sebuah Algoritma?
Agar algoritma standar menjadi baik, harus efisien. Oleh karena itu, efisiensi suatu algoritma harus diperiksa dan dipertahankan. Ini dapat dilakukan dalam dua tahap:
-
Analisis Priori:
"Priori" berarti "sebelumnya". Oleh karena itu, analisis Priori berarti memeriksa algoritma sebelum implementasinya. Dalam hal ini, algoritma diperiksa ketika dituliskan dalam bentuk langkah-langkah teoritis. Efisiensi algoritma ini diukur dengan mengasumsikan bahwa semua faktor lain, misalnya kecepatan prosesor, konstan dan tidak memiliki efek pada implementasi. Biasanya dilakukan oleh perancang algoritma. Analisis ini independen dari jenis perangkat keras dan bahasa kompilator. Ini memberikan perkiraan jawaban untuk kompleksitas program.
-
Analisis Posterior:
"Posterior" berarti "setelah". Oleh karena itu, analisis Posterior berarti memeriksa algoritma setelah implementasinya. Dalam hal ini, algoritma diperiksa dengan mengimplementasikannya dalam bahasa pemrograman apa pun dan menjalankannya. Analisis ini membantu mendapatkan laporan analisis aktual dan nyata tentang kebenaran (untuk setiap masukan mungkin jika menunjukkan/mereturn keluaran yang benar atau tidak), ruang yang dibutuhkan, waktu yang diperlukan, dll. Itu tergantung pada bahasa kompilator dan jenis perangkat keras yang digunakan.
Apa itu kompleksitas Algoritma dan bagaimana cara menemukannya?
Sebuah algoritma didefinisikan sebagai kompleks berdasarkan jumlah Ruang dan Waktu yang dikonsumsi. Oleh karena itu, Kompleksitas Algoritma mengacu pada ukuran waktu yang dibutuhkan untuk mengeksekusi dan mendapatkan keluaran yang diharapkan, dan Ruang yang dibutuhkan untuk menyimpan semua data (input, data sementara, dan output). Oleh karena itu, kedua faktor ini mendefinisikan efisiensi algoritma. Dua faktor Kompleksitas Algoritma adalah:
- Faktor Waktu: Waktu diukur dengan menghitung jumlah operasi kunci seperti perbandingan dalam algoritma pengurutan.
- Faktor Ruang: Ruang diukur dengan menghitung ruang memori maksimum yang dibutuhkan oleh algoritma untuk berjalan/menjalankan.
Oleh karena itu, kompleksitas algoritma dapat dibagi menjadi dua jenis:
-
Kompleksitas Ruang:
Kompleksitas ruang algoritma mengacu pada jumlah memori yang dibutuhkan oleh algoritma untuk menyimpan variabel dan mendapatkan hasilnya. Ini bisa untuk input, operasi sementara, atau output.
Bagaimana menghitung Kompleksitas Ruang?
Kompleksitas ruang algoritma dihitung dengan menentukan 2 komponen berikut:
- Bagian Tetap: Ini mengacu pada ruang yang diperlukan oleh algoritma. Misalnya, variabel input, variabel output, ukuran program, dll.
- Bagian Variabel: Ini mengacu pada ruang yang bisa berbeda berdasarkan implementasi algoritma. Misalnya, variabel sementara, alokasi memori dinamis, ruang tumpukan rekursi, dll.
Oleh karena itu, kompleksitas ruang S(P) dari algoritma apa pun P adalah S(P) = C + SP(I), di mana C adalah bagian tetap dan S(I) adalah bagian variabel dari algoritma, yang tergantung pada karakteristik contoh I.
Contoh: Pertimbangkan algoritma berikut untuk Pencarian Linear
Langkah 1: MULAI Langkah 2: Dapatkan n elemen dari array dalam arr dan nomor yang akan dicari dalam x Langkah 3: Mulai dari elemen paling kiri dari arr[] dan bandingkan x satu per satu dengan setiap elemen arr[] Langkah 4: Jika x cocok dengan elemen, Cetak Benar. Langkah 5: Jika x tidak cocok dengan salah satu elemen, Cetak Salah. Langkah 6: SELESAI
Di sini, ada 2 variabel arr[] dan x, di mana arr[] adalah bagian variabel dari n elemen dan x adalah bagian tetap. Oleh karena itu, S(P) = 1+n. Jadi, kompleksitas ruang bergantung pada n (jumlah elemen). Sekarang, ruang tergantung pada jenis data dari variabel yang diberikan dan jenis konstan dan akan dikalikan sesuai.
-
Kompleksitas Waktu:
Kompleksitas waktu algoritma mengacu pada jumlah waktu yang diperlukan oleh algoritma untuk dieksekusi dan mendapatkan hasilnya. Ini bisa untuk operasi normal, pernyataan kondisional if-else, pernyataan loop, dll.
Bagaimana Cara Menghitung Kompleksitas Waktu?
Kompleksitas waktu algoritma juga dihitung dengan menentukan 2 komponen berikut:
- Bagian Waktu Konstan: Instruksi apa pun yang dieksekusi hanya sekali masuk dalam bagian ini. Misalnya, input, output, if-else, switch, operasi aritmatika, dll.
- Bagian Waktu Variabel: Instruksi apa pun yang dieksekusi lebih dari sekali, katakanlah n kali, masuk dalam bagian ini. Misalnya, perulangan, rekursi, dll.
Oleh karena itu, kompleksitas waktu T(P) dari algoritma apa pun P adalah T(P) = C + TP(I), di mana C adalah bagian waktu konstan dan TP(I) adalah bagian waktu variabel dari algoritma, yang tergantung pada karakteristik contoh I.
Contoh: Dalam algoritma Pencarian Linear di atas, kompleksitas waktu dihitung sebagai berikut:
Langkah 1: - Waktu Konstan Langkah 2: - Waktu Variabel (Mengambil n input) Langkah 3: - Waktu Variabel (Hingga panjang Array (n) atau indeks elemen yang ditemukan) Langkah 4: - Waktu Konstan Langkah 5: - Waktu Konstan Langkah 6: - Waktu Konstan
Oleh karena itu, T(P) = 1 + n + n(1 + 1) + 1 = 2 + 3n, yang dapat disebut sebagai T(n).
Bagaimana cara mengungkapkan sebuah Algoritma?
- Bahasa Alami: Di sini kita mengungkapkan Algoritma dalam bahasa Inggris alami. Terlalu sulit untuk memahami algoritma dari ini.
- Flowchart: Di sini kita mengungkapkan Algoritma dengan membuat representasi grafis/piktoral. Lebih mudah dipahami daripada Bahasa Alami.
- Pseudo Code: Di sini kita mengungkapkan Algoritma dalam bentuk anotasi dan teks informatif yang ditulis dalam bahasa Inggris sederhana yang sangat mirip dengan kode nyata, tetapi karena tidak memiliki sintaks seperti bahasa pemrograman mana pun, itu tidak dapat dikompilasi atau diinterpretasikan oleh komputer. Ini adalah cara terbaik untuk mengungkapkan algoritma karena dapat dimengerti bahkan oleh orang awam dengan pengetahuan tingkat sekolah.