Anda di halaman 1dari 17

LECTURE NOTE

Week 01
Introduction of
Algorithm Design and
Analysis

ALGORITHM DESIGN AND


ANALYSIS <<Kode mtk – Nama mtk>>
LEARNING OUTCOMES

LO1: Explain the fundamental concept of the analysis algorithm

OUTLINE MATERI :

1. Introduction

2. Definition of algorithms

3. Definition of pseudocode

4. Mathematics induction

5. Introduction to analysis of algorithms

6. Recursive function

Algorithm Design and Analysis


ISI MATERI
1. Introduction

Komputer adalah alat komputasi yang kuat. Seseorang tidak dapat mengabaikan dampak
komputer pada kehidupan saat ini. Komputer digunakan untuk keperluan pribadi seperti
mengetik dokumen, browsing internet, mengirim email, bermain game komputer, melakukan
perhitungan numerik, dan sebagainya. Industri dan pemerintah menggunakan komputer jauh
lebih efektif untuk melakukan tugas-tugas rumit guna meningkatkan produktivitas dan efisiensi.
Aplikasi sistem komputer dalam reservasi penerbangan, pengawasan video, pengenalan
biometrik, e-governance, dan e-commerce adalah contoh kegunaannya dalam meningkatkan
efisiensi dan produktivitas. Semakin pentingnya komputer dalam kehidupan kita telah
mendorong sekolah dan universitas untuk memperkenalkan ilmu komputer sebagai bagian
integral dari pendidikan modern kita. Secara informal, setiap orang diharapkan untuk
menangani komputer untuk menyelesaikan tugas-tugas dasar tertentu. Pengetahuan tentang
penggunaan komputer untuk melakukan aktivitas kita sehari-hari ini sering disebut pemikiran
komputasional. Pemikiran komputasi adalah suatu keharusan untuk bertahan hidup di dunia
modern saat ini. Namun, para profesional ilmu komputer diharapkan untuk mencapai lebih dari
sekadar memperoleh keterampilan dasar penggunaan komputer ini. Mereka diminta untuk
menulis program komputer khusus untuk memberikan solusi otomatis komputer untuk sebuah
masalah. Menulis program sedikit lebih rumit daripada hanya belajar menggunakan komputer,
karena membutuhkan 'pemikiran algoritmik'. Berpikir algoritmik adalah keterampilan analitis
penting yang diperlukan untuk menulis program yang efektif untuk memecahkan masalah yang
diberikan. Pemikiran algoritmik tidak hanya terbatas pada ilmu komputer, tetapi menyebar ke
semua disiplin ilmu. Ilmu komputer adalah domain di mana keterampilan berpikir algoritmik
diajarkan kepada para profesional komputer yang bercita-cita tinggi untuk memecahkan
masalah komputasi.

Algorithm Design and Analysis


2. Definition of Algorithm

Kata “algoritma” berasal dari ahli matematika Persia, Abu Ja’fer Mohammed Ibn Musa al
Khowarizmi. Algoritma sendiri mempunyai arti sebagai kumpulan proses komputasi yang
memproses input menjadi output. Secara umum, algoritma dapat digambarkan sebagai urutan
proses yang perlu dilakukan untuk menyelesaikan suatu tugas. Algoritma biasanya
digambarkan sebagai alat untuk menyelesaikan masalah komputasi yang telah dispesifikasikan
dengan baik.

Algoritma dapat digambarkan dalam bentuk notasi matematika dan juga dalam bentuk deret
matematika. Penggambaran ini nantinya dapat digunakan dalam melakukan konsep pembuktian
menggunakan induksi matematika dari beberapa algoritma yang berbeda untuk menyelesaikan
tugas yang sama dan juga dapat digunakan sebagai konsep dari metode numerik untuk
menurunkan algoritma yang kompleks sehingga memperolah algoritma yang lebih sederhana
yang nantinya akan diuji tingkat kegagalan (error rate) dibanding dari algoritma semula
(sebelum diturunkan).

Characteristics of Algorithm

