Recursion, Algoritma, Struktur Data. Recursion. Erick Pranata. Edisi II

dokumen-dokumen yang mirip
Recursion, Algoritma, Struktur Data. Recursion. Erick Pranata. Edisi I

Design and Analysis Algorithm. Ahmad Afif Supianto, S.Si., M.Kom. Pertemuan 03

Design and Analysis Algorithm

Pertemuan 4 Fungsi Rekursif

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 1 x 3 x 50 Menit Pertemuan : 3

Rekursif. Rekursif adalah salah satu metode dalam dunia matematika dimana definisi sebuah fungsi mengandung fungsi itu sendiri.

ALGORITHM. 3 Rekursif Algorithm. Dahlia Widhyaestoeti, S.Kom dahlia74march.wordpress.com

Pemrograman Dasar L A T I H A N M E T H O D / F U N G S I M E T H O D R E K U R S I F

Analisa dan Perancangan Algoritma. Ahmad Sabri, Dr Sesi 2: 16 Mei 2016

SATUAN ACARA PERKULIAHAN MATA KULIAH GRAPH & ANALISIS ALGORITMA (SI / S1) KODE / SKS : KK / 3 SKS

FUNGSI. setiap elemen di dalam himpunan A mempunyai pasangan tepat satu elemen di himpunan B.

Design and Analysis of Algorithms CNH2G3- Week 5 Kompleksitas waktu algoritma rekursif part 2: Metode Karakteristik

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-5 Rekursif

STRATEGI DIVIDE AND CONQUER

Design and Analysis of Algorithm

Rekursif. Proses yang memanggil dirinya sendiri. Merupakan suatu fungsi atau prosedur Terdapat suatu kondisi untuk berhenti.

Pertemuan 10 REKURSI

Design and Analysis of Algorithm

SATUAN ACARA PERKULIAHAN MATA KULIAH LOGIKA DAN ALGORITMA (MI/D3) KODE: IT SKS: 3 SKS. Kemampuan Akhir Yang Diharapkan

BAB VII ALGORITMA DIVIDE AND CONQUER

Perulangan Rekursif dan Perulangan Iteratif

Algoritma Pemrograman

Algoritma Divide and Conquer

2. Sebuah prosedur langkah demi langkah yang pasti untuk menyelesaikan sebuah masalah disebut : a. Proses b. Program c. Algoritma d. Prosesor e.

Design and Analysis of Algorithms CNH2G3- Week 4 Kompleksitas waktu algoritma rekursif part 1

NASKAH UJIAN UTAMA. JENJANG/PROG. STUDI : DIPLOMA TIGA / MANAJEMEN INFORMATIKA HARI / TANGGAL : Kamis / 18 FEBRUARI 2016

Catatan Kuliah STRUKTUR DATA BAB III REKURSIF

Algoritma. Begin at the beginning and go on /ll you come to the end: then stop. Lewis Caroll, Alice s Adventures in Wonderland, 1865

Algoritma Heap Sort. Sekolah Teknik Elektro & Informatika Departemen Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung

Struktur Data & Algoritme (Data Structures & Algorithms)

REKURSIF. Dari bahan Dasar Pemrograman oleh: Arkham Zahri Rakhman Rev.: Fazat Nur Azizah

Objectives. Struktur Data & Algoritme (Data Structures & Algorithms) Outline. Apa itu Recursion? Recursion

Sistem Komputer. Software / Perangkat Lunak. Hardware / Perangkat keras. Brainware / Pemakai

REKURSIF. Arkham Zahri Rakhman, S.Kom., M.Eng. Rev.: Dr. Fazat Nur Azizah

Selection, Looping, Branching

ALGORITMA PEMOGRAMAN SEMESTER GENAP 2017/2018

Algoritma Pemrograman

UNIVERSITAS GUNADARMA

Alat Peraga Menara Hanoi untuk Pembelajaran Pola Bilangan. Oleh: Tim Unit Media Alat Peraga Matematika

ANALISIS PERBANDINGAN ALGORITMA SELECTION SORT DENGAN MERGE SORT

