Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

dokumen-dokumen yang mirip
Algoritma Brute Force

AlgoritmaBrute Force. Desain dan Analisis Algoritma (CS3024)

Algoritma Brute Force Oleh: Rinaldi Munir

Algoritma Brute Force

Algoritma Brute Force

Algoritma Brute Force

Kompleksitas Algoritma

Kompleksitas Algoritma

AnalisisFramework. Mengukur ukuran atau jumlah input Mengukur waktu eksekusi Tingkat pertumbuhan Efiesiensi worst-case, best-case dan average-case

Algoritma Divide and Conquer (Bagian 2)

Pendahuluan. Sebuah algoritma tidak saja harus benar, tetapi juga harus efisien. Algoritma yang bagus adalah algoritma yang efektif dan efisien.

Kompleksitas Algoritma (1)

Kompleksitas Algoritma

Algoritma Divide and Conquer. (Bagian 2)

Kompleksitas Algoritma

Sebuah algoritma tidak saja harus benar, tetapi juga harus mangkus (efisien). Algoritma yang bagus adalah algoritma yang mangkus.

Matematika Diskrit Kompleksitas Algoritma. Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

ANALISIS ALGORITMA. Disusun Oleh: Analisis Masalah dan Running Time. Adam Mukharil Bachtiar Teknik Informatika UNIKOM

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

Perbandingan Kecepatan/Waktu Komputasi Beberapa Algoritma Pengurutan (Sorting)

Divide and Conqueradalah strategi militer yang dikenal dengan nama divide ut imperes.

Strategi Algoritma Penyelesaian Puzzle Hanjie

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

Pengurutan (Sorting) Algoritma Pemrograman

Kuliah ke : 4 Algoritma & Stuktur Data. Pengurutan (Sorting)

MODUL IV PENCARIAN DAN PENGURUTAN

Yaitu proses pengaturan sekumpulan objek menurut urutan atau susunan tertentu Acuan pengurutan dibedakan menjadi :

Decrease and Conquer

Design and Analysis Algorithm

Algoritma Divide and Conquer (Bagian 1)

Penerapan Algoritma Brute Force dalam mencari Faktor Prima pada suatu Bilangan

Algoritma Runut-balik (Backtracking) Bahan Kuliah IF2251 Strategi Algoritmik Oleh: Rinaldi Munir

Penerapan Algoritma Brute Force pada permainan Countdown Number

PENGGUNAAN BRUTE FORCE UNTUK MERETAS PASSWORD FILE RAR

ALGORITMA PENGURUTAN & PENCARIAN

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

PENGURUTAN (SORTING) 1. Introduction 2. Bubble Sort 3. Selection Sort 4. Insertion Sort

Kompleksitas Algoritma

Pengurutan (Sorting) Keuntungan Data Terurut. Pengurutan Terbagi Dua Kelompok:

Algoritma dan Kompleksitas Algoritma

Teknik Pengurutan Kartu Remi

Algoritma Brute Force (lanjutan)

1. Kompetensi Mengenal dan memahami algoritma percabangan yang komplek.

ANALISIS PERBANDINGAN ALGORITMA SELECTION SORT DENGAN MERGE SORT

Penerapan Algoritma Greedy dalam Pencarian Rantai Penjumlahan Terpendek

Algoritma dan Struktur Data

STRUKTUR DASAR ALGORITMA

SEQUENTIAL SEARCH 11/11/2010. Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut

Algoritma Brute Force (Bagian 2) Oleh: Rinaldi Munir Bahan Kuliah IF2251 Strategi Algoritmik

Searching [pencarian] Algoritma Pemrograman

Penerapan Algoritma Brute Force di Permainan Nonogram

Algoritma Pemrograman

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

*** SELAMAT MENGERJAKAN

Algoritma Pencarian String dalam Pemilihan Anggota Sebuah Organisasi

Algoritma Pemrograman

Analisis Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore dalam Proses Pencarian String

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

ANTIMAGIC PUZZLE. Alwi Afiansyah Ramdan

Algoritma Pemrograman

LOOPING. Brigida Arie Minartiningtyas, M.Kom

Algoritma Runut-balik (Backtracking)

Bubble Sort (Pengurutan Gelembung / Pemberatan)

Pendahuluan. Algoritma greedy merupakan metode yang paling populer untuk memecahkan persoalan optimasi.

KOMPLEKSITAS ALGORITMA PENGURUTAN (SORTING ALGORITHM)

Algoritma Brute Force (lanjutan)

Algoritma Runut-balik (Backtracking) Bagian 1

Algoritma Pemrograman

Algoritma Brute Force(lanjutan) Lecture 6 CS3024

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

Sieve of Eratosthenes, Algoritma Bilangan Prima