Beberapa karakteristik penting dari algoritma yaitu sebagai berikut:


a. Input: Suatu algoritma dapat memiliki nol atau lebih input
b. Output: Suatu algoritma harus menghasilkan setidaknya satu atau lebih keluaran.
c. Definiteness: Setiap instruksi harus jelas dan tidak ambigu. Semua operasi harus
didefinisikan dengan baik
d. Finiteness: Suatu algoritma harus memiliki jumlah langkah yang terbatas dan harus
berakhir setelah mengeksekusi set instruksi yang terbatas. Oleh karena itu, finiteness
merupakan karakteristik penting dari suatu algoritma.
e. Uniqueness: Suatu algoritma harus merupakan prosedur yang terdefinisi dengan baik dan
teratur yang terdiri dari sekumpulan instruksi dalam urutan tertentu. Urutan instruksi
penting karena perubahan urutan eksekusi menyebabkan hasil yang salah atau
ketidakpastian.
f. Correctness: Suatu algoritma harus benar

Algorithm Design and Analysis


g. Effectiveness: Suatu algoritma harus efektif, yang menyiratkan bahwa itu harus dapat
dilacak secara manual

Beberapa karakteristik tambahan yang seharusnya dimiliki oleh suatu algoritma adalah sebagai
berikut:
a. Simplicity. Kemudahan implementasi adalah karakteristik penting lain dari suatu algoritma.
b. Generality. Algoritma harus generik, tidak bergantung pada bahasa pemrograman atau
sistem operasi apa pun, dan mampu menangani semua rentang input; tidak boleh ditulis
untuk contoh tertentu.

Untuk membangun algoritma baru untuk masalah apa pun, kita harus melewati empat fase
berbeda. Fase-fase ini ditunjukkan pada berikut:

Gambar 1. Phase of algorithm construction

a. Design of Algorithm
Algoritma ditulis dalam prosedur langkah demi langkah dengan menggunakan pseudocode
dalam bahasa Inggris. Tidak ada bahasa pemrograman yang digunakan untuk merancang
algoritma. Sebuah algoritma ditulis untuk tujuan tertentu. Ada berbagai cara atau teknik
yang kita ikuti, yaitu:
• Pendekatan brute-force atau pendekatan Naive
• Pendekatan divide and conquer
• Pendekatan pemrograman dinamis (dynamic programming)
• Pendekatan greedy
• Pendekatan branch and bound
Kita akan menemukan teknik ini dikedepannya.

Algorithm Design and Analysis


b. Validation of Algorithm
Setelah merancang algoritma, validitasnya adalah pengujian. Untuk pemeriksaan validasi,
semua urutan input yang mungkin diberikan ke algoritma dan diharapkan output yang
benar yang diinginkan. Jika untuk setiap urutan input algoritma dapat memetakan output
yang benar maka valid.

c. Analysis of Algorithm
Analisis algoritma merupakan bagian penting dari teori kompleksitas komputasi, yang
menyediakan estimasi teoritis untuk sumber daya yang diperlukan dari suatu algoritma
untuk memecahkan masalah komputasi tertentu. Sebagian besar algoritma dirancang untuk
bekerja dengan input dengan panjang yang berubah-ubah. Analisis algoritma adalah
penentuan jumlah waktu dan sumber daya ruang yang dibutuhkan untuk mengeksekusinya.

Biasanya, efisiensi atau waktu berjalan dari suatu algoritma dinyatakan sebagai fungsi yang
menghubungkan panjang input dengan jumlah langkah, yang dikenal sebagai kompleksitas
waktu (time complexity), atau volume memori, yang dikenal sebagai kompleksitas ruang
(space complexity).

d. Testing of Algorithm
Pengujian dilakukan dengan dua langkah:

i. Debugging: Debugging adalah proses menemukan kesalahan dan


memperbaikinya. Fase debugging mungkin tidak selalu terjadi jika algoritma tidak
mengandung kesalahan maka debugging tidak dilakukan.