Sistem Komputer. Software / Perangkat Lunak. Hardware / Perangkat keras. Brainware / Pemakai

Algoritma Pemrograman

PENGGUNAAN ALGORITMA DIVIDE AND CONQUER UNTUK OPTIMASI KONVERSI BILANGAN DESIMAL KE BINER

Pengantar Struktur Data

SILABUS MATAKULIAH. Indikator Pokok Bahasan/Materi Aktifitas Pembelajaran

Algoritma & Pemrograman #1. Antonius Rachmat C, S.Kom

Kompleksitas Komputasi

Penerapan Algoritma Bucket Sort Untuk melakukan Pengurutan n buah Bilangan Mata Kuliah Pemrosesan Paralel

5.3 RECURSIVE DEFINITIONS AND STRUCTURAL INDUCTION

KONTRAK PEMBELAJARAN (KP) MATA KULIAH. Algoritma dan Pemrograman

Konstruksi Dasar Algoritma

Praktikum 6. Konsep Rekursi Perbandingan Perulangan biasa dan Rekursi Implementasi Rekursi dalam Bahasa C

Fakultas Teknologi Informasi

Pengantar Algoritma & Flow Chart

PENDEKATAN MASALAH TOWER OF HANOI DENGAN ALGORITMA DIVIDE AND CONQUER

PERTEMUAN 11 TEHNIK SEARCHING

METODE DEVIDE AND CONQUER (DANDC)

Multithreading untuk Algoritma Divide and Conquer

Recursion Properties. Factorial: MaxSubseqSum Recursive version. MaxSubseqSum Recursive version

APLIKASI PEMROGRAMAN DINAMIS UNTUK MEMAKSIMALKAN PELUANG MEMENANGKAN PERMAINAN PIG

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA SILABUS ALGORITMA PEMROGRAMAN

Analisis dan Strategi Algoritma

Sorting Algorithms. Algoritma dan Struktur Data. Sorting algorithms

Aplikasi Divide and Conquer pada: 1. Grafika Komputer 2. Evaluasi expression tree. Oleh: Rinaldi Munir Informatika STEI-ITB

04/03/2013. Absensi : 10% UTS : 30% UAS : 40% Tugas & Kuis : 20% By: Vilia Eka Meyana, M.Kom Institute Bisnis dan Informatika Indonesia

Rekursif/ Iterasi/ Pengulangan

KKKF33110 STRUKTUR DATA

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

PENEMPATAN KANTOR POS DENGAN ALGORITMA PROGRAM DINAMIS

{Pertemuan 4 Struktur Kondisi IF}

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

Rekursif. Overview. Tujuan Instruksional

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

BAB V Tujuan 5.1 Rekursi Dasar

Algoritma Pemrograman 2B (Pemrograman C++)

Decrease and Conquer

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

OPERASI LOGIKA PADA GENERAL TREE MENGGUNAKAN FUNGSI REKURSIF

PERTEMUAN 7 REVIEW (QUIZ)

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA SILABUS ALGORITMA DAN STRUKTUR DATA

BAB XI Manipulasi Binary Tree

7. Logika dan Algoritma Pemrograman

RENCANA PEMBELAJARAN SEMESTER (RPS)

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

Karena relasi rekurens menyatakan definisi barisan secara rekursif, maka kondisi awal merupakan langkah basis pada definisi rekursif tersebut.

Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

Berbagai Solusi Pemecahan Masalah Tower of Hanoi dan Representasi Grafnya

Analisis Kecepatan Sorting Dengan Notasi Big O

SATUAN ACARA PERKULIAHAN UNIVERSITAS GUNADARMA

Seri : Algoritma dan Pemrograman dengan Pascal

Dasar Komputer & Pemrograman 2A

PERTEMUAN 4 PENGEMBANGAN PSEUDOCODE STRUKTUR KONTROL PEMILIHAN

Pengampu : Agus Priyanto, M.KOM

BAB I PENDAHULUAN. penggunaan penalaran logika, dan abstraksi, matematika berkembang dari

