Anda di halaman 1dari 12

BAGIAN II

ALGORITMA &
PEMPROGRAMAN
Bab 4
Algoritma

A Lgoritma 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
idisebut 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 melakuken 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.

Kelas kelas kompleksitas berikut di susun semakin meningkat.

No Notasi - O Nama
1. O(1) Konstan
2. O(log2log2n) Logaritmik
3. O(log2n) Logaritmik
4. O(n) Linear
5. O(n log2 n) n log n
6. O(n2) Kwadratik
7. O(n3) Kubik
8. O(cn) Ekponensial
Dengan kompleksitas komputasi, kita dapat memperoleh algoritma yang lebih efisien. Algoritma berkompleksitas
lebih rendah lebih baik. Algoritma O(n 2log n) di pilih di banding algoritma O(n 2). Algoritma O(n) di pilih di banding O(n 2log n).
Algoritma O(1) di pilih dibanding O(n).

Eksekusi di Komputer Maya

Berikut ini adalah gambaran eksekusi beragam big-Oh. Eksekusi di komputer maya di misalkan melakukan eksekusi 1
mikrodetik di komputer maya di dimisalkan melakukan eksekusi 1 mikrodetik perlangkah kerja.

No Waktu
(usec =mikrodetik)
f(n) n=2 n=16 n=256 n=1024 n=1048576

1 1 1 1 1 1 1
2
2 log n 1 4 8 10 20

3 N 2 16 256 1,03x103 1,05x106

4 N 2log n 2 64 2,05x103 10,2x103 21x106

5 N2 4 25,6 65,5x103 1,05x106 1,8 minggu

6 N3 8 4,1x103 16,8x106 17,9x6x104 36.559 tahun

7 2n 4 65,5x103 3,7x1063 5,7x10294tahun 2,1x10315939


tahun

Kasus terburuk dan kasus rataan

Kita juga harus memperhitungkan perilaku kasus terburuk dan rataan. Kita lebih mudah menyatakan kasus terburuk.
Waktu jalan kasus terburuk QuickShort adalah O(n 2). Waktu jalan adalah kasus rataan O(n 2log n). Dengan memilih elemen
pivot secara hati hati tiap interasi, kita dapat mereduksi peluang perilaku O(n 2) mendekati nol. Implementasi Quickshort
bagus berjalan O(n 2log n).

4.2.5 Mengekspresikan Algoritma

Untuk mendeskripsi algoritma di perlukan satu notasi untuk mengekspresi skuen langkah.

Terdapat tiga alternatif yang paling sering di gunakan, yaitu :

1. Bahasa alami (seperti bahasa indonesia, bahasa inggris)


2. Pseudocode, atau
3. Bahasa pemprograman

Ketiga cara mempunyai kegunaan. Terdapat trade off antara kemudahan ekspresi dan presisi. Bahasa alami
merupakan cara paling alami namun sangat tidak presisi. Bahasa pemprograman seperti C atau pascal bersifat presisi tapi
begitu mengikat. Pseudocode merupakan tengah tengah di antara keduanya.
Evaluasi

Pemberitahuan instruksi

Anda memiliki pembantu setia yang harus di beri instruksi secara benar benar rinci. Pembantu itu melaksanakan
instruksi instruksi secara konsisten dan cermat tanpa salah.

Situasi : terdapat beragam wadah beraneka ukuran (1,2, 3, ….., n liter) dan 1 canting ukuran 1 liter untuk
memindahkan cairan ke wadah. Buat resep (urutan) instruksi sehingga bila pembantu di beri satu
wadah ukuran apapun maka ia akan memindahkan cairan ke wadah menggunakan canting ukuran
secara benar.

Jawab-lengkapilah -:

1. Terimalah wadah

2. Tentukan ukuran wadah

3.

4.

5.

TES UNTUK PERPAJAKAN

A mempunyai kelereng merah, biru

B mempunyai kelereng biru, kuning

C mempunyai kelereng kuning, merah

D mempunyai kelereng merah, ungu

Siapa yang boleh masuk ruang bila ketentuan masuk ruang adalah :

Ketentuan Jawaban
Yang mempunyai kelereng merah
Yang mempunyai kelereng merah dan biru
Yang mempunyai kekereng merah atau biru
Yang mempunyai kelereng merah dan biru dan kuning
Yang mempunyai kelereng (merah dan kuning) atau biru
Berapakah
a. 2+2-2x2/2
b. 3+3-3x3/3
c. 4+4-4x4/4

Jawab :

Berapakah :
a. 2+2-2x2-2-2/2+2+2+2x2/2-2/2x2/x2/2x2+2-2

b. 2-2+2x2+2+2/2-2-2-2x2/2+2/2x2/2x2-2+2

c. 2+2-2/2-2-2x2+2+2+2/2x2-2x2/2x2/2+2-2

Jawab :

{MULAI}
S diisi dengan nilai 0
I diisi dengan nilai 0
Ulangi langlkah-2 cetak tebal di bawah ini bila masih memenuhi
I < 10
S di tambah dengan nilai yang terdapat di I
I di tambah dengan nilai 2
{SELESAI}

Saat selesai eksekusi langkah langkah di atas (di SELESAI) ?


Berapa nilai I ? Jawab :______
Berapa nilai S ? Jawab :______
Mencari Bilangan Prima

1-100
1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50

51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70

71 72 73 74 75 76 77 78 79 80

81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

# Coretlah angka 1

1-100
1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50

51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70

71 72 73 74 75 76 77 78 79 80

81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

#2 Dari Hasil #1,

Kemudian coretlah angka angka kelipatan 2 setelah angka 2


#3 Dari Hasil #2,

Kemidian coretlah angka angka kelipatan 3 setelah 3

1-100
1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50

51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70

71 72 73 74 75 76 77 78 79 80

81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

#4 Dari hasil#3,

Kemudian coretlahangka angka kelipatan 5 setelah angka 5


1-100
1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50

51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70

71 72 73 74 75 76 77 78 79 80

81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

#5 Dari hasil #4,

Kemudian coretlah angka angka kelipatan 7 setelah angka 7

1-100
1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50

51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70

71 72 73 74 75 76 77 78 79 80

81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100
Angka tidak di coret setelah 7 adalah 11. Karena angka 11 telah lebih dari 100 maka pencoretan angka berhenti. Angka
angka tinggal, yang tidak di coret adalah bilangan bilangan prima. Penetunya berhentinya pencoretan adalah bila angka kelipatan
yang akan di gunakan telah melewati n, di mana n adalah batas bilangan terbesar.

Cara pencarian bilangan prima seperti ini adalah Algoritma Sieve dari Eratosthemes.

Anda mungkin juga menyukai