Algoritma dan Pemrograman Sorting (Pengurutan) IS1313. Oleh: Eddy Prasetyo N

MAKALAH ALGORITMA DIVIDE AND CONQUER

Array. Teknik Informatika Politeknik Negeri Batam

Array (Tabel) bagian 2

PERBANDINGAN ALGORITMA GREEDY DAN BRUTE FORCE DALAM SIMULASI PENCARIAN KOIN

BAB VI SEARCHING (PENCARIAN)

BAB V SORTING (PENGURUTAN) INTERNAL

Implementasi Algoritma Greedy dalam Pembagian kerja pada Mesin yang Identik

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

Algoritma Pendukung Kriptografi

FUNGSI MINGGU KE: 4 TUJUAN: Mahasiswa dapat memahami definisi fungsi. Mahasiswa dapat mendefinisikan fungsi. Mahasiswa dapat menggunakan fungsi.

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

Soal dan Jawaban Materi Graf, Pohon, dan Kompleksitas Algoritma

Algoritma Brute Force pada Fluid Particle Engine

MODUL PRAKTIKUM PERCABANGAN DAN PENGULANGAN

Algoritma dan Pemrograman 2 PENGURUTAN

I. PENDAHULUAN II. DASAR TEORI. Contoh lainnya: Solusi: 0= V,1= I,2= O,3= R, 4= N,5= L,7= A,8= F,9= E.

Pencarian. 1. Memahami konsep pencarian 2. Mengenal beberapa algoritma pencarian 3. Menerapkan algoritma pencarian dalam program

Powered by icomit.wordpress.com

BFS dan DFS. Bahan Kuliah IF2151 Strategi Algoritmik. Oleh: Rinaldi Munir

SORTING. Brigida Arie Minartiningtyas, M.Kom

ALGORITMA RUNUT-BALIK UNTUK MENGGANTIKAN ALGORITMA BRUTE FORCE DALAM PERSOALAN N-RATU

BAB II LANDASAN TEORI

1. Kompetensi Mengenal dan memahami notasi-notasi algoritma yang ada.

STRUKTUR DASAR ALGORITMA

Pencarian pada Array. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

Struktur Pengulangan

STRUKTUR DASAR ALGORITMA DAN PEMROGRAMAN STMIK AMIKOM YOGYAKARTA

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

Transkripsi:

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir Bahan Kuliah IF2251 Strategi Algoritmik 1

Definisi Brute Force Brute force : pendekatan yang lempang (straightforward) untuk memecahkan suatu masalah Biasanya didasarkan pada: pernyataan masalah (problem statement) definisi konsep yang dilibatkan. Algoritma brute force memecahkan masalah dengan sangat sederhana, langsung, jelas (obvious way). Just do it! 2

Contoh-contoh (Berdasarkan pernyataan masalah) 1. Mencari elemen terbesar (terkecil) Persoalan: Diberikan sebuah senarai yang beranggotakan n buah bilangan bulat (a 1, a 2,, a n ). Carilah elemen terbesar di dalam senarai tersebut. Algoritma brute force: bandingkan setiap elemen senarai untuk menemukan elemen terbesar 3

procedure CariElemenTerbesar(input a 1, a 2,..., a n : integer, output maks : integer) { Mencari elemen terbesar di antara elemen a 1, a 2,..., a n. Elemen terbesar akan disimpan di dalam maks. Masukan: a 1, a 2,..., a n Keluaran: maks } Deklarasi k : integer Algoritma: maks a 1 for k 2 to n do if a k > maks then maks a k endif endfor Kompleksitas waktu algoritma: O(n). 4

2. Pencarian beruntun (Sequential Search) Persoalan: Diberikan senarai yang berisi n buah bilangan bulat (a 1, a 2,, a n ). Carilah nilai x di dalam senara tersebut. Jika x ditemukan, maka keluarannya adalah indeks elemen senarai, jika x tidak ditemukan, maka keluarannya adalah 0. Algoritma brute force (sequential serach): setiap elemen senarai dibandingkan dengan x. Pencarian selesai jika x ditemukan atau elemen senarai sudah habis diperiksa. 5

procedure PencarianBeruntun(input a 1, a 2,..., a n : integer, x : integer, output idx : integer) { Mencari x di dalam elemen a 1, a 2,..., a n. Lokasi (indeks elemen) tempat x ditemukan diisi ke dalam idx. Jika x tidak ditemukan, maka idx diisi dengan 0. Masukan: a 1, a 2,..., a n Keluaran: idx } Deklarasi k : integer Algoritma: k 1 while (k < n) and (a k x) do k k + 1 endwhile { k = n or a k = x } if a k = x then { x ditemukan } idx k else idx 0 { x tidak ditemukan } endif Kompleksitas waktu algoritma: O(n). Adakah algoritma pencarian elemen yang lebih mangkus daripada brute 6force?