ii. Performance measurement: Ketika ada dua atau lebih algoritma yang ditulis
untuk suatu masalah, perlu untuk mengukur kinerjanya. Ada begitu banyak faktor
yang mempengaruhi kinerja. Faktornya terutama ukuran input, memori yang
tersedia, kecepatan mesin, dll.

Algorithm Design and Analysis


3. Definition of Pseudocode

Pseudocode merupakan salah satu metode untuk menggambarkan algoritma dalam bentuk high
– level specification. Pengunaannya menggunakan Bahasa Inggris yang mengambarkan proses
kerja dan notasi matematika. Pseudocode menyerupai Bahasa pemrograman dikarenakan
struktur Bahasa dan prosesnya baku dan jelas. Pseudocode pada umumnya digunakan untuk
menggambarkan algoritma dari suatu bagian proses yang kompleks untuk menggambarkan
secara detail proses kerja dari algoritma tersebut. Berikut merupakan contoh bentuk dari
pseudocode.

BEGIN
READ Number1, Number2, Operator
IF Operator = ‘+’ Then
Set Result = Number1 + Number2
ELSE OF Operator = ‘-‘ THEN
Set Result = Number1 – Number2
END IF
PRINT “Hasil=”, Result
END

Komponen Pseudocode:
1) Variable
2) Perulangan
a. Teknik perulangan for
b. Teknik perulangan repeat – until
c. Teknik perulangan while – do
3) Seleksi
a. Teknik seleksi if – then
b. Teknik seleksi select – case
4) Modul
a. Procedure/ sub
b. Function
c. Teknik Recursive

Algorithm Design and Analysis


4. Mathematics Induction

Induksi matematika digunakan untuk melakukan pengujian dari dua bentuk persamaan
matematika. Pada mata kuliah ini, bentuk persamaan matematika didapat dari hasil persamaan
dari algoritma yang telah di ubah ke dalam bentuk matematika yang akan diuji terhadap
persamaan dasar. Hasil pembuktian ini akan menunjukkan apakah algoritma yang dirancang
benar atau salah.

Langkah – langkah induksi matematika:

Misalkan P(n) adalah pernyataan yang didefinisikan dalam bilangan bulat n dan misalkan a
adalah bilangan bulat yang tetap. Apabila kedua pernyataan dibawah ini benar:

1) P(a) benar

2) Jika P(k) benar, maka P(k+1) benar untuk k ≥ a

Kesimpulannya adalah, P(n) benar untuk semua n ≥ a

Langkah pertama disebut Basis, sedangkan langkah kedua disebut langkah Induksi

Contoh:

Berikut merupakan bentuk persamaan yang akan diuji.

𝒏
𝒏(𝒏 + 𝟏)
∑𝒊 =
𝟐
𝒊=𝟏

Penyelesaian:

Untuk membuktikan dengan induksi matematika, maka harus dibuktikan 2 hal:

1. Basis

Harus dibuktikan bahwa P(1) benar, yaitu bahwa persamaan benar untuk n=1. Sebagai
basis, diambil n = 1 karena i dimulai dari 1, dimana n terendah adalah 1.

Algorithm Design and Analysis


𝟏(𝟏+𝟏)
Untuk n = 1, maka ruas kiri = 1, sedangkan ruas kanan = =𝟏
𝟐

Oleh karena itu ruas kiri = ruas kanan, maka persamaan benar untuk n = 1.

2. Langkah Induksi

Langkah ini membuktikan implikasi P(k) benar ⇒ P(k+1) benar

𝒌(𝒌+𝟏)
P(k) benar, berarti 𝟏 + 𝟐 + 𝟑 + ⋯ + 𝒌 = 𝟐

Akan dibuktikan bahwa P(k+1) benar, yaitu bahwa

(𝒌 + 𝟏)((𝒌 + 𝟏) + 𝟏)
𝟏 + 𝟐 + 𝟑 + ⋯ + (𝒌 + 𝟏) =
𝟐

𝒌(𝒌+𝟏)
Menurut hipotesis, 𝟏 + 𝟐 + 𝟑 + ⋯ + 𝒌 = , sehingga
𝟐