PENCARIAN KITAB BESERTA PASAL PADA ALKITAB BERDASARKAN KATA DENGAN MENGGUNAKAN STRUKTUR DATA TRIE

Refreshing Materi Kuliah Semester Pendek 2010/2011. Logika dan Algoritma. Heri Sismoro, M.Kom.

BAB III ANALISIS DAN PERANCANGAN. Perancangan game mencocokkan gambar ini dibuat agar dapat berjalan

Pertemuan 3 Prosedur dan Fungsi

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 14 & 15

Transkripsi:

Recursion, Algoritma, Struktur Data Recursion Erick Pranata Edisi II 04/04/2013

Definisi Bayangkan definisi suatu frase yang bersifat sirkular Status Galau: Kondisi galau yang dicerminkan dalam bentuk tulisan Perhatikan bahwa galau kembali digunakan untuk menerangkan status galau. Definisi tersebut menggunakan mengalihfungsikan kata-kata yang seharusnya dijelaskan, menjadi penjelas. Inilah yang disebut recursion. Dalam dunia pemrograman, recursion tergolong dalam rumpun iteration (repetition, terdiri atas iteration dan recursion). Dengan demikian, struktur ini dapat digunakan untuk menjalankan statement yang berulang. Thinking Recursively Berpikir rekursif dapat dilakukan dengan: 1. memecah permasalahan menjadi masalah-masalah yang lebih kecil 2. menentukan pola umum yang digunakan untuk memecahkan masalahmasalah tersebut 3. menyatukannya untuk dapat menyelesaikan permasalahan secara utuh Sebagai contoh, andaikata terdapat sebuah fungsi untuk menghitung total kuadrat dari bilangan m sampai n, SumSquares(m,n), dengan syarat m<=n, secara iteratif ia dapat dinyatakan sebagai berikut: Code 1. SumSquares secara Iteratif function SumSquares(m, n) total = 0 for i = m to n total = total + i*i next SumSquares = total end function Dengan demikian, nilai dari SumSquares (5, 10) adalah = 5 2 +6 2 +7 2 +8 2 +9 2 +10 2 = 255. Erick Pranata - Recursion - 04/04/2013 1

Menyelesaikan problem ini secara rekursif dapat dilakukan dengan memecah masalah tersebut menjadi masalah masalah yang lebih kecil: SumSquares(5, 10) = 5 2 + 6 2 + 7 2 + 8 2 + 9 2 + 10 2 SumSquares(6, 10) = 6 2 + 7 2 + 8 2 + 9 2 + 10 2 SumSquares(7, 10) = 7 2 + 8 2 + 9 2 + 10 2 SumSquares(8, 10) = 8 2 + 9 2 + 10 2 SumSquares(9, 10) = 9 2 + 10 2 SumSquares(10, 10) = 10 2 Perhatikan ilustrasi di atas. Bukankah, masalah-masalah tersebut dapat ditulis sebagai berikut? SumSquares(5, 10) = 5 2 + SumSquares(6, 10) SumSquares(6, 10) = 6 2 + SumSquares(7, 10) SumSquares(7, 10) = 7 2 + SumSquares(8, 10) SumSquares(8, 10) = 8 2 + SumSquares(9, 10) SumSquares(9, 10) = 9 2 + SumSquares(10, 10) SumSquares(10, 10) = 10 2 Dan jika digeneralisasi, bukankah akan menjadi berikut? SumSquares(m, n) = m 2 + SumSquares(m+1, n) SumSquares(m, n) = 10 2 <- Jika m=n Masalah tersebut ternyata hanya menjadi 2 pola saja! Perhatikan bahwa perulangan berhenti ketika nilai m=n. Dengan demikian bila digabungkan, fungsi tersebut dapat ditulis secara rekursif sebagai berikut: Code 2. SumSquares secara Rekursif function SumSquares(m, n) if m=n then SumSquares = m * m 'Base Case else SumSquares = m * m + SumSquares(m+1, n) 'Recursive Case end if end function Erick Pranata - Recursion - 04/04/2013 2

