Week 01
Introduction of
Algorithm Design and
Analysis
OUTLINE MATERI :
1. Introduction
2. Definition of algorithms
3. Definition of pseudocode
4. Mathematics induction
6. Recursive function
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.
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 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:
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.
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:
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.
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
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.
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
Langkah pertama disebut Basis, sedangkan langkah kedua disebut langkah Induksi
Contoh:
𝒏
𝒏(𝒏 + 𝟏)
∑𝒊 =
𝟐
𝒊=𝟏
Penyelesaian:
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.
Oleh karena itu ruas kiri = ruas kanan, maka persamaan benar untuk n = 1.
2. Langkah Induksi
𝒌(𝒌+𝟏)
P(k) benar, berarti 𝟏 + 𝟐 + 𝟑 + ⋯ + 𝒌 = 𝟐
(𝒌 + 𝟏)((𝒌 + 𝟏) + 𝟏)
𝟏 + 𝟐 + 𝟑 + ⋯ + (𝒌 + 𝟏) =
𝟐
𝒌(𝒌+𝟏)
Menurut hipotesis, 𝟏 + 𝟐 + 𝟑 + ⋯ + 𝒌 = , sehingga
𝟐
(𝒌 + 𝟏)((𝒌 + 𝟏) + 𝟏)
𝟏 + 𝟐 + 𝟑 + ⋯ + 𝒌 + (𝒌 + 𝟏) =
𝟐
𝒌(𝒌 + 𝟏) (𝒌 + 𝟏)((𝒌 + 𝟏) + 𝟏)
+ (𝒌 + 𝟏) =
𝟐 𝟐
𝒌𝟐 + 𝟑𝒌 + 𝟐 (𝒌 + 𝟏)(𝒌 + 𝟐)
=
𝟐 𝟐
(𝒌 + 𝟏)(𝒌 + 𝟐) (𝒌 + 𝟏)(𝒌 + 𝟐)
=
𝟐 𝟐
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.
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:
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:
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
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.
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
Space complexity mengacu pada analisis ruang yang diperlukan untuk suatu algoritma.
Space di sini mengacu pada dua komponen berikut:
Hal ini didefinisikan sebagai bagian dari memori yang tidak bergantung pada input/output
program, komponen tetap mengacu pada hal berikut:
1. Space instruksi
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
Begin
return n;
End
Penyelesaiannya:
Kompleksitas ruang adalah nol karena tidak ada variabel yang disimpan dan diproses
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.
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.
Dari contoh diatas terlihat bahwa Ketika fungsi factorial dipanggil, fungsi tersebut akan
memanggil fungsi factorial lainnya. Berikut merupakan penggambarannya untuk pemanggilan
fungsi factorial (5).
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:
2) Diperlukan Batasan yang jelas pada fungsi factorial untuk memberhentikan pemanggilan
fungsi yang terus menerus (finite condition)
4) Perlunya pemahaman dari cakupan variable dan proses (understanding of scope variable)
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.
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.
Introduction to Big O Notation and Time Complexity (Data Structures & Algorithms #7)
[Video], www.youtube.com/watch?v=D6xkbGLQesk