(𝒌 + 𝟏)((𝒌 + 𝟏) + 𝟏)
𝟏 + 𝟐 + 𝟑 + ⋯ + 𝒌 + (𝒌 + 𝟏) =
𝟐

𝒌(𝒌 + 𝟏) (𝒌 + 𝟏)((𝒌 + 𝟏) + 𝟏)
+ (𝒌 + 𝟏) =
𝟐 𝟐

𝒌(𝒌 + 𝟏) 𝟐(𝒌 + 𝟏) (𝒌 + 𝟏)(𝒌 + 𝟐)


+ =
𝟐 𝟐 𝟐

𝒌𝟐 + 𝟑𝒌 + 𝟐 (𝒌 + 𝟏)(𝒌 + 𝟐)
=
𝟐 𝟐

(𝒌 + 𝟏)(𝒌 + 𝟐) (𝒌 + 𝟏)(𝒌 + 𝟐)
=
𝟐 𝟐

Terbukti bahwa P(k+1) benar

Maka dapat disimpulkan bahwa P(n) benar untuk n ≥ 1

Algorithm Design and Analysis


5. Introduction of Algorithm Analysis

Kompleksitas dapat digambarkan oleh penggunaan waktu pemrosesan (time complexity) dan
memori (space complexity). Analisa untuk kompleksitas ini sendiri terbagi menjadi dua dimana
dapat dilakukan baik menggunakan analisis dari jumlah proses yang dikerjakan oleh algoritma
itu sendiri maupun menggunakan perhitungan lama waktu pemrosesan dijalankan.

5.1. Time complexity

Kompleksitas waktu adalah ukuran berapa banyak waktu berjalan yang dibutuhkan suatu
algoritma untuk dieksekusi, ketika ukuran input diskalakan. Menskalakan input berarti
meningkatkan nilai input. Variabel N atau n biasanya digunakan untuk mewakili ukuran
input dari suatu algoritma. Oleh karena itu, kompleksitas waktu selalu diekspresikan
sebagai mengukur input size.

Analisis kompleksitas waktu dari suatu algoritma dapat dilakukan dengan dua cara berikut:

(i) Mathematical analysis

Mathematical analysis (or a priori analysis or theoretical analysis) dilakukan sebelum


algoritma diterjemahkan ke dalam program. Dengan demikian, analisis matematis
digunakan untuk memperkirakan kompleksitas waktu dalam hal hitungan langkah atau
hitungan operasi.

Berikut ini adalah kelebihan dari analisis matematis ini:

1) Mathematical analysis tidak bergantung pada mesin tertentu, bahasa


pemrograman, sistem operasi, kompiler, interpretasi, dan alat kasus.

2) Ini diterapkan sebelum algoritma dikonversi ke program.

Analisis suatu algoritma sebelum code aktual dikembangkan sangat berguna, karena
membantu dalam menentukan efisiensi dan batasan teoretis dari algoritma.

Perilaku algoritma (yang diparameterisasi oleh kompleksitas waktu atau ruang) dapat
diukur dalam tiga cara yang diberikan sebagai berikut:

Algorithm Design and Analysis


1) Analisis kasus terburuk (worst case analysis): Ini adalah waktu maksimum yang
dibutuhkan oleh algoritma untuk berhasil menyelesaikan eksekusi saat melakukan
algoritma kompleksitas waktu. Ini memberi kita batas atas waktu berjalan untuk
input apa pun.

2) Analisis kasus terbaik (best case analysis): Ini adalah waktu minimum yang
diperlukan oleh algoritma untuk berhasil menyelesaikan eksekusi saat melakukan
analisis kompleksitas waktu. Ini memberi kita batas bawah pada waktu berjalan
untuk input apa pun.

3) Analisis kasus rata-rata (average case analysis): Ini adalah waktu rata-rata yang
diambil pada ukuran input rata-rata saat melakukan kompleksitas waktu.