Beberapa contoh kasus lain yang dapat digunakan untuk mempelajari recursion adalah: 1. Faktorial 2. Fibonacci 3. Perkalian 4. Pangkat Tracing Tracing, atau pengkajian suatu fungsi atau prosedur rekursif dapat dilakukan dengan 2 cara: 1. Call Tree 2. Call Trace Ambil contoh code 2. Semisal Anda ingin memeriksa apakah fungsi tersebut telah berjalan dengan benar, lakukan trace dengan menggunakan call tree sebagai berikut Gambar 1 Call Tree Erick Pranata - Recursion - 04/04/2013 3

atau call trace sebagai berikut Gambar 2 Call Trace Tower of Hanoi Alkisah di suatu daerah di Asia, terdapat sejumlah biarawan yang berusaha memindahkan kepingan emas. Konon, ketika mereka selesai memindahkan ke 64 kepingan tersebut dari pilar 1 ke pilar 3, maka dunia akan hancur dan kembali ke masa awal, ketika dunia baru diciptakan. Ke 64 keping memiliki ukuran yang berbeda, dan para biarawan harus mematuhi 2 aturan: 1. Hanya 1 keping yang dapat dipindahkan pada suatu waktu 2. Keping yang lebih besar tidak boleh diletakkan di atas keping yang lebih kecil Jika mereka bekerja nonstop 24/7, dan butuh 1 detik untuk memindahkan sebuah keping, kapankah dunia akan hancur? Ilustrasi permasalahan ini untuk 4 keping ditunjukkan pada gambar 3. Gambar 3 Tower of Hanoi Erick Pranata - Recursion - 04/04/2013 4

Solusi untuk permasalahan ini dapat dicapai dengan langkah-langkah sebagai berikut: 1. Pindahkan 4 keping dari pilar 1 ke pilar 3 a. Pindahkan 3 keping dari pilar 1 ke pilar 2 i. Pindahkan 2 keping dari pilar 1 ke pilar 3 1. Pindahkan 1 keping dari pilar 1 ke pilar 2 a. Pindahkan sebuah keping dari pilar 1 ke pilar 2 2. Pindahkan sebuah keping dari pilar 1 ke pilar 3 3. Pindahkan 1 keping, dari pilar 2 ke pilar 3 a. Pindahkan sebuah keping dari pilar 2 ke pilar 3 ii. Pindahkan sebuah keping dari pilar 1 ke pilar 2 iii. Pindahkan 2 keping, dari pilar 3 ke pilar 2 1. dst b. Pindahkan sebuah keping dari pilar 1 ke pilar 3 c. Pindahkan 3 keping, dari pilar 2 ke pilar 3 i. Pindahkan 2 keping dari pilar 2 ke pilar 1 1. dst ii. Pindahkan sebuah keping dari pilar 2 ke pilar 3 iii. Pindahkan 2 keping, dari pilar 1 ke pilar 3 1. dst Memperhatikan urutan langkah di atas, dapat diketahui bahwa base case yang cocok adalah Pindahkan sebuah keping dari pilar start ke pilar tujuan. Perhatikan poin a, b, dan c di atas; Prosedur rekursif untuk mencetak solusi untuk Tower of Hanoi dapat ditulis demikian Code 3. Tower of Hanoi Sub ToH(n, start, tujuan, sementara) If n = 1 then document.write " Pindahkan sebuah keping dari pilar " & start & " ke pilar " & tujuan & "<br/>" else ToH(n-1, start, perantara, tujuan) End if End Sub document.write " Pindahkan sebuah keping dari pilar " & start & " ke pilar " & tujuan & "<br/>" ToH(n-1, perantara, tujuan, start) Erick Pranata - Recursion - 04/04/2013 5

