Tanggal :September 27, 2020

Pengenalan Desain dan Analisis Algoritma

Spread the love

    Sebagai salah satu dasar dari ilmu komputer, algoritma merupakan hal yang sangat penting untuk dikuasai oleh orang-orang yang berkecimpung di dunia ilmu komputer, dari peneliti sampai ke praktisi. Tentunya penguasaan akan algoritma tidak cukup hanya sampai pada tahap mengetahui dan menggunakan algoritma yang tepat untuk menyelesaikan masalah. Seorang yang mengerti ilmu komputer harus juga mampu merancang dan mengembangkan sebuah algoritma berdasarkan masalah-masalah yang ditemui. Tulisan ini bertujuan untuk memberikan pengertian mendasar mengenai perancangan (desain) dan pengembangan algoritma, agar pembaca dapat tidak hanya menggunakan algoritma yang sudah ada, tetapi juga merancang dan mengembangkan algoritma sesuai dengan masalah yang akan diselesaikan. Selain memberikan dasar perancangan, tulisan ini juga membahas jenis-jenis algoritma yang ada, untuk kemudian melakukan analisa terhadap beberapa algoritma untuk setiap jenisnya. Analisis algoritma dilakukan dengan tujuan utama agar pembaca dapat mengambil keputusan yang tepat dalam memilih algoritma untuk solusi. Dalam mendefinisikan algoritma, kita harus dapat mendefinisikan tiga hal utama dengan jelas, yaitu:

  1. Masalah, yaitu sebuah persoalan yang ingin diselesaikan oleh sebuah algoritma.
  2. Masukan, yaitu contoh data atau keadaan yang menjadi permasalahan.
  3. Keluaran, yaitu bentuk akhir dari data atau keadaan setelah algoritma diimplementasikan ke masukan. Keluaran merupakan hasil ideal yang diinginkan dan dianggap telah menyelesaikan masalah.

Kita telah mengetahui dengan jelas makna dari algoritma, algoritma seperti apa yang dapat dikatakan sebagai algoritma yang baik? Pada umumnya kita tidak ingin menggunakan algoritma yang salah untuk menyelesaikan masalah karena hal ini dapat menyebabkan masalah tidak diselesaikan dengan optimal, atau lebih buruknya, tidak diselesaikan sama sekali. Sebuah algoritma yang baik memiliki sifat-sifat berikut:

  1. Benar, di mana algoritma menyelesaikan masalah dengan tepat, sesuai dengan definisi masukan / keluaran algoritma yang diberikan.
  2. Efisien, berarti algoritma menyelesaikan masalah tanpa memberatkan bagian lain dari apliikasi. Sebuah algoritma yang tidak efisien akan menggunakan sumber daya (memori, CPU) yang besar dan memberatkan aplikasi yang mengimplementasikan algoritma tersebut.
  3. Mudah diimplementasikan, artinya sebuah algoritma yang baik harus dapat dimengerti dengan mudah sehingga implementasi algoritma dapat dilakukan siapapun dengan pendidikan yang tepat, dalam waktu yang masuk akal.

Pada prakteknya, tentunya ketiga hal tersebut tidak dapat selalu tercapai. Kebenaran dari sebuah algoritma umumnya selalu dapat dicapai, setidaknya untuk nilai-nilai masukan umum, tetapi efisiensi dan kemudahan implementasi tidak selalu didapatkan. Begitupun, tentunya kita harus tetap berusaha mencapai ketiga hal tersebut dalam merancang sebuah algoritma. Sedangkan Desain dan analisis algoritma adalah  prosedur komputasi yang terdefinisis dengan baik yang membutuhkan nilai sebagai input dan menghasilkan nilai sebagai output , algoritma juga alat bantu yang menyelesaikan komputasional yang terdefinisi dengan baik . algoritma yang digunakan dalam menyelesaikan harus jelas,biasanya dalam sebuah permasalahan komputasi akan tergambarkan bagaimana hubungan antara input dan output, seperti yang di jelaskan dalam contoh mencari nilai dalam sebuah array. Metode penyelesaian yang login dan ‘wajib’ benar sesuai keinginan masalah, diamana input dijalankan sesuai algoritma dan menghasilkan output yang diharapkan. Adapun dalam mata kuliah ini menggunakan kode pseudocode untuk memudahkan algoritma, pseudocode sendiri menurut Wikipedia pseudocode adalah deskripsi tingkat tinggi informal dan ringkas atas algoritma pemrograman computer yang menggunakan konvensi structural atas suatu Bahasa pemrograman dan di tujukan untuk dibaca oleh manusia dan bukan oleh mesin, dengan kata lain pseudocode peringkasan algoritma menjadi Bahasa pemrograman yang di inginkan Karena menurut definisinya pseudo yang berarti imitasi,mirip, atau menyerupai dengan kode Bahasa pemrograman. Kompleksitas algoritma tergantung algortima tersebut lebih efektif ke arah waktu komputasi atau kapasitas memory tergantung algoritma yang di buat dan panjang pendeknya algoritma. Dalam penulisan pseudocode tidak ada aturan yang baku,oleh Karena itu pseudocode biasanya ditulis berbasiskan Bahasa pemrograman yang akan digunakan.Sehingga lebih tepat digunakan untuk menggambarkan algoritma yang akan dikomunikasikan kepada programmer. Namun aturan yang sering digunakan adalah seperti berikut :  

  1. Indent menyatakan struktur blok.
  2. Statemen perulangan dikonstruksi dengan while, for dan repeat.
  3. Statemen penyeleksian kondisi/syarat dikonstruksi dengan if, then dan else.
  4. Simbol “à” menyatakan komentar untuk statemen baris-baris berikutnya.
  5. Penugasan berganda (multiple assignment) i ¬ j ¬ e  menyatakan penugasan/pemberian nilai e kedalam i dan j; pernyataan ini ekivalen dengan j ¬ e lalu diikuti i ¬ j. ü  Dan lainnya.

Adapun beberapa perbedaan antara pseudocode dan Bahasa java adalah :  

 PseudocodeJava
PenugasanAß10A=10
PersamaanA=BA==B
Komentar<> //
Perulangan yang DigunakanWhile,for,repeatFor,while,do while dll.
Bahasa Java dan Pseudocode

Adapun contoh masalah komputasional seperti masalah pencari data (Searching problem) :

Input yang merupakan barisan n bilangan asli <a1,a2,…an> dalam larik A dan sebuah bilangan key yang ingin dicari. Sedangkan output nya ada lokasi key di dalam A,dan jika key tidak ditemukan di dalam A maka tambahkan key ke unsur terakhir. A sendiri adalah <31,41,59,26,41,58> dan key 26.

Dalam masalah di atas membutuhkan perulangan untuk menulusuri indeks A dan penyeleksian syarat untuk membandingkan key dengan unsur dari indeks yang di telusuri dan tidak lupa juga kondisi dimana jika tidak ditemukannya key maka dibuatlah key di indeks terakhir. Penyelesaian permasalahan di atas dapat diselesaikan dengan algoritma pseudo code berikut:  

Linear-Search(A, key)
1          indeks ¬ 1;
2          ada ¬ False;
3          while  indeks £ length[A]  and  ada = False
4              if  A[indeks] = key  then
5                   ada = True;
6               indeks ¬ indeks + 1;
7    indeks ¬ indeks – 1;
8          if  ada = False  then
9               indeks ¬ length[A] + 1;
10       A[indeks] ¬ key;
 
11        return  indeks
 
untuk lebih jelasnya anda dapat membacanya disini.

 

Share

Leave a Reply

Your email address will not be published. Required fields are marked *