Pada umumnya bentuk pengukuran lama waktu menggunakan worst case analysis (O
notation). Berikut merupakan bentuk penilai yang terdapat pada Big – Oh

1) O(1) merupakan constant algorithm

2) O(n) merupakan linear algorithm

3) O(n2) merupakan quadratic algorithm

4) O(n3) merupakan cubic algorithm

5) O(log n) merupakan logarithmic algorithm

6) O(nm) merupakan exponential algorithm

Perhatikan contoh berikut:

Bilangan prima merupakan bilangan yang lebih besar dari satu dan hanya habis dibagi
bilangan itu sendiri dan bilangan 1. Berikut ini merupakan bentuk algoritma untuk
menentukan bilangan prima.

Algorithm Design and Analysis


bool prime (N) {
int factor = 0; 1
for (i=1; i ≤ N; i++) N
if (N mod i ==0 ) N
factor ++; N
if (factor = 2) 1
return true; 1
else
return false;
}

Algoritma diatas memiliki nilai komplesitas 3N + 3 atau O(n)..

(ii) Empirical analysis

Hal ini biasa juga disebut dengan ‘a posteriori analysis’ karena analisis dilakukan
setelah implementasi algoritma dalam bentuk program. Pada empirical analysis,
program dijalankan dengan kumpulan data real-time dan waktu berjalan T(n)
ditentukan dengan mencatat kecepatan. Kelebihan empirical analysis adalah dapat
secara akurat menemukan nilai parameter algoritma yang bergantung pada mesin

5.2. Space complexity

Space complexity mengacu pada analisis ruang yang diperlukan untuk suatu algoritma.
Space di sini mengacu pada dua komponen berikut:

Fixed Component (Komponen Tetap)

Hal ini didefinisikan sebagai bagian dari memori yang tidak bergantung pada input/output
program, komponen tetap mengacu pada hal berikut:

1. Space instruksi

2. Space yang dibutuhkan untuk variabel sederhana

3. Space yang dibutuhkan untuk menyimpan konstanta

4. Space yang dibutuhkan untuk sekumpulan variabel atau agregat

Algorithm Design and Analysis


Variable Part (Bagian Variabel)

Hal ini didefinisikan sebagai bagian dari instance program yang bergantung pada
input/output program. Contohnya termasuk variabel yang direferensikan dan ruang
tumpukan. Oleh karena itu, kompleksitas ruang S(n) mengacu pada komponen tetap +
komponen variabel

Perhatikan contoh berikut:

1. Perhatikan bagian program berikut. Apa kompleksitas ruang?

Begin
return n;
End

Penyelesaiannya:
Kompleksitas ruang adalah nol karena tidak ada variabel yang disimpan dan diproses

2. Perhatikan bagian program berikut. Apa kompleksitas ruang?

Begin
i = 0;
s = 0;
s=s+i;
return s;
End

Penyelesaiannya:
Di sini, dua variabel disimpan dan diproses. Oleh karena itu, S(n) ≥ 2

6. Recursive Function

Fungsi merupakan sebagian baris atau tahapan dari algoritma yang dikelompokkan tersendiri
atau biasa disebut modul. Pembentukan ini ditujukan agar proses algoritma yang berulang dapat
dikelompokan tersendiri dan untuk menjalankannya cukup melalui pemanggilan fungsi ini saja.

Algorithm Design and Analysis


Pemanggilan fungsi dapat berlangsung dari fungsi utama, fungsi lain, maupun fungsi itu sendiri.
Dalam pemanggilan fungsi, pengiriman nilai dapat dilakukan agar fungsi yang dipanggil dapat
mengakses nilai yang dikirim. Bentuk pengiriman nilai yaitu berupa pengiriman nilai (passing
by value) dan pengiriman berupa Alamat (passing by address). Pada pengiriman berupa nilai
yang dikirim hanya nilai saja, jadi lebih bersifat melakukan duplikasi nilai ke variabel yang
terdapat pada fungsi pemanggil atau biasa disebut parameter, sehingga perubahan atau
pengolahan nilai pada fungsi pemanggil tidak akan mempengaruhi nilai yang dikirim.
Sedangkan, pada pengiriman berupa Alamat, yang dikirim kepada parameter fungsi adalah
alamat dari nilai. Dikarenakan kedua variabel baik dari fungsi pemanggil dan fungsi yang
dipanggil mengakses Alamat yang sama sehingga proses pengubahan maupun pengolahan nilai
pada fungsi yang dipanggil akan mempengaruhi nilai pada fungsi pemanggil.