Coba lakukan tracing. Benarkah prosedur tersebut? Jika setiap aksi dihitung, berikut hasil yang diperoleh untuk tiap keping: Tabel 1 Jumlah Aksi berdasarkan Jumlah Keping Jumlah Keping Jumlah Aksi 1 1 2 3 3 7 4 15 5 31 6 63 7 127 8 255 Dengan demikian dapat disimpulkan bahwa jumlah instruksi bersifat eksponensial, dimana bila terdapat n keping, maka akan terdapat 2 n -1 aksi. Kembali ke cerita para biarawan; Terdapat 64 keping emas dan untuk memindahkan 1 keping, diperlukan 1 detik. Jika dalam 1 tahun, terdapat 31.536.000 detik, maka waktu yang diperlukan bagi para biarawan untuk memindahkan seluruh keping tersebut adalah (2 64-1)/ 31.536.000 = 584.942.417.355 tahun. Jadi, kita masih akan tetap hidup untuk beberapa saat Divide and Conquer Merupakan suatu strategi dalam menyelesaikan suatu masalah dengan: 1. Memecahnya menjadi subproblems yang lebih kecil dengan karakteristik yang sama 2. Menyelesaikan setiap subproblems secara rekursif 3. Menggabungkan setiap jawaban secara tepat Dengan strategi ini, setiap masalah akan dipecah menjadi masalah-masalah yang lebih kecil yang serupa dan sama, kemudian secara rekursif diselesaikan; jawaban yang diperoleh lalu digabungkan satu demi satu hingga solusi akhir diperoleh. Lihat kembali fungsi rekursif SumSquares yang berguna untuk menjumlahkan bilangan kuadrat dalam rentang tertentu pada Code 2. Erick Pranata - Recursion - 04/04/2013 6

SumSquares(5, 10) = 5 2 + 6 2 + 7 2 + 8 2 + 9 2 + 10 2 = 355 Permasalahan di atas dapat diselesaikan dengan pendekatan divide and conquer, dengan memecah-mecah masalah tersebut. Gambar 4 Call Tree untuk SumSquares dengan Divide and Conquer Dengan demikian, fungsi rekursif tersebut dapat disesuaikan menjadi sebagai berikut: Code 4. SumSquares dengan Divide and Conquer function SumSquares(m, n) if m = n then SumSquares = m * m else tengah = (m+n)\2 SumSquares = SumSquares(m,tengah) + SumSquares(tengah+1,n) end if end function Keuntungan strategi ini adalah penghematan memori yang digunakan. Hal ini dapat dilakukan dengan membandingkan gambar 1 dan gambar 4. Bukankah kedalaman Call Tree yang dihasilkan dengan strategi Divide and Conquer menjadi lebih kecil? Dengan demikian, memori yang dibutuhkan pun semakin kecil. Sebagai latihan, buatlah fungsi rekursif dengan strategi ini untuk kasus: 1. Perkalian 2. Pangkat 3. Mencari nilai maksimum/minimum dalam suatu array 4. Mencari nilai dalam suatu array dengan algoritma binary search Erick Pranata - Recursion - 04/04/2013 7

Implementasi: Sierpinski Fractal Salah satu contoh implementasi teknik recursion adalah penggambaran fractal (gambar yang dibentuk dengan menggambar dirinya sendiri). Salah satu fractal sederhana yang dapat diimplementasikan secara rekursif adalah Sierpinski Fractal: Algoritma 1. Gambar Segitiga Prosedur Segitiga(t1, t2, t3, jumlah) Jika jumlah = 0 maka gambarkan segitiga berdasarkan 3 titik Jika tidak Temukan titik tengah (t1, t2) -> t12 Temukan titik tengah (t1, t3) -> t13 Temukan titik tengah (t2, t3) -> t23 Segitiga(t1, t12, t13, jumlah-1) Segitiga(t2, t12, t23, jumlah-1) Segitiga(t3, t13, t23, jumlah-1) Kembali Algoritma 2. Pembuatan Fractal 1. Tentukan 3 titik awal -> t1, t2, t3 2. Tentukan jumlah perulangan -> jumlah 3. Segitiga(t1, t2, t3, jumlah) Referensi Thomas A. Standish, Data Structures, Algorithms & Software Principles in C, Addison- Wesley Publishing Company, 1995. Erick Pranata - Recursion - 04/04/2013 8