Bagaimana menyusun suatu algoritma pemrograman yang efisien?

Algoritma adalah urutan atau langkah-langkah untuk penghitungan atau untuk menyelesaikan suatu masalah yang ditulis secara berurutan. Sehingga, algoritma pemrograman adalah urutan atau langkah-langkah untuk menyelesaikan masalah pemrograman komputer.

Bagaimana menyusun suatu algoritma pemrograman yang efisien?

Efisiensi algoritma dapat ditinjau dari 2 hal yaitu efisiensi waktu (seberapa cepat algoritma dieksekusi) dan efisiensi memori (berapa banyak memori yang dibutuhkan untuk menjalankan algoritma). Meskipun algoritma memberikan keluaran yang benar (paling mendekati), tetapi jika kita harus menunggu berjam-jam untuk mendapatkan keluarannya, algoritma tersebut biasanya tidak akan dipakai, setiap orang menginginkan keluaran yang cepat. Begitu juga dengan memori, semakin besar memori yang terpakai maka semakin buruklah algoritma tersebut. Dalam kenyataannya, setiap orang bisa membuat algoritma yang berbeda untuk menyelesaikan suatu permasalahan, walaupun terjadi perbedaan dalam menyusun algoritma, tentunya kita mengharapkan keluaran yang sama. Jika terjadi demikian, carilah algoritma yang paling efisien dan cepat.

Faktor-faktor yang mempengaruhinya adalah :

  1. Banyaknya langkah: Makin banyak langkah atau instruksi yang digunakan dalam menyelesaikan masalah, maka makin lama waktu tempuh yang dibutuhkan dalam proses tersebut.

  2. Besar dan jenis input data: Besar dan jenis input data pada suatu algoritma akan sangat berpengaruh pada proses perhitugan yang terjadi. Jika jenis data adalah tingkat ketelitian tunggal(Single precision), maka waktu tempuh akan menjadi relatif lebih cepat dibandingkan dengan tingkat ketelitian ganda(double precesion).

  3. Jenis operasi: Waktu tempuh juga dipengaruhi oleh jenis operasi yang digunakan. Jenis operasi tersebut meliputi operasi matematika, nalar atau logika, atau yang lainnya. Sebagai contoh, operasi perkalian atau pembagian akan memakan waktu lebih lama dibandingkan operasi penjumlahan atau pengurangan.

SUMBER :
http://wartawarga.gunadarma.ac.id/2011/04/efisiensi-algoritma/

Hal yang perlu diperhatikan dalam pembuatan algoritma adalah waktu proses. Untuk menentukan waktu proses secara tepat merupakan pekerjaan yang sulit. Analisa yang diinginkan untuk menyatakan efisiensi algoritma haruslah dibuat seumum mungkin sehingga bisa dipakai pada semua algoritma, terlepas dari implementasinya. Dalam melakukan analisa suatu algoritma kita harus mengfokuskan diri pada operasi aktif yang merupakan pusat program, yaitu bagian program yang paling sering dieksekusi. Bagian-bagian lain seperti pemasukan data, penugasan dan lain sebagainya dapat diabaikan, karena bagian ini tidak dieksekusi sesering operasi aktif. Jumlah keksekusi operasi aktif inilah yang selanjutnya dihitung.

Pada suatu algoritma yang perlu kita ketahui pada umumnya adalah:

  • Space, yaitu alokasi yang bersifat sintetis

  • Struktur Program, berhubungan dengan berapa banyak langkah yang diperlukan untuk menjalankan algoritma yang dibuat

  • Rekursif, pemakaian fungsi rekursif atau perulangan pada suatu algoritma.

Kompleksitas waktu pada sebuah algoritma berisi jumlah langkah dan ekspresi bilangan yang dibutuhkan sebagai fungsi dari ukuran permasalahan. Kompleksitas ruang berkaitan dengan sistem memori yang dibutuhkan untuk eksekusi.

