Algoritma dan struktur data
A. Pengertian Algoritma dan struktur data
Algoritma adalah suatu prosedur yang tepat untuk memecahkan masalah dengan menggunakan bantuan komputer serta menggunakan suatu bahasa pemrogaman tertentu seperti bahasa Pascal, Visual Basic, Java, dan masih banyak lagi bahasa yang lain.Pranata (2002:8) dalam kehidupan sehari-hari, sebenarnya kita juga menggunakan algoritma untuk melaksanakan sesuatu. Sebagai contoh, ketika kita menulis surat, maka kita perlu melakukan beberapa langkah sebagai berikut:
1. Mempersiapkan kertas dan amplop.
2. Mempersiapkan alat tulis, seperti pena atau pensil.
3. Mulai menulis.
4. Memasukkan kertas ke dalam amplop.
5. Pergi ke kantor pos untuk mengeposkan surat tersebut.
B. Fungsi Algoritma
Dengan algoritma, kita dapat mengatasi masalah dari yang sederhana sampai yang kompleks sekalipun. Namun, seorang user harus mampu membuat suatu program dengan menggunakan bahasa yang difahami oleh komputer. Sebelum disajikan dalam bentuk bahasa pemrogaman, sebaiknya kita membuat diagram alir (Flow Chart) dan Pseudocode. Hal ini dimaksudkan agar dapat mempermudah kerja atau mempermudah dalam membuat program. Selain itu, algoritma dapat mengatasi masalah logika dan masalah matematika dengan cara berurutan, tetapi kadang-kadang algoritma tidak selalu berurutan, hal ini dikenal dengan proses percabangan.
C. Kriteria Program Algoritma dalam Bidang Komputer
Pada dasarnya, komputer adalah mesin digital, artinya komputer hanya bisa mengenal kondisi ada arus listrik (biasanya dilambangkan dengan 1) dan tidak ada arus listrik (biasanya dilambangkan dengan 0). Dengan kata lain, kita harus menggunakan sandi 0 dan 1 untuk melakukan pemrogaman komputer. Bahasa pemrogaman yang menggunakan sandi 0 dan 1 ini disebut bahasa mesin. Karena bahasa mesin sangat susah, maka muncul ide untuk melambangkan untaian sandi 0 dan 1 dengan singkatan kata yang lebih mudah difahami manusia biasa disebut dengan mnemonic code. Bahasa pemrogaman yang menggunakan singkatan kata ini disebut bahasa assembly.
Program algoritma harus komplit, nyata, dan jelas. Meskipun tugas algoritma tidak menghasilkan solusi, tetapi proses harus berakhir hal ini disebut dengan semi algorithm (prosedur akan berjalan terus atau biasa disebut dengan perulangan). Intinya kita tidak boleh menambah masalah, akan tetapi kita harus mampu menyelesaikan masalah untuk mendapat hasil yang tepat. Adapun contoh algoritma seperti dalam menghitung luas lingkaran dari masukan berupa jari-jari lingkaran. Rumus lingkaran adalah L=?*R*R
Berikut ini adalah contoh algoritma untuk menghitung luas lingkaran:
1. Masukkan R
2. Pi ? 3,14
3. L ? Pi*R*R
4. Tulis L
Perhatikan tanda ? pada baris kedua dan ketiga. Tanda ini berarti nilai di sebelah kanan diberikan pada operan di sebelah kiri. Sebagai contoh, untuk baris kedua, nilai 3,14 diberikan pada variabel Pi. Berikutnya, nilai Pi*R*R diberikan pada variable L. Baris terakhir menuliskan luas lingkaran tersebut.
Seperti yang dikemukakan di atas, bahwa algoritma ada yang tidak berurutan dan biasa di sebut dengan pengulangan. Adapun contohnya yaitu dalam penghitungan rata-rata dari sekumpulan data yang dimasukkan pengguna.
Berikut ini adalah algoritma untuk menghitung rata-rata data yang dimasukkan pengguna:
1. Masukkan N
2. i?1
3. j?0
4. Selama (i<=N) kerjakan baris 4 sampai dengan 7 5. Masukkan dt 6. i?i+1 7. j?j+dt 8. Rata?j/N 9. Tulis rata Baris pertama meminta pengguna memasukkan N, yaitu jumlah data. Pada baris kedua, variabel I, yang berguna sebagai pencacah banyaknya data yang telah dimasukkan pegguna, bernilai 1. Pada baris ketiga, variabel j, yang digunakan untuk menyimpan hasil penjumlahan data, diberi nilai 0. Baris keempat memberikan perintah untuk mengulangi baris keempat sampai dengan baris ketujuh selama I kurang dari sama dengan N. Dengan kata lain, setelahi lebih besar dari N, baris kedelapan yang dijalankan. Baris kelima meminta masukkan data yang ke-i. Baris keenam menambah variabel I dengan 1. Perhatikan arti dari perintah i?i+1 adalah nilai i ditambah dengan 1 kemudian hasilnya disimpan pada variabel i kembali. Baris ketujuh menambah variabel j dengan data yang dimasukkan pengguna. Sebagaimana dijelaskan di atas, variabel j digunakan untuk menyimpan hasil penjumlahan semua data, jadi untuk setiap masukan data, nilai variabel j harus ditambah dengan dt. Baris kedelapan menghitung rata-rata dengan cara membagi hasil penjumlahan dengan banyaknya data. Baris terakhir menuliskan rata-rata tersebut. Tetapi banyak pemrogram yang sudah berpengalaman tidak pernah menuliskan algoritma di atas kertas lagi.. Artinya dia menuliskan algoritma itu di daalam kepalanya.
2. Materi dalam Algoritma 2
Bab 1 Pointer
Pointer merupakan tipe data berukuran 32 bit yang berisi salah satu nilai yang berpadanan dengan alamat memory tertentu. Sebagai contoh, Sebuah variable P bertipe pointer bernilai 0x0041FF2A, berarti P menunjuk pada alamat memory 0041FF2A. Pointer Dideklarasikan seperti variable biasa menambahkan tanda * (asterisk yangh mengawali nama variable.
Bab 2 Array
Array adalah suatu struktur data yang terdiri dari sejumlah elemen yang memiliki tipe data yang sama. Elemen – elemen array tersusun secara sekuensial dalam memory computer. Array dapat berupa satu dimensi, dua dimensi, tiga dimensi ataupun banyak dimensi (multi dimensi).
2.1 Array satu dimensi
Array satu dimensi tidak lain adalah kumpulan elemen – elemen identik yang tersusun dalam satu baris. Elemen – elemen tersebut memiliki tipe data yang sama pula.
2.2 Array dua dimensi
Array dua dimensi sering digambarkan sebagai sebuah matriks, merupakan perluasan dari array satu dimensi. Jika array satu dimensi hanya terdiri dari sebuah baris dan kolom elemen, maka array dua dimensi terdiri dari beberapa baris dan beberapa kolom elemen yang bertipe sama.
Bab 3. Strukture
Structure (struktur) adalah kumpulan elemen-elemen data yang digabungkan menjadi satu ketentuan. Masing – masing elemen data tersebut dikenal dengan sebuah field. Field data tersebut dapat memiliki tipe data yang sama ataupun berbeda. Walaupun field – field tersebut berada dalam satu kesatuan, masing – masing field tersebut tetap dapat diakses secara indifidual.
Bab 4. Linked list
Pada bab sebelumnya telah dijelaskan mengenai varriabel array yang bersifat statis (ukuran dan urutannya sudah pasti). Selain itu, ruang memory yang dipakai olehnya tidak dapat dihapus bila array tersebut sudah tidak digunakan lagi pada saat program dijalankan. Untuk memecahkan masalah diatas , Kita dapat menggunakan variable akan dilokasikan hanya pada saat dibutuhkan dan sesudah tidak dibutuhkan dapat direlokasikan kembali.
4.1 Single linked list
Pembuatan Single link list dapat menggunakan 2 metode :
• LIPO (Last In First Out), Aplikasinya : Stack ( Tumpukan)
• FIFO (First In First Out), Aplikasinya : Queue (Antrean)
4.2 Double Linked list
Salah satu kelemahan single link list adalah pointer hany dapat bergerak satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single link list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut, anda dapat menggunakan metode double link list.
4.3 Circular Doubele linkd list
Ini adalah double linked list yang simpul terakhirnya menuju ke simpul terakhirnya menuju ke simpul awalnya menuju ke simpul akhir sehingga membentuk suatu linkaran.
Bab 5. Stack
5.1. Definisi stack
Steck adalah suatu tumpukan dari benda. Konsep utamanya adalah LIPO , benda terakhr masuk dalam stack menjadi benda pertama yang dikeluarkandari stack.
5.2 . Stack dengan Array
Sesuai dengan sifat stack, pengambilan / penghapusan di elemen dalam stack harus dimulai dari elemen teratas.
5.3. Double stack dengan Array
Metode ini adalah teknik khusus yang dikembangkan untuk menghemat pemakaian memori dalam pembuatan dua stack dengan array. Intinya adalah penggunaannya hanya sebuah array untuk menampung dua stack.
5.4. Stack dengan Singel Link List
. Stack dengan Singel Link List memiliki keunggulan dari pada menggunakan array, yaitu penggunaan alokaso memori yang dinamis sehingga menghindari pemborosan memori.
Bab 4. Queue
Queue merupakan salah satu contoh aplikasi dari pembuatan double linked listyang cukup sering kita temui dalam kehidupan sehari-hari. Istilah yang sering dipakai seseorang masuk dalam sebuah antrian adalah enqueue. Istilah yang sering dipakai bila seseorang keluar dari antrian adalah dequeue.
1) IMPLEMENTASI QUEUE DENGAN LINEAR ARRAY
Linear array adalah suatu array yang dibuat seakan-akan merupakan suatu garis lurus dengan satu pintu masuk dan satu pintu keluar.
2) IMPLEMENTASI ARRAY DENGAN CIRCULAR ARRAY
Circular array adalah suatu array yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal(head)dan titik akhir(tail) saling bersebelahan jika array tersebut masih kosong.
3) IMPLEMENTASI QUEUEU DENGAN DOUBLE LINKED LIST
Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode linked list yang digunakan adalah double linked list.
Bab 5. Tree
• TREE
Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hierarkis antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut Root. Node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lain.
JENIS-JENIS TREE
1) Binary tree
Binary tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut tiap node dalam binary tree hanya boleh memiliki paling banyak 2 child.
JENIS-JENIS BINARY TREE:
 FULL BINARY TREE
