Algoritma
Algoritma dan
struktur data merupakan fondasi ilmu komputer. Bidang ini kaya dengan teknik
dan analisis yang elegan. Algoritma atau struktur data yang bagus memungkinkan meyelesaikan persoalan
dalam beberapa detik di mana cara lain memerlukan waktu bertahun tahun.
4.1 Penyelesaian Persoalan
Struktur data adalah gudang
perbendaharaan konsep dasar, kecerdikan , kemampuan abstraksi, beragam
algoritma dan teknik untuk evaluasi dan membandingkan alternatif alternatif.
Setiap mahasiswa ilmu komputer harus memahaminya.
Struktur data mengumpulkan item item
data dan mengelompokan dalam satu cara tertentu. Struktur umum di sediakan
bahasa misalnya array. Struktur lain misalnya set, list, stack,
queue, deque, tree, binary tree, graph, string dan sebagainya.Penggunaan
struktur seharusnya nyaman, pemprogram tidak perlu peduli memikirkan bagaimana
struktur tsb di presentasi di mesin.
4.1.1 Penyelesaian Persoalan
Pemprogram bertanggung jawab atas
implementasi solusi. Pembuatan program menjadi lebih sederhanajika persoalan
dapat di pecah menjadi sub persoalan yang dapat di kelola.
Penyelesaian persoalan dengan
komputer berhadapan dengan empat hal :
1. Pemehaman hubungan elemen elemen data
yang relevan terhadap solusi secara menyeluruh.
2. Pengambilan keputusan mengenai
operasi operasi terhadap elemen elemen data.
3. Perancangan representasi elemen
elemen data di memori sehinggga memenuhi kriteria berikut:
(a) Memenuhi hubungan logic antara antara
elemen elemen data.
(b) Operasi operasi terhadap elemen
elemen data dapat di lakukan secara mudah dan efisien.
4. Pengambilan keputusan bahasa untuk
menerjemahkan solusi persoalan menjadi
program.
4.1.2
Kompleksitas Sistem Perangkat Lunak
Saat ini, persoalan yang harus di
selesaikan dengan komputer semakin kompleks. Pernagkat secara inheren kompleks.
Fred Broks menyatakan “Kompleksitas perangkat lunak merupakan properti esensi, bukan
properti aksiden”. Sistem berbasis
komputer telah menjadi besar, rumit dan kompleks. Perangkat lunak sekala besar
disebut industrial strenght software.
Kompleksitas aplikasi (Capp) merupakan penjumlah
dua komponen yaitu :
1. Kompleksitas persoalan (Cprb)
2. Kompleksitas solusi (Csol)
Sehingga kompleksitas aplikasi dapat di eksperimen sebagai
berikut :
Capp = Cprb +Csol
Kopleksitas persoalan Cprb tidak
dapat di reduksi kecuali dengan mereduksi daftar kebutuhan. Kita seharusnya
dapat melakukan minimasi kompleksitas solusi Csol. Kita menulis
solusi dengan bahasa Asembly adalah sangat lebih rumit di banding
menulis solusi dalam bahasa tingkat tinggi seperti Object Pascal, java atau
C++. Beberapa rancangan solusi lebih kompleks di banding lainya. Kebanyakan
kerja perancangan adalah mencari pendekatan lebih sederhana dalam mempresentasi
solusi sehingga kompleksitas solusi menurun.
Setelah kompleksitas solusi Csol
dapat direduksi sebanyak mugkin, jika kompleksitas persoalan Cprb
masih besar maka kompleksitas Capp akan tetap besar. Kompleksitas
aplikasi Capp ini harus diimplementasi. Untuk mengelola
kompleksitas, kita harus menemukan cara untuk mereduksi secara setempat, yaitu
kita harus mampu membagi masalah menjadi potongan potongan yang kurang kompleks
di banding keseluruhan.
Pemprograman berdisiplin
mengendapkan prinsip prinsip rekayasa perangkat lunak yang bagus seperti
modularitas dan kehandalan akan memperoleh manfaat penurnan Csol
secara drastis. Bukuini hendak menuntun pemprograman berdisiplin tersebut.
Uraian lebih lengkap mengenai prinsip prinsip yang pantas untuk di ikuti para
pemprogram berdisiplin di bahas di buku penulis : Rekayasa Sistem Berorientasi
Objek.
4.2 Algoritma
Algoritma adalah prosedur untuk
melekuken suatu tugas spesifik. Algoritma merupakan gagasan di balik suatu
program komputer. Suatu algoritma harus menyelesaikan suatu persoalan yang
dispesifikasi dengan bagus.
4.2.1
Algoritma Untuk Suatu Kelas Persoalan
Suatu persoalan algorima
dispesifikasi dengan mendeskripsi kumpulan lengkap instan dimana algoritma
harus bekerja dan juga di nyatakan mengenai properti properti keluaran yang
harus di miliki sebagai hasil dari menjalankan pada instan instan itu.
Algoritma adalah satu prosedur yang masuknya suatu instan masukan yang mungkin
dan mentransformasi menjadi keluaran yangdi kehendaki.
Contoh :
Persoalan
pengurutan :
Masukan
: satu sekuen n kunci a1, a2, a3, … , an
Keluaran : permutasi (penyusunan
ulang) sekuen masukan sehingga
a1, ‘< a2’<
a3’< … < an’
Instan pesoalan dapat berupa array
nama nama seperti {mangga, apel, durian, semangka}, atau daftar angka
seperti {98, 8, 7, 101, 99}.
Saat membuat program di suatu bidang, kita harus mengetahui algoritma dan struktur data yang telah di
kenal di bidang itu.
4.2.2 Ciri Dan Properti Algoritma
Algoritma
adalah metode pretisi untuk menyelesaikan persoalan. Algoritma di susun dari
sekumpulan langkah berhingga, masing masing masing langkah mungkin memerlukan satu
operasi atau lebih. Algoritma di rancang untuk menyelesaikan persoalan spesifik
dengan usaha paling minimal.
Ciri ciri algoritma adalah sebagai berikut: [KNU-69, HOR-90]
1.
Input – masukan, terdapat nol masukan atau lebih
yang diberikan secara exsternal.
2.
Output – keluaran, sedikitnya terdapat satu
keliaran di hasilkan.
3.
Definite – jelas, harus secara sempurna
menyatakan apa yang di lakukan.
Contoh :
1.
Hitung 5/0
2.
Tambahkan 6 atau 7 ke x
Contoh contoh di atas tidak di
ijinkan di algoritma karena alasan berikut :
Pada Kasus Pertama :
Tidak
jelas apa yang di peroleh dari hasil operasi itu.
Pada Kasus Kedua :
Tidak
jelas apa yang harus di lakukan.
4.
Efective – efektif, setiap instruksi harus dapat di lakukan secara manual
menggunakan pensil dan kertas selama sejumlahwaktu yang berhingga.
5.
Terminate – berakhir, harus berhenti setelah
sejumlah operasi.
Persoalan di
sebut dapat di selesaikan secara algoritma jika dapat di tulis program komputer
yang dapat menghasilkan jawaban benar untuk sembarang masukan (yang di
spesifikasi) dalam waktu berhingga danmenggunakan waktu ruang memori yang
tersedia.
Properti properti algoritma :
1.
Kebenaran algoritma adalah properti yang harus
secara hati hati di tunjukan.
2.
Algoritma dapat di pahami dan di pelajari ecara
tidak bergantung mesin.
3.
Notasi “-O” dan analisis kasus terburuk
merupakan sarana yang secara mudah menyederhanakan pembandingan efisiensi
algoritma algoritma.
4.
Kita mencari algoritma algoritma yang memiliki
waktu berjalan yang tumbuh secara logaritmik karena logaritma berbasis 2 tumbuh
sangat perlahan dengan meningkatnya masukan.
5.
Memodelkan program dengan struktur data dan
algoritma yang terdefinisi bagus adalah satulangkah paling penting menuju
solusi yang bagus.
4.2.3 Perancangan Algoritma
Perancangan
algoritma merupakan satu seni “seni”. Terdapat sejumlah strategi umum untuk
menuntun menghasilkan algoritma efektif dalam menyelesaikan satu kelas
persoalan. Strategi perancangan algoritma yang popular antara lain :
1.
Strategi greedy
2.
Strategi divide-and-conquer
3.
Strategi pemprograman dinamis (dynamic
programming)
4.
Strategi backtracking
5.
Strategi branch-and-bound
6.
Strategi pencarian dan penelusuran (search-and-traversal)
7.
Strategi pemprograman linear
8.
Strategi pemprograman integer
9.
Strategi algoritma genetik
10.
Strategi neural network
Pada satu
persoalan dapat di terapkan lebih dari satu strategi. Masing masing strategi
dapat membentuk beberapa algoritma. Pada saat awal penerapan strategi belum
tentu di peroleh algoritma berkinerja bagus. Tahap analisis algoritma membuat
analisis terhadap kinerja algoritma algoritma. Analisis algoritma dapat
menentukan segmen/bagian algoritma yang paling banyak mengkonsumsi waktu.
Dengan demikian dapat di arahkan usaha untuk membuat optimal algoritma.
Terdapat banyak contoh keberhasilan
strategi divide-and-conquer.
1.
Algoritma fast fourier transform Cooly
dan Tukey, dengan waktu O(n2log n).
2.
Algoritma perkalian bilangan bulat Schonhage
dan Strassen, dengan waktu O(n 2log n 2log n 2log
n).
3.
Algoritma perkalian matriks Strassen, dengan
waktu O(n2,81)
4.
Algoritma perkalian bilangan bulat Karasutba
dan Ofman, dengan waktu O(n1,59)
5.
Aritmatika modular, dan interpolasi dan
evaluasi polinom Moenck dan Borodin.
4.2.4 Pengukuran Kebaikan
Algoritma
Analisis Kualitatif
Analisis kualitatif memeriksa
kebenaran algoritma kebenaran algoritma dengan menelusuri algoritma.
Penelusuran logik untuk membuktikan kebenaran atau implementasi algoritma.
Kualitas algoritma mengharuskan kebenaran boolean, yaitu suatu algoritma
adalah benar atau salah, tidak ada kondisi di tengah tengah.
Contoh :
Algoritma tidak dapat di sebut
sebagai algoritma pengurutan bila algoritma tidak dapat mengurut sembarang
barisan data.
Analisis
Kuantitatif
Analisis kuantitatif adalah
analisis efisiensi algoritma dengan menghitung kompleksitas komputasi (waktu)
dan ruang. Aspek kuantitatif mengukur seberapa besar sumber daya yang di
perlukan algoritma. Terdapat dua sumber daya yang penting yang biasanya di ukur,
yaitu :
1.
Seberapa cepat algoritma bekerja.
2.
Seberapa ruang yang di perlukan agar algoritma
bekerja.
Kedua sumber daya di ukur untuk
menunjukan kompleksitas algoritma .
Kita
memerlukan cara presisi namun menghilangkan rincian seperti kecepatan
pemproses, kualitas kompilator (juga pemprogram). Kita ingin membandingkan
kebutuhan waktu dan ruang yang di perlukan algoritma independen bahasa
pemprograman, pemprograman, kompilator, arsitektur mesin, dan faktor
faktorrumit lainya.
Pencarian algoritma yang
paling efisien
Pencarian algoritma paling efisien merupakan
usaha yang sangat melelahkan dan memerlukan waktu yang lama. Pada satu program
aplikasi biasanya terdapat bagian utama yang mengambil mayoritas waktu
komputasi . Prinsip 90/10 biasanya dapat di terapkan, yaitu program pada
umumnya 90% waktu berjalanya berada di bagian 10% program. Mengoptimasi 90%
bagian program yang jarang di eksekusi akan berdampak kecil bagi peningkatan
kinerja program. Kita seharusnya lebih berfokus pada optimasi bagian 10% program
yang paling sering di eksekusi. Untuk mengetahui bagian tersebut maka kakas profiler
membantu untuk mengetahuinya.
12 Juni 2016 pukul 00.38
makasih banyak bro sangat membantu