efisiensi waktu algoritma diukur dalam satuan n (problem size). terdapat 4 langkah untuk menentukan ukuran efisiensi waktu, antara lain:

  1. Menentukan problem size (n)
    image

  2. Menentukan operasi dominan
    operasi dominan merupakan operasi yang paling banyak dilakukan, sesuai konteks permasalahan. misalkan pada algoritma menentukan nilai max/ min, operasi dominannya adalah operasi perbandingan “>” atau “<”. pada algoritma searching operasi dominannya adalah operasi “=”.

  3. Menentukan Fungsi langkah → g(n)
    image

  4. Menentukan kompleksitas waktu O(f(n)) (Big Oh function)
    image

SUMBER:

http://technopark.surakarta.go.id/id/media-publik/komputer-teknologi-informasi/190-algoritma-pemrograman

Algoritma adalah kumpulan instruksi langkah-demi-langkah yang digunakan di bidang matematika dan ilmu komputer. Pemrogram komputer menggunakan algoritma untuk melakukan tugas dan perhitungan sederhana. Bahkan program komputer yang paling rumit pun dibangun dari kombinasi algoritma dasar. Menurut definisi, algoritma harus memiliki output, yang bisa berbentuk unit data komputer. Juga, algoritma harus terbatas. Algoritma pemrogram berbeda tergantung bahasa pemrograman, namun semua algoritme mengikuti prinsip desain tertentu, terlepas dari bahasa yang menjadi kode dasarnya.

HAL YANG PERLU DIPERHATIKAN DALAM MEMBUAT ALGORITMA:

  1. Teks algoritma berisi deskripsi langkah-langkah penyelesaian masalah.
  2. Tidak ada notasi yang baku dalam penulisan teks algoritma seperti notasi bahasa pemrograman.
  3. Setiap orang dapat membuat aturan penulisan dan notasi algoritmik sendiri.
  4. Notasi algoritmik bukan notasi bahasa pemrograman, karena itu pseudocode dalam notasi algoritmik tidak dapat dijalankan oleh komputer.
  5. Algoritma harus ditranslasikan ke dalam notasi bahasa pemrograman.

EFESIENSI ALGORITMA

Algoritma yang dapat dikatakan sebagai algoritma yang efisien, dimana pada saat pemrosesan algoritma tersebut tidak memakan banyak waktu dan juga memakan banyak memori dalam pemrosesannya. Efisiensi algoritma umumnya di tinjau dari 2 hal, yaitu efisiensi terhadap waktu, dan efisiensi terhadap memori.

Walaupun algoritma yang memberikan keluaran yang benar (paling mendekati kenyataan), tetapi jika harus menunggu berjam-jam atau mungkin berhari-hari untuk mendapatkan outputannya (dalam hal ini yang dimaksudkan adalah efisiensi dalam waktu), algoritma tersebut biasanya tidak akan dipakai. Kebanyakan orang lebih menginignkan algoritma yang memiliki pengeluaran atau hasil outputan yang lebih cepat. Waktu yang diperlukan (running time) oleh sebuah algoritma cenderung tergantung pada jumlah input yang diproses.

Running time dari sebuah algoritma adalah fungsi dari jumlah inputnya. Running time dari suatu algoritma berbeda-beda bergantung pada input yang diberikan. Dengan demikian pengukurannya dihitung sebagai fungsi dari besarnya input yang diberikan.

FAKTOR EFESIENSI ALGORITMA

Dalam meyusun suatu algoritma yang efisien yang pertama kita lakukan adalah mengetahui apa saja faktor yang mempengaruhi algoritma bisa dikatakan efisien.