Contoh-contoh (Berdasarkan definisi konsep yang terlibat) 1. Menghitung a n (a > 0, n adalah bilangan bulat tak-negatif) Definisi: a n = a x a x x a (n kali), jika n > 0 = 1, jika n = 0 Algoritma brute force: kalikan 1 dengan a sebanyak n kali 7

function pangkat(a : real, n : integer) real { Menghitung a^n } Deklarasi i : integer hasil : real Algoritma: hasil 1 for i 1 to n do hasil hasil * a end return hasil 8

2. Menghitung n! (n bilangan bulat tak-negatif) Definisi: n! = 1 2 3 n, jika n > 0 = 1, jika n = 0 Algoritma brute force: kalikan n buah bilangan, yaitu 1, 2, 3,, n, bersama-sama 9

function faktorial(n : integer) integer { Menghitung n! } Deklarasi i : integer fak : real Algoritma: fak 1 for i 1 to n do fak fak * i end return fak 10

3. Mengalikan dua buah matriks, A dan B Definisi: Misalkan C = A B dan elemen-elemen matrik dinyatakan sebagai c ij, a ij, dan b ij c ij = a b + a b + L+ i1 1 j i 2 2 j a in b nj = n k= 1 a ik b kj Algoritma brute force: hitung setiap elemen hasil perkalian satu per satu, dengan cara mengalikan dua vektor yang panjangnya n. 11

procedure PerkalianMatriks(input A, B : Matriks, input n : integer, output C : Matriks) { Mengalikan matriks A dan B yang berukuran n n, menghasilkan matriks C yang juga berukuran n n Masukan: matriks integer A dan B, ukuran matriks n Keluaran: matriks C } Deklarasi i, j, k : integer Algoritma for i 1 to n do for j 1 to n do C[i,j] 0 { inisialisasi penjumlah } for k 1 to n do C[i,j] C[i,j] + A[i,k]*B[k,j] endfor endfor endfor Adakah algoritma perkalian matriks yang lebih mangkus daripada brute force? 12

4. Menemukan semua faktor dari bilangan bulat n (selain dari 1 dan n itu sendiri). Definisi: Bilangan bulat a adalah faktor dari bilangan bulat b jika a habis membagi b. Algoritma brute force: bagi n dengan setiap i = 2, 3,, n 1. Jika n habis membagi i, maka i adalah faktor dari n. 13

procedure CariFaktor(input n : integer) { Mencari faktor dari bilangan bulat n selain 1 dan n itu sendiri. Masukan: n Keluaran: setiap bilangan yang menjadi faktor n dicetak. } Deklarasi k : integer Algoritma: k 1 for k 2 to n - 1 do if n mod k = 0 then write(k) endif endfor Adakah algoritma pemfaktoran yang lebih baik daripada brute force? 14

5. Uji keprimaan Persoalan: Diberikan sebuah bilangan bilangan bulat positif. Ujilah apakah bilangan tersebut merupakan bilangan prima atau bukan. Definisi: bilangan prima adalah bilangan yang hanya habis dibagi oleh 1 dan dirinya sendiri. Algoritma brute force: bagi n dengan 2 sampai n 1. Jika semuanya tidak habis membagi n, maka n adalah bilangan prima. Perbaikan: cukup membagi dengan 2 sampai n saja 15

function Prima(input x : integer) boolean { Menguji apakah x bilangan prima atau bukan. Masukan: x Keluaran: true jika x prima, atau false jika x tidak prima. } Deklarasi k, y : integer test : boolean Algoritma: if x < 2 then { 1 bukan prima } return false else if x = 2 then { 2 adalah prima, kasus khusus } return true else y x test true while (test) and (y 2) do if x mod y = 0 then test false else y y - 1 endif endwhile { not test or y < 2 } return test endif endif Adakah algoritma pengujian bilangan prima yang lebih mangkus daripada brute force? 16

Algoritma Pengurutan Brute Force Algoritma apa yang paling lempang dalam memecahkan masalah pengurutan? Bubble sort dan selection sort! Kedua algoritma ini memperlihatkan teknik brute force dengan jelas sekali. 17

Bubble Sort Mulai dari elemen ke-n: 1. Jika s n < s n-1, pertukarkan 2. Jika s n-1 < s n-2, pertukarkan 3. Jika s 2 < s 1, pertukarkan 1 kali pass Ulangi lagi untuk pass ke-i, tetapi sampai elemen ke-i Semuanya ada n 1 kali pass 18