Fungsi rekursif merupakan bentuk fungsi yang memanggil dirinya sendiri. Bentuk fungsi ini
wajib memiliki batasan penentu, sehingga tidak terjadi perulangan tanpa henti. Fungsi ini
ditujukan untuk mempermudah perancangan algoritma yang sulit. Berikut merupakan contoh
dari fungsi rekursif.

Int factorial (int n) {


If(n<2)
return 1;
else
return n*factorial (n-1);
}

Dari contoh diatas terlihat bahwa Ketika fungsi factorial dipanggil, fungsi tersebut akan
memanggil fungsi factorial lainnya. Berikut merupakan penggambarannya untuk pemanggilan
fungsi factorial (5).

Algorithm Design and Analysis


Faktorial (5)
Hasil = 5x Faktorial (4)
Faktorial (4); Faktorial (3)
Hasil = 4x Faktorial (2)
Hasil = 3x
Faktorial (3); Hasil = 2x Faktorial (1)
Faktorial (2);
Faktorial (1);

Hasil 2 x 1 Return 1
Hasil 3 x 2
Hasil 4 x 6 Return 2
Hasil 5 x 24 Return 6
Return 24
Return 120

Dari hasil pembahasan diatas terlihat bahwa fungsi factorial (5) masih akan tetap menunggu
hasil dari fungsi factorial (4) dan fungsi factorial (4) menunggu hasil dari fungsi factorial (3),
demikian seterusnya. Dikarenakan hal ini proses yang berjalan:

1) Memakan memori lebih banyak (memory allocation)

2) Diperlukan Batasan yang jelas pada fungsi factorial untuk memberhentikan pemanggilan
fungsi yang terus menerus (finite condition)

3) Untuk pengecekan diperlukan penggunaan teknik debugging (debugging technique)

4) Perlunya pemahaman dari cakupan variable dan proses (understanding of scope variable)

Algorithm Design and Analysis


KESIMPULAN

Pada mata kuliah ini akan menitikberatkan pada analisa dan perancangan algoritma. Dimana
awalanya akan dipelajari bagaimana cara mengubah algoritma ke dalam persamaan matematika
yang dilanjutkan dengan pembuktian dari algoritma yang telah diubah ke dalam bentuk persamaan
matematika untuk menguji nilai ketepatan dari algoritma tersebut terhadap persamaan dasar.

Kemudian akan dilanjutkan dengan pembelajaran terkait dengan fungsi rekursif. Fungsi rekursif
ini nantinya akan sangat dipakai dalam pemeceahan masalah menggunakan metode dynamic
programming. Hal yang perlu diperhatikan dalam perancangan algoritma baik dari segi tahapan
maupun analisa akhir algoritma.

Algorithm Design and Analysis


DAFTAR PUSTAKA

Jena, S., & Patro, S. (2021). DESIGN AND ANALYSIS OF ALGORITHMS- ( 1st Edition ) - S . R
. Jena , S . Patro. July 2018.

Sridar, S. (2015). Design and Analysis of Algorithms. New Delhi: Oxford University Press.

Intro to Recursive Definitions [Video],


www.youtube.com/watch?v=SzdGj8JqEUw&list=PLjil9E7WPyU7lsweQ9-
LtwmwWml69Ql37&index=9

Introduction to Algorithms [Video],


www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb

Introduction to Big O Notation and Time Complexity (Data Structures & Algorithms #7)
[Video], www.youtube.com/watch?v=D6xkbGLQesk

Algorithm Design and Analysis

Anda mungkin juga menyukai