1. Kecepatan

  • Banyak Langkah
    Makin banyak langkah atau instruksi yang digunakan dalam menyelesaikan masalah, maka makin lama waktu tempuh yang dibutuhkan dalam proses tersebut. Banyak langkah dalam suatu algoritma dinyatakan dengan banyaknya operasi aritmatika dan logika yang dilakukan. Dengan demikian hal ini bergantung pada statement dan jenis algoritma.

  • Besar dan Jenis Input

    • Input Size
      Menggunakan notasi n (jumlah data yang diperoleh oleh sebuah algoritma)
    • Tipe data
      Dua nilai yang sama dengan operator yang sama tetapi dengan variabel yang berbeda, maka terdapat perbedaan kecepatan/proses penyelesaian integer.
  • Operator
    Urutan penggunaan operator/penempatan operator bisa mempengaruhi efisiensi. Contoh perkalian lebih lama dari pada penjumlahan. Yang perlu diperhatikan adalah banyaknya operasi aritmatika dan logika yang dilakukan**

2. Alokasi Memory

Algoritma yang memakan banyak memori merupakan algoritma yang dapat dikatan memiliki kualitas buruk. Semakin besar memori yang terpakai untuk algoritma tersebut, maka akan semakin buruk algoritma tersebut. Berkaitan dengan struktur data dinais, procedure/function call dan recursif

MENYUSUN ALGORITMA YANG EFISIEN

Dalam menyusun algoritma ada beberapa teknik penulisan salah satunya adalah dengan menggunakan pseudocode. Teknik menyusun algoritma yang baik menggunakan pseudocode antara lain :


1 Mulailah dengan menuliskan tujuan prosesnya.

Ini memberi Anda cara untuk menilai apakah pseudocode selesai: singkatnya, jika pseudocode menyelesaikan tujuannya, itu sudah selesai. Lanjutkan dengan menuliskan prosesnya. Jika prosesnya sederhana, mungkin hanya butuh satu kali. Lihatlah apa yang telah Anda tuliskan dan ajukan pertanyaan berikut:

  • Apakah pseudokode ini bisa dimengerti oleh seseorang yang paling tidak akrab dengan prosesnya?
  • Apakah pseudocode ditulis sedemikian rupa sehingga mudah diterjemahkan ke dalam bahasa komputasi?
  • Apakah pseudocode menggambarkan proses yang lengkap tanpa meninggalkan apapun?
  • Apakah setiap nama objek yang digunakan dalam pseudocode dipahami dengan jelas oleh khalayak sasaran?
  • Apakah pseudocode sangat efisien di gunakan ?

2 Tulis langkah awal pseudocode yang mengatur bagian fungsi.

Bagian pertama kode biasanya menentukan variabel dan elemen lain yang akan Anda gunakan untuk membuat algoritme berfungsi. Sertakan variabel dimensi. Tulis kode yang menunjukkan bagaimana setiap variabel atau elemen data akan digunakan. Mengatur kontrol Anda perlu menentukan kontrol Anda dalam kotak pseudocode-dari kotak teks dan gambar dalam bahasa pemrograman berorientasi obyek ke kontrol dasar dalam kode sederhana-sama seperti yang Anda lakukan dalam proyek reguler.


3 Tulis pseudocode fungsional

Gunakan prinsip pseudocode untuk menambahkan kode “event-driven” atau “object-driven” tertentu saat Anda menyelesaikan “setting” untuk proyek Anda. Setiap baris kode Anda harus menggambarkan fungsi urutan, fungsi perulangan, fungsi pilihan, atau tindakan lain yang berbeda.


4. Tambahkan komentar, jika perlu.

Dalam kode komputer yang sebenarnya, komentar berfungsi untuk mengidentifikasi tugas dan bagian kode ke pembaca. Pseudocode harus secara jelas menjelaskan langkah-langkah ini dalam bahasa Inggris yang hampir polos, jadi Anda mungkin tidak perlu menggunakan komentar sampai Anda menerjemahkan pseudocode Anda ke dalam bahasa pemrograman.
Banyak programmer memilih untuk mengerjakan pseudocode mereka ke dalam kode akhir dalam bentuk komentar. Ini membantu pemrogram lain - yang mungkin berkolaborasi, meninjau, atau belajar dari kode - memahami maksud di balik setiap baris.


5. Baca dan cek kembali