procedure BubbleSort (input/output s : TabelInt, input n : integer) { Mengurutkan tabel s [1..N] sehingga terurut menaik dengan metode pengurutan bubble sort. Masukan : Tabel s yang sudah terdefenisi nilai - nilainya. Keluaran: Tabel s yang terurut menaik sedemikian sehingga s[1] s[2] s[n]. } Deklarasi i : integer { pencacah untuk jumlah langkah } k : integer { pencacah,untuk pengapungan pada setiap langkah } temp : integer { peubah bantu untuk pertukaran } Algoritma: for i 1 to n - 1 do for k n downto i + 1 do if s[k] < s[k-1] then {pertukarkan s[k] dengan s[k-1]} temp s[k] s[k] s[k-1] s[k-1] temp endif endfor endfor Kompleksitas waktu algoritma: O(n 2 ). Adakah algoritma pengurutan elemen elemen yang lebih mangkus? 19

Selection Sort Pass ke 1: 1. Cari elemen terbesar mulai di dalam s[1..n] 2. Letakkan elemen terbesar pada posisi n (pertukaran) Pass ke-2: 1. Cari elemen terbesar mulai di dalam s[1..n - 1] 2. Letakkan elemen terbesar pada posisi n - 1 (pertukaran) Ulangi sampai hanya tersisa 1 elemen Semuanya ada n 1 kali pass 20

procedure PengurutanSeleksi(input/output s : array [1..n] of integer) { Mengurutkan s 1, s 2,..., s n sehingga tersusun menaik dengan metode pengurutan seleksi. Masukan: s 1, s 2,..., s n Keluaran: s 1, s 2,..., s n (terurut menaik) } Deklarasi i, j, imaks, temp : integer Algoritma: for i n downto 2 do { jumlah pass sebanyak n 1 } { cari elemen terbesar di dalam s[1], s[2],..., s[i] } imaks 1 { elemen pertama diasumsikan sebagai elemen terbesar sementara for j 2 to i do if s[j] > s[imaks] then imaks j endif endfor {pertukarkan s[imaks] dengan s[i] } temp s[i] s[i] s[imaks] s[imaks] temp endfor Kompleksitas waktu algoritma: O(n 2 ). Adakah algoritma pengurutan elemen elemen yang lebih mangkus? 21

Mengevaluasi polinom Persoalan: Hitung nilai polinom p(x) = a n x n + a n-1 x n-1 + + a 1 x + a 0 untuk x = t. Algoritma brute force: x i dihitung secara brute force (seperti perhitungan a n ). Kalikan nilai x i dengan a i, lalu jumlahkan dengan suku-suku lainnya. 22

function polinom(input t : real) real { Menghitung nilai p(x) pada x = t. Koefisien-koefisein polinom sudah disimpan di dalam a[0..n]. Masukan: t Keluaran: nilai polinom pada x = t. } Deklarasi i, j : integer p, pangkat : real Algoritma: p 0 for i n downto 0 do pangkat 1 for j 1 to i do {hitung x i } pangkat pangkat * t endfor p p + a[i] * pangkat endfor return p Kompleksitas algoritma ini adalah O(n 2 ). 23

Perbaikan (improve): function polinom2(input x0 : real) real { Menghitung nilai p(x) pada x = t. Koefisien-koefisein polinom sudah disimpan di dalam a[0..n]. Masukan: x0 Keluaran: nilai polinom pada x = t. } Deklarasi i, j : integer p, pangkat : real Algoritma: p a[n] pangkat 1 for i 1 to n do pangkat pangkat * t p p + a[i] * pangkat endfor return p Kompleksitas algoritma ini adalah O(n). Adakah algoritma perhitungan nilai polinom yang lebih mangkus daripada brute force? 24

Karakteristik Algoritma Brute Force 1. Algoritma brute force umumnya tidak cerdas dan tidak mangkus, karena ia membutuhkan jumlah langkah yang besar dalam penyelesaiannya. Kata force mengindikasikan tenaga ketimbang otak Kadang-kadang algoritma brute force disebut juga algoritma naif (naïve algorithm). 25

3. Algoritma brute force lebih cocok untuk masalah yang berukuran kecil. Pertimbangannya: - sederhana, - implementasinya mudah Algoritma brute force sering digunakan sebagai basis pembanding dengan algoritma yang lebih mangkus. 26

4. Meskipun bukan metode yang mangkus, hampir semua masalah dapat diselesaikan dengan algoritma brute force. Sukar menunjukkan masalah yang tidak dapat diselesaikan dengan metode brute force. Bahkan, ada masalah yang hanya dapat diselesaikan dengan metode brute force. Contoh: mencari elemen terbesar di dalam senarai. Contoh lainnya? 27