Konsep Algoritma
Algoritma ialah sekumpulan langkah-langkah atau instruksi-instruksi yang terbatas untuk menyelesaikan suatu masalah. Secara umum dapat juga diartikan sebagai sejumlah langkah komputasi yang mengubah masukan(input), menjadi keluaran(output) yang benar. Kata Algoritma mulai diperkenalkan oleh seorang ilmuwan matematika Persia bernama Abu Ja'far Mohammed Ibn Musa Al Khowarizmi.
Syarat Algoritma
Menurut Donald E. Knuth, sebuah algoritma harus memenuhi persyaratan :
1. Finiteness, algoritma harus berakhir (terminate) setelah sejumlah langkah.
2. Definiteness, setiap langkah algoritma harus didefinisikan dengan tepat dan tidak menimbulkan makna ganda (ambiguous).
3. Input, setiap algoritma memerlukan data sebagai masukan untuk diolah.
4. Output, setiap algoritma memberikan satu atau beberapa hasil keluaran.
5. Effectiveness,langkah-langkah algoritma dikerjakan dalam waktu yang wajar.
Jenis Proses Algoritma
Langkah-langkah yang membentuk suatu algoritma dibagi menjadi 3 kelompok :
1. Sequence process, Instruksi dikerjakan satu demi satu, mulai dari instruksi pertama hingga instruksi terakhir.
2. Selection process, instruksi akan dikerjakan jika memenuhi syarat tertentu. Bisa terdiri dari 2 pilihan atau lebih.
3. Iteration process, instruksi yang dikerjakan berulang-ulang selama suatu kondisi terpenuhi atau sebanyak jumlah tertentu.
Selain ketiga jenis proses diatas, pada parallel programming terdapat concurrent process yang memungkinkan beberapa instruksi dikerjakan secara bersamaan.
Konsep Struktur Data
Dalam pemrograman, secara umum ada beberapa tahapan yang harus dilalui, diantaranya :
1. Menentukan masalah, dalam membuat program hal yang paling utama bukanlah bagaimana menemukan metode untuk memecahkan masalah tersebut, tetapi apa masalah yang sesungguhnya akan dipecahkan oleh program yang akan dibuat.
2. Desain program, prinsip 'buat program yang benar kemudian dipercantik'. Prinsip ini hanya berlaku untuk program-program sederhana. Untuk program yang berskala besar, sebaiknya harus dibuat desain program yang terstruktur, sehingga akan mempermudah pemrogram itu sendiri jika suatu hari diperlukan perubahan terhadap program yang sudah pernah dibuat.
3. Struktur data, dalam pemrograman biasanya akan terbentuk beberapa metode atau algoritma dalam memecahkan masalah. Variasi algoritma tersebut terjadi karena cara penyimpanan data dalam program yang berbeda-beda, untuk mengatasi hal ini daapat dipertimbangkan beberapa hal berikut :
a. Bagaimana data tersebut disimpan?
b. Data apa saja yang akan disimpan secara permanen dalam memori?
c. Data apa saja yang akan digunakan pada proses-pproses tertentu?
d. Bagaimana penyimpanan data dalam file, dan bagaimana mengaksesnya?
4. Pengujian dan verifikasi, bertujuan untuk memeriksa program yang sudah berjalan, apakah masih mengandung kesalahan. Pengujian dan verifikasi memerlukan teknik uji dan kasus uji yang dirancang khusus untuk dapat menemukan kesalahan-kesalahan pemrograman.
5. Pemeliharaan, merupakan kegiatan yang dilakukan untuk memperpanjang umur suatu program, dapat berupa perubahan program atau penambahan fungsi-fungsi baru dalam program.
Data adalah sebuah nilai atau sekumpulan nilai yang tidak memiliki arti sebelum data tersebut dihubungkan dengan atribut tertentu. Data yang telah dihubungkan dengan atribut tertentu dan diorganisasikan sehingga memiliki arti khusus disebut sebagai informasi.
Informasi digunakan untuk menggambarkan objek atau entitas. Setiap entitas dapat didefinisikan oleh satu atribut ataupun beberapa atribut. Dalam pemrograman komputer, representasi dari entitas disebut dengan objek data (Data Object), dan representasi dari sekumpulan entitas yang saling berhubungan disebut stuktur data (Data Structure) yang dibentuk beberapa objek data.
Sehingga struktur data dapat didefinisikan sebagai merepresentasikan data pada memory secara logika dan mengkarakterisasikan setiap variabel dalam program secara eksplisit ataupun implisit, untuk operasi yang dibolehkan/berlaku pada data objek tersebut.
STRUKTUR DATA + ALGORITMA = PROGRAM
|
Gambar 1. Hubungan struktur data dengan program dan algoritma
Struktur data juga dapat didefinisikan sebagai kumpulan variabel yang mungkin berasal dari beberapa tipe data yang berbeda, yang dihubungkan dengan berbagai cara tertentu. Struktur data harus merepresentasikan data agar efisien dalam penyimpanan dan pengolahannya, diperlukan dalam perencanaan algoritma dan penyusunan program, dan seharusnya diterapkan pada algoritma yang didisain secara efisien.
Tipe Data
Tipe data adalah identifikasi umum dari suatu kelompok data sehingga kelompok data tersebut dapat dibedakan dari kelompok lainnya. Dapat juga dikatakan sebagai isi/nilai data pada suatu variable dalam bahasa pemograman. Secara umum, tipe data dapat dikategorikan menjadi :
A. Tipe data sederhana, meliputi :
1. Tipe data sederhana atomik, yaitu bila data tersebut tidak dapat diuraikan ke dalam bentuk yang lebih sederhana. Tipe data atomik dapat berupa ; integer, real, karakter, boolean, floating point dan pointer.
2. Tipe data sederhana majemuk, misalnya string.
B. Struktur data, meliputi :
1. Struktur data sederhana, seperti array dan record (struct).
2. Struktur data majemuk, yang terdiri dari :
a. Linier : Stack, Queue, serta List dan Multilist
b. Non Linier : Pohon Biner dan Graph
Dengan mengetahui tipe dari suatu data maka dapat ditentukan:
1. Kumpulan (himpunan) yang berlaku dari data tersebut.
2. Himpunan operasi yang dapat dilaksanakan dari data tersebut.
Pemakaian struktur data yang tepat di dalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana.
Tipe Data Abstrak (Abstract Data Type)
Tipe data abstrak (ADT) adalah suatu model matematika dengan sekumpulan operasi-operasi yang diperbolehkan didefinisikan dalam model ini. Bila dinyatakan dalan tuple maka ADT dapat didefinisikan sebagai berikut :
ADT = (Model Matematika, {Operasi-operasi terhadap Model Matematika})
ADT tidak hanya menyangkut implementasi tipe objek tetapi juga sekumpulan operasi yang diijinkan berlaku untuk instan tipe data tersebut. Tujuan pembentukan tipe data abstrak adalah penyembunyian informasi (information hiding/encapsulation), yaitu :
1. Perubahan implementasi tipe data abstrak tidak mengubah teks program yang menggunakan tipe data abstrak tersebut bila interface yang disediakan berupa prosedur dan fungsi dirancang secara baik sehingga tidak berubah.
2. Pemakaian dan pembuatan tipe data abstrak dapat dilakukan secara terpisah, yang hanya memerlukan kesepakatan mengenai interface pemakaian tipe data abstrak.
3. Tipe data abstrak merupakan sarana pemrograman modular dan menjadi landasan terbentuknya tim pemrograman.
Level Abstraksi Tipe Data
Level abstraksi dari suatu tipe data dibagi kedalam 3 level, yaitu :
1. Level abstrak, pada level ini menspesifikasikan tipe data abstrak dan apa yang dapat dilakukan tipe data abstrak. Tipe data abstrak adalah tipe data sebagai hasil dari imajinasi. Bayangkanlah sejumlah nama orang, dan nama-nama tersebut diberi nomor urut. Kemudian bayangkan pula operasi yang dapat dilakukan terhadap kumpulan nama tersebut, seperti mencetak nama, mencari nama dengan awalan huruf tertentu dan seterusnya.
2. Level virtual, pada level ini diimplementasikan cara penerapan tipe data abstrak sehingga semua operasi dapat diekspresikan dengan fungsi-fungsi yang dapat dieksekusi oleh komputer. Jika suatu tipe data abstrak diimplementasikan dengan menggunakan bahasa pemrograman tertentu, kemudian dituliskan program yang dapat melakukan operasi-operasi seperti yang telah disebutkan pada level abstrak di atas. Tipe data yang berada dalam bahasa pemrograman tersebut disebut tipe data virtual, yaitu tipe data yang berada didalam virtual prosesor.
3. Level physical, pada level ini dilakukan penerjemahan tipe data abstrak kedalam bahasa pemrograman tertentu. Pada saat program dijalankan, tipe data virtual harus secara fisik diload ke dalam memory/processor dari mesin komputer yang dipergunakan untuk menjalankan program tersebut. Semua data dinyatakan dalam binary digit (bit), berupa angka 0 dan 1, sehingga sangat menyulitkan pemrogram untuk membaca, menulis atau mengubahnya. Hal tersebut diatasi dengan pengggunaan tipe data native yaitu tipe data yang telah disediakan dalam bahasa pemograman, sehingga memudahkan pemrogram dalam berkomunikasi dengan komputer. Contoh native data type dalam bahasa C : int, char, long, float.
Pembuatan Tipe Data Abstrak
Spesifikasi tipe data abstrak dapat dilakukan dengan 2 cara, yaitu spesifikasi secara formal dan informal. Istilah umum yang akan digunakan dalam spesifikasi tipe data yaitu :
1. pre, (precondition) yang menyatakan kondisi yang harus dipenuhi agar operasi dapat menghasilkan hasil yang benar.
2. post, (postcondition) yang menyatakan kondisi hasil dari operasi.
Selain itu pembuatan tipe data abstrak melibatkan pendefinisian komponen-komponen berikut :
1. Deklarasi tipe data abstrak dengan tipe data yang telah ada.
2. Operasi-operasi terhadap tipe data sehingga menjaga relasi dan melakukan fungsi atau aksi yang dikehendaki yang diimplementasikan dalam fungsi dan prosedur.
Pembuatan tipe data abstrak adalah pembentukan tipe data lengkap yang mempunyai 4 properti, yaitu :
1. Nama, yaitu identifier tipe data
2. Domain, yaitu himpunan nilai yang diperbolehkan dalam tipe data.
3. Penyebutan konstanta, yaitu cara penyebutan angggota-anggota tipe data.
4. Operasi dan operator, yaitu daftar operasi terhadap anggota tipe data sehingga prilaku objek tipe data sesuai spesifikasi.
Sebagai contoh akan didefinisikan sebuah stack yang secara informal dideskripsikan sebagai berikut :
1. Stack berisi tumpukan elemen.
2. Operasi add digunakan untuk menambahkan elemen stack.
3. Operasi remove digunakan untuk menghapus elemen stack.
4. Dan sebagainya
Tipe data abstrak memerlukan deskripsi properti seperti :
1. Type
Type menspesifikasikan mengenai tipe yang mengacu pada struktur yang dibuat. Type digunakan untuk menentukan tipe suatu variabel. Contoh :
Type STACK;
2. Fungsi (function)
Berisi daftar operasi yang diterapkan terhadap/variabel ADT. Daftar ini yang terutama mendeskripsikan ADT, merupakan komponen utama ADT. Instan/variabel dideskripsikan dengan apa yang dapat dilakukan. Contoh :
Functions :
Add : STACK x item → STACK
Remove : STACK −/ → STACK
Item : STACK −/ → item
isEmpty : STACK → Boolean
Create : STACK
3. Aksioma
Daftar fungsi mendeklarasikan fungsi tidak sepenuhnya mendefinisikan. Pendefinisian fungsi di ADT tidak boleh dilakukan secara eksplisit karena akan bergantung kepada representasi, agar spesifikasi terhindar dari penentuan pilihan representassi maka diperlukan pendefinisian implisit dengan memberikan aksioma yang harus dipenuhi oleh struktur. Contoh :
Aksioma :
Untuk sembarang x : item, s : Stack
A1 : Item (Add(s,x)) =x
A2 : Remove (put(s,x))=s
A3 : isEmpty(Create)
A4 : not isEmpty (Add(s,x))
Dimana :
Aksioma A1 : menyatakan puncak s adalah x, yang merupakan elemen yang diisikan ke Stack.
Aksioma A2 : menyatakan bahwa jika mengambil elemen puncak dari s, maka akan memperoleh Stack s yang dimiliki sebelum menyimpan x.
Aksioma A3 dan A4 : memberitahukan bahwa kapan Stack kosong dan kapan Stack tidak kosong. Dimana Stack hasil dari Create merupakan stack kosong, dan fungsi Add ke Stack (kosong maupun bukan) adalah stack tidak kosong.
4. Precondition
Ketika menspesifikasikan sesuatu harus mempertimbangkan operasi-operasi yang terdefinisikan pada suatu kondisi tertentu. Solusi yang digunakan adalah dengan mendeskripsikan fungsi-fungsi yang demikian dengan fungsi parsial. Notasi yang digunakan adalah anak panah terbelah (−/ →). Pada pendaftaran fungsi ADT stack menyatakan fungsi Add dan Item sebagai fungsi parsial, sehingga perlu menspesifikasikan domain untuk fungsi parsial dengan menggunakan pernyataan Precondition. Contoh :
Precondition :
Remove(s:STACK) require not empty(s)
Item(s:STACK) require not empty(s)
Keuntungan Tipe Data Abstrak
Setelah membahas spesifikasi dari tipe data abstrak dan melihat bagaimana mudahnya menerjemahkan spesifikasi tersebut ke dalam bahasa pemrograman, dapat disimpulkan beberapa keuntungan dari tipe data abstrak diantaranya kebebasan implementasi (implementation independence), integritas dan penyederhanan masalah (simplicity).
Tipe Data Physical
Seperti telah dibahas sebelumnya tipe data physical adalah tipe data yang secara fisik berada dalam memory/main processor. Tipe data ini perlu dipelajari lebih rinci mengingat hal ini mempengaruhi pertimbangan antara besarnya tempat yang dibutuhkan untuk menyimpan data dengan kecepatan/efesiensi pengambilan data untuk menghasilkan desain yang efektif. Dua hal penting yang harus diperhatikan mengenai tipe data physical adalah: memory dan processor yang dipergunakan.
Memory
Jenis memory yang tersedia di pasaran sangat beragam. Berdasarkan ukuran : ada yang berkapasitas besar atau kecil, ada yang kecepatannya sangat tinggi atau rendah, ada yang bersifat volatile (memerlukan aliran listrik untuk menyimpan data) atau yang non-volatile, portable (mudah dibawa) atau non-portable, dari cara aksesnya ada yang random access, direct access atau sequential access.
A. SEQUENTIAL ACCESS MEMORY (SAM)
Bentuk SAM yang umum ditemukan adalah magnetic tape, kecepatan aksesnya sangat rendah, kapasitasnya sangat besar (walaupun sekarang dapat ditemukan magnetic disk yang mempunyai kapasitas sebesar magnetic tape), selalu non-volatile dan portable, karena sifat tersebut di atas maka memory jenis ini biasanya dipergunakan untuk memback-up data.
B. DIRECT ACCESS MEMORY (DAM)
Memory jenis ini biasanya ditemukan dalam bentuk magnetic disk (piringan magnet), bisa berupa diskette atau hard disk. DAM ini aksesnya cukup cepat (walaupun kalau dibandingkan dengan RAM masih kalah cepat), kapasitasnya cukup besar (dari Megabyte hingga GigaByte), non-volatile, dan sangat mudah dibawa (portable) karena ukurannya yang kecil.
C. RANDOM ACCESS MEMORY (RAM)
Memory jenis ini sangat cepat, relative lebih kecil, pada umumnya bersifat volatile (walaupun ada beberapa tipe yang bersifat non-volatile) dan non-portable.
D. CACHE MEMORY
Memory ini jauh lebih cepat dibandingkan dengan RAM, kapasitasnya lebih kecil dan harganya cukup tinggi.
E. REGISTERED
Walaupun memory jenis ini sangat tinggi harganya, kapasitasnya sangat kecil tetapi register mutlak diperlukan untuk melakukan operasi di dalam computer. Kecepatan dari register adalah yang tertinggi dibandingkan dengan semua jenis yang ada.
Tabel 1.: Jenis Memory
Jenis Memory
|
Kecepatan
|
Kapasitas
|
Harga
|
Register
| |||
Cache
| |||
RAM
| |||
DAM
| |||
SAM
|
Lambat
|
Besar
|
Murah
|
Processor
Processor yang dipergunakan sangat menentukan range/batasan dari native data type. Ambil contoh Personal Computer (PC), dengan processor yang berbeda, jumlah bit yang diproses juga akan berbeda. Misalkan processor 8088 dan 80286 hanya memproses data 8 bit, 80386 memproses 16 bit dan 80486 memproses 32 bit.
Sumber :ellinputri01.blogspot.co.id