Cobalah untuk menempatkan diri Anda pada posisi orang lain yang membaca kode ini, dan pertimbangkan apakah arah Anda sejelas mungkin.
Kaji kode Anda sesuai dengan berbagai elemen yang dikandungnya. Sebagai contoh: operasi inti untuk komputer mencakup membaca atau mendapatkan informasi dari sebuah file, menulis ke file atau tampilan di layar, melakukan perhitungan matematis, menilai variabel data, dan membandingkan satu atau lebih elemen. Masing-masing memiliki tempat sendiri dalam proyek kode komputer, dan juga dalam pseudocode yang Anda tulis untuk mendukung proyek itu.

Sampaikan dengan pseudocode yang mudah dibaca, sambil menirukan bahasa kode sebenarnya yang akan Anda gunakan, tidak perlu mengikuti bahasa pemrograman komputer dengan benar.

Pastikan semua elemen yang berlaku ada dalam pseudocode. Meskipun Anda mungkin tidak memerlukan beberapa item yang lebih teknis, seperti deklarasi variabel, Anda tetap harus mewakili setiap tugas dan elemen dengan jelas di teks.


6. Tinjau pseudocode.

Setelah pseudocode menggambarkan proses dengan cukup baik, tanpa kesalahan kotor, tinjaulah kembali dengan pemangku kepentingan lainnya dalam proyek. Jika bekerja dalam tim. Mintalah anggota tim Anda untuk memberi umpan balik tentang bagian mana dari pseudocode yang perlu diperbaiki.

Deskripsi proses seringkali tidak lengkap, jadi ini akan membantu mengisi rincian proses. Jika Anda mengerjakan sendiri kode itu, bacalah apa yang telah Anda tulis dan pertimbangkan untuk meminta orang lain mengoreksinya.

Jika tim Anda tidak menyetujui pseudocode, tulis ulang untuk kejelasannya. Tanyakan kepada tim Anda apa yang salah: apakah langkah Anda tidak jelas, atau apakah Anda lupa menyertakan bagian penting dari prosesnya?


7. Menerjemahkan Pseudocode ke Bahasa Pemrograman

a. Melacak pseudocode dan mengerti cara kerjanya.

Pseudocode menyajikan sebuah algoritma. Misalnya, kode mungkin mengurutkan daftar array menurut abjad. Kode “genetik” dasar akan memandu Anda saat Anda membangun algoritma dalam bahasa pemrograman pilihan Anda.

b. Gunakan elemen pengkodean yang sesuai dengan bahasa pemrograman.

Unsur-unsur ini mungkin mencakup deklarasi variabel, jika pernyataan, dan pernyataan loop. Setiap garis prosedur dapat diimplementasikan dengan berbagai cara. Pilihan Anda tergantung pada tingkat bahasa pemrograman Anda.

Misalnya, coba tampilkan data agar bisa dilihat pengguna. Anda dapat menggunakan jendela pemberitahuan untuk menampilkan data, atau Anda dapat menggunakan antarmuka grafis yang ada yang sedang Anda rancang.

c. Terapkan pseudocode

Tuliskan pseudocode dengan rapi, sederhana dan efisien. Sebuah pseudocode yang ditulis dengan baik bisa membuat keseluruhan algoritma lebih efisien dan bebas dari kesalahan saat Anda meluncurkan program.

d. Bandingkan kode aktual dengan pseudocode.

Pastikan kode aktual Anda yang diterapkan mengikuti petunjuk yang ditetapkan oleh pseudocode. Sebagai contoh: jika Pseudocode menerima input dan output, cobalah semua kemungkinan masukan, dan bandingkan hasil keluaran kode yang Anda implementasikan dengan output yang dihitung dari pseudocode. Anda bisa meminta sesama programmer untuk melakukan penelusuran atau merekomendasikan metode yang lebih baik untuk kode Anda.

Sumber

How to Write Pseudocode: Rules, Tips, & Helpful Examples ( diakses pada tanggal 3 oktober 2017 )
Efisiensi Algoritma - College ( diakses pada tanggal 3 oktober 2017 )