Jenis binary tree ini tiap nodenya (kecuali leaf) memiliki 2 child dan tiap subtree harus mempunyai panjang path yang sama.
 COMPLETE BINARY TREE
Jenis ini mirip dengan full binary tree, namun tiap subtree boleh memiliki panjang path yang berbeda dan stiap node kecuali leaf hanya boleh memiliki 2 child.
 SKEWED BINARY TREE
Skewed binary tree adalah binary tree yang semua nodenya (kecuali leaf)
Hanya memiliki 1 child
 IMPLEMENTASI BINARY TREE
Binary tree dapat diimplementasikan dalam c++ dengan menggunakan double linked list.
BINARY SEARCH TREE
Binary tree ini memiliki sifat dimana semua left child harus lebih kecil dari pada right child dan parentnya. Semua right child juga harus lebih besar dari left child serta parentnya. Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu kesulitan dalam searching/pencarian node tertentu dalam binary tree.
3. Kesimpuan
Matakuliah ini mengajarkan teknik-teknik
dasar untuk abstraksi data, algoritma-algoritma akses dan manipulasi
struktur-struktur abstraksi tersebut; serta pengantar analisis kompleksitas
pemakaian storage dan waktu dalam eksekusi algoritme-algoritme tersebut.
Topik-topik yang akan dibahas meliputi: pengenalan struktur data, konsep ADT
(Abstract Data Type) dan contoh-contoh penggunaannya, pemrograman rekursif,
algoritma-algoritma pengurutan (sorting), implementasi struktur data linear
(list, stack, queue), struktur data hirarkis: Tree, Binary Search Tree, AVL
Tree, BTree, Hashtable, dan Graph.