0% menganggap dokumen ini bermanfaat (0 suara)
164 tayangan88 halaman

Logikaalgoritma

Rekursif adalah proses yang memanggil dirinya sendiri. Beberapa contoh rekursif adalah fungsi pangkat, faktorial, fibonanci, dan menara Hanoi. Fungsi-fungsi tersebut akan terus memanggil dirinya sendiri sampai memenuhi kondisi tertentu.

Diunggah oleh

buatspotify32
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
164 tayangan88 halaman

Logikaalgoritma

Rekursif adalah proses yang memanggil dirinya sendiri. Beberapa contoh rekursif adalah fungsi pangkat, faktorial, fibonanci, dan menara Hanoi. Fungsi-fungsi tersebut akan terus memanggil dirinya sendiri sampai memenuhi kondisi tertentu.

Diunggah oleh

buatspotify32
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 88

STRUKTUR REKURSIF

PERTEMUAN 6

Rekursif adalah suatu proses yang bisa memanggil dirinya

sendiri.

Contoh konsep penggunaan Rekursif

Masalah : Memotong Roti tawar tipis-tipis sampai habis

Algoritma :

1.Jika roti sudah habis atau potongannya sudah paling

tipis maka pemotongan roti selesai.

2.Jika roti masih bisa dipotong, potong tipis dari tepi roti

tersebut, lalu lakukan prosedur 1 dan 2 untuk sisa

potongannya.

STRUKTUR REKURSIF

a. Fungsi pangkat

b. Faktorial

c. Fibonancy

d. Menara Hanoi

Contoh Fungsi Rekursif

Menghitung 10 pangkat n dengan menggunakan konsep

rekursif.

Secara Notasi pemrograman dapat ditulis :

10 0 = 1 …………………………..(1 )

10 n

= 10 * 10 n-1 .....................................( 2 )

Contoh :

10 3 = 10 * 10 2

10 2 = 10 * 10 1
10 1 = 10 * 10 0

10 0 = 1

Fungsi Pangkat

Fungsi Pangkat

#Fungsi Pangkat secara Rekursif

def pangkat(x,y):

if y == 0:

return 1

else:

return x * pangkat(x,y-1)

x = int(input("Masukan Nilai X : "))

y = int(input("Masukan Nilai Y : "))

print("%d dipangkatkan %d = %d"

% (x,y,pangkat(x,y)))

Output Program:

Masukan Nilai X : 10

Masukan Nilai Y : 3

10 dipangkatkan 3 = 1000

Fungsi Pangkat

• Fungsi pangkat akan memanggil dirinya sendiri, yaitu

setiap nilai x dan y di input akan dikirim ke fungsi

pangkat() melalui parameter variabel x dan y.

• Selama nilai y bukan 0 maka fungsi pangkat() akan

terus memanggil dirinya sendiri, dan nilai y akan

selalu berkurang 1 (y-1) sampai kondisi terpenuhi

dan perulangan dihentikan.


0! = 1

N! = N x (N-1)! Untuk N > 0

Scr notasi pemrograman dapat ditulis sebagai :

FAKT (0) = 1 .............................................. (1)

FAKT(N) = N * FAKT (N-1).................................... (2)

Contoh :

FAKT(5) = 5 * FAKT(4)

FAKT(4) = 4 * FAKT(3)

FAKT(3) = 3 * FAKT(2)

FAKT(2) = 2 * FAKT(1)

FAKT(1) = 1 * FAKT(0)

Nilai Awal

Faktorial

hitung 5!, maka dapat dilakukan secara rekursif

dgn cara :

5! = 5 * 4!

Scr rekursif nilai dr 4! Dpt dihitung kembali dgn 4 *

3!,

shg 5! Menjadi :5! = 5 * 4 * 3!

Scr rekursif nilai dr 3! Dpt dihitung kembali dgn 3 *

2!, shg 5! Menjadi : 5! = 5 * 4 * 3 * 2!

Scr rekursif nilai dr 2! Dpt dihitung kembali dgn 2 *

1, shg 5! Menjadi : 5! = 5 * 4 * 3 * 2 * 1 = 120.

Misal :

Program Faktorial

#Fungsi Pangkat secara Rekursif

def faktorial(a):
if a == 1:

return (a)

else:

return (a*faktorial(a-1))

bil = int(input("Masukan Bilangan :

"))

print("%d! = %d" % (bil,

faktorial(bil)))

Output Program:

Masukan Bilangan : 5

5! = 120

Masukan Bilangan : 6

6! = 720

Fungsi Faktorial

• Fungsi Faktorial adalah fungsi rekursif karena

memanggil fungsinya sendiri.

• Pada saat dijalankan program akan meminta

“memasukkan bilangan” pada variabel bil, kemudian

bilangan tersebut akan dikirim ke fungsi faktorial()

lewat parameter a.

• Selama nilai a tidak sama dengan 1 maka fungsi

faktorial akan terus memanggil dirinya sendiri.

Perulangan akan berhenti ketika nilai =1

Deret Fibonancy : 0,1,1,2,3,5,8,13,.........

Secara notasi pemrograman dapat ditulis sebagai :

Fibo (1) = 0 & Fibo (2) = 1 ....................................... (1)

Fibo (N) = Fibo (N-1) + Fibo (N-2) ................................. (2)


Contoh :

Fibo(5) = Fibo(4) + Fibo(3)

Fibo(4) = Fibo(3) + Fibo(2)

Fibo(3) = Fibo(2) + Fibo(1)

Nilai Awal

Fibonancy

#Fibonacci Secara Rekursif

def fibonacci(n):

if n == 0 or n == 1:

return n

else:

return (fibonacci(n-1) +

fibonacci(n-2))

x = int(input("Masukan Batas

Deret Bilangan Fibonacci : "))

print("Deret Fibonacci")

for i in range(x):

print(fibonacci(i),end=' ')

Program Deret Fibonancy

Output Program:

Masukan Batas Deret Bilangan

Fibonacci : 5

Deret Fibonacci

01123

Masukan Batas Deret Bilangan

Fibonacci : 8

Deret Fibonacci
0 1 1 2 3 5 8 13

Fungsi Fibonancy

• Fungsi fibonancy merupakan fungsi rekursif yang

memanggil dirinya sendiri.

• Bilangan fibonancy adalah bilangan yang memiliki

suku awal 0 dan 1, dan suku berikutnya adalah

penjumlahan dari dua suku sebelumnya.

• Fungsi fibonancy akan terus memanggil dirinya ketika

(nilai n) bukan bernilai 0 atau 1 dengan melakukan

proses penjumlahan (fibonacci(n-1) + fibonacci(n-2))

ABC

Tiang Asal Tiang Bantuan Tiang Tujuan

Jika n=1, maka langsung pindahkan saja piringan dr tiang A

ke tiang C & selesai.

Pindahkan n-1 piringan yg paling atas dr tiang A ke tiang B.

Pindahkan piringan ke n (piringan terakhir) dr tiang A

ketiang C

Pindahkan n-1 piringan dari tiang B ke tiang C.

Konsep Menara Hanoi

Menara (n,asal,bantu,tujuan)

Utk jml piringan n>1 dpt dibagi menjadi 3 notasi

penyelesaian

Menara (n-1, Asal,Tujuan, Bantu);

Menara (n, Asal, Bantu, Tujuan); atau Asal  Tujuan;

Menara (n-1, Bantu, Asal, Tujuan);

Langkah pemindahan tsb diatas dpt

diubah dengan notasi sbb:


MENARA(1,A,C,B) ....... A

B

MENARA(2,A,B,C) A  C ......... A

C

MENARA(1,B,A,C) ........B

C

MENARA(3,A,C,B) AB .......................…………...................… A

B

MENARA(1,C,B,A) .......C  A

MENARA(2,C,A,B)C  B ........................ C  B

MENARA(1,A,C,B) ................ A

B

MENARA AC ..........……..........................................................A  C

(4,A,B,C) MENARA(1,B,A,C) ...... B  C

MENARA(2,B,C,A) B  A ........B 

MENARA(1,C,B,A) ....... C  A

MENARA(3,B,A,C) B C ......................................... B  C

MENARA(1,A,C,B) ........ A 

MENARA(2,A,B,C) A  C ............... A 

MENARA(1,B,A,C) ........ B  C

Langkah Pemindahan Piringan

Ilustrasi diatas menghasilkan 15 langkah penyelesaian

dari permasalahan konsep menara Hanoi dgn jumlah

piringan sebanyak 4 buah18


Untuk Video konsep menara hanoi dapat dilihat pada:

https://www.mathsisfun.com/games/towerofhanoi.html

Rumus Langkah Pemindahan :

N = Jumlah Piringan

N-1

Lanjutan
PERTEMUAN 9

LARIK ATAU ARRAY

LARIK ATAU ARRAY

Larik atau Array

• Array adalah Jenis variabel yang dapat digunakan

untuk menyimpan sejumlah data dengan tipe yang sama

(Kadir, 2017).

Tujuan menggunakan Array:

Dapat melakukan loop atau pengulangan melalui elemen di

dalam array dengan mudah dan mengambil nilai yang

diperlukan hanya dengan menentukan nomor indeks.

• Array disebut juga tabel, vektor, atau larik

Setiap elemen dalam array diakses dengan membedakan

indeks/subscript arraynya.

Contoh 1:

A[1] = 3

A[2] = 5

A[3] = 10 dst

Contoh 2:

Array of integer [1,2,3,4,5] index dimulai dari 0 sampai

(n-1), dengan n adalah panjang array

LARIK ATAU ARRAY Lanjutan)

Dimensi Array terdiri dari:

1. Array Dimensi Satu

2. Array Dimensi Dua

LARIK ATAU ARRAY Lanjutan)

Kode program membuat dan menampilkan array:


import numpy as np

a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

print(a)

Hasil Program= [[ 1 2 3 4]

[ 5 6 7 8]

[ 9 10 11 12]]

1. Array Dimensi Satu

Bentuk Umum :

Nama_array[jumlah_elemen]

Contoh:

nilai_tugas [6]

jumlah elemen

nama array

Sebuah variabel yang menyimpan sekumpulan data yang

memiliki tipe sama dan elemen yang akan diakses hanya

melalui 1 indeks atau subskrip.

Array Dimensi Satu (Lanjutan)

Contoh Program Array dimensi 1:

Hasil program:

nilai_tugas=[70,80,90,"Keterangan Lulus"]

print("Nilai Tugas: \n",nilai_tugas)

Nilai Tugas:

[70, 80, 90, 'Keterangan Lulus']

2. Array Dimensi Dua

Contoh:

nama_array [2] [3]

jumlah kolom
jumlah baris

nama array

Bentuk Umum :

nama_aray[jumlah_elemen_baris] [jumlah_elemen_kolom]

• Array dimensi dua atau disebut sebagai array bersarang atau

nested list

• Array dimensi dua terdiri dari baris dan kolom

Array Dimensi Dua(Lanjutan)

Contoh program:

array=[["Teknik","Kedokteran","MIPA"],[1,2,3]]

print(array)

Hasil Program:

[['Teknik', 'Kedokteran', 'MIPA'], [1, 2, 3]]

Array Dimensi Dua (Lanjutan)

Pada contoh Array dimensi dua maka memperlihatkan

array dua dimensi dengan ukuran 2X3 dengan urutan

fakultas berdasarkan tingkat kesulitannya. Baris pertama

mewakili nama-nama fakultas dan kolom kedua mewakili

tingkat kesulitannya.

Teknik Kedokteran MIPA

123

Baris

Kolom

Matrik

• Matrik adalah Penyajian Data

• Istilah-istilah dalam matrik seperti:

Ordo (Dimensi matriks yang memuat baris dan kolom),


elemen, baris dan kolom

Contoh: m x n: a11 a12 a13……a1n

a21 a22 …….. a2n

am1 am2 ……… amn

212

301

200

Ordo 3x3

a11=2 a21=3 a31=2

a12=1 a22=0 a32=0

a13=2 a23=1 a33=0

elemen

Baris

Kolom

Hasil:

Matrik dalam Pemrograman Python

Dibuat seperti membuat Array 2 dimensi

Biasanya diakses dengan bentuk A[i][j]

dimana:

• A = nama matriks

• I = indeks baris

• J = indeks kolom

Terdapat 3 bagian utama pada matriks

berordo sama yaitu:

Diagonal Utama: dimana posisi baris

sama dengan posisi kolom

atau i==j
Segitiga Atas: dimana posisi baris lebih

kecil dari kolom atau i<j

Segitiga bawah: Dimana posisi baris lebih

besar dari kolom atau i>j

Array Dimensi Dua (Lanjutan)

Contoh:

Diberikan matriks A

sebagai berikut :

1111

0111

0011

0001

Perintah pokok yang digunakan

pada pengisian matriks A adalah :

#isi matriks 4x4

for i in range(4):

for j in range(4):

if i==j:

matriks[i][j]=1

if i<j:

matriks[i][j]=1

if i>j:

matriks[i][j]=0

#cetak bentuk matriks

for i in range(4):

print(matriks[i])
#deklarasi matrik 4x4

matriks=([0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0])

Kodingan Program

A[i,j] = 1, jika i <=j , A[i,j] = 0, jika i > j

Latihan

1. Diberikan matriks A sebagai berikut :

1234

0234

0034

0004

Perintah pokok yang digunakan pada pengisian

matriks A adalah :

Latihan

2. Diberikan matriks A sebagai berikut :

1000

2200

3330

4444

Perintah pokok yang digunakan pada pengisian matriks

A adalah

Latihan

3. Diberikan matriks A sebagai berikut :

1000

0100

0010

0001

Perintah pokok yang digunakan pada pengisian


matriks A adalah :

4. Diberikan algoritma sebagai berikut:

nilai = [1, 2, 3, 4 ]

for i in range(len(nilai)):

nilai[i]=2*i+1

print(nilai[i])

Algoritma di atas akan menghasilkan nilai…..

Latihan

Ketentuan Tugas

Tugas Kelompok (max 5 orang)

Pada pemrograman Python mengenal yang namanya

matrik. Dimana ada matrik penjumlahan dan pengurangan.

Buatkan dengan menggunakan pemrograman Python untuk:

1. Program penjumlahan matriks ordo 3x3

2. Program Pengurangan matriks ordo 3x3

Ket :

• Masing-masing kelompok dapat memilih salah satu dari

program di atas.

• Listing program & output dicetak

• Nama, Nim dan Kelas dicetak di listing program


PERTEMUAN 10

METODE DIVIDE AND CONQUER

Metode D And C

Divide

Memilah data nilai elemen–elemen dari rangkaian data menjadi

dua bagian dan mengulangi pemilahan hingga satu elemen terdiri

maksimal dua nilai (Sonita & Nurtaneo, 2015).

Conquer

Mengurutkan masing-masing data nilai elemen (Sonita &

Nurtaneo, 2015).

Prinsip Dasar

• Membagi n input menjadi k subset input yang berbeda

(1<k≤n).

• k subset input tersebut akan terdapat k subproblem.

• Setiap subproblem mempunyai solusi menjadi k subsolusi.

• Dari k subsolusi akan mendapatkan solusi yang optimal

Jika subproblem masih besar → D and C

Bentuk Umum Proses Metode D And C dpt dilihat sbb :

n input I

Subproblem I

Subsolusi I

Solusi Optimal

n input

n input II n input III n input K

Subsolusi II Subsolusi III Subsolusi K

Subprob. II Subprob. III Subprob. K

Metode D AND C Lanjutan


• Metode D AND C:

1. Merge Sorting

2. Quick Sorting

3. Binary Search

4. Teknik D and C

• Metode D AND C

Menggunakan teknik Rekursif yang membagi masalah

menjadi dua atau lebih submasalah dengan ukuran yang

sama. Masalah umum untuk teknik ini seperti pengurutan,

perkalian.

MERGE SORT

• Menggabungkan dua array yang sudah

terurut (Utami, 2017)

• Metode merge sort merupakan metode

yang membutuhkan fungsi rekursif untuk

penyelesaiannya.

Prinsip Kerja Merge Sort adalah :

• Kelompokkan deret bilangan kedalam 2 bagian, 4 bagian,

8 bagian, ......dst sampai tinggal sendiri

• Lakukan pengurutan sesuai dengan kelompok sebelumnya

• Lakukan pengurutan sejumlah pembagian

MERGE SORT (Lanjutan)

Contoh 1: 22 10 15 3 8 2

MERGE SORT

Awal 5 7 3 2 4

MERGE SORT (Lanjutan)

Contoh 2:
MERGE SORT

Awal 5 7 3 2 4

Bagi 2 5 7 3 2 4

MERGE SORT (Lanjutan)

MERGE SORT

Awal 5 7 3 2 4

Bagi 2 5 7 3 2 4

Bagi 5 7 3 2 4 4

MERGE SORT (Lanjutan)

MERGE SORT

Awal 5 7 3 2 4

Bagi 2 5 7 3 2 4

Bagi 5 7 3 2 4 4

Bagi 5 7 3 2 4 8

MERGE SORT (Lanjutan)

MERGE SORT

Awal 5 7 3 2 4

Bagi 2 5 7 3 2 4

Bagi 5 7 3 2 4 4

Bagi 5 7 3 2 4 8

Sorting 1 5 7 3 2 4

MERGE SORT (Lanjutan)

MERGE SORT

Awal 5 7 3 2 4

Bagi 2 5 7 3 2 4

Bagi 5 7 3 2 4 4

Bagi 5 7 3 2 4 8
Sorting 1 5 7 3 2 4

Sorting 2 3 5 7 2 4

MERGE SORT (Lanjutan)

MERGE SORT

Awal 5 7 3 2 4

Bagi 2 5 7 3 2 4

Bagi 5 7 3 2 4 4

Bagi 5 7 3 2 4 8

Sorting 1 5 7 3 2 4

Sorting 2 3 5 7 2 4

Sorting 3 2 3 4 5 7

MERGE SORT (Lanjutan)

def mergeSort(X):

print("Bilangan diurutkan ",X)

if len(X)>1:

mid = len(X)//2

lefthalf = X[:mid]

righthalf = X[mid:]

mergeSort(lefthalf)

mergeSort(righthalf)

i=j=k=0

while i < len(lefthalf) and j < len(righthalf):

if lefthalf[i] < righthalf[j]:

X[k]=lefthalf[i]

i=i+1

else:

X[k]=righthalf[j]
j=j+1

k=k+1

while i < len(lefthalf):

X[k]=lefthalf[i]

i=i+1

k=k+1

while j < len(righthalf):

X[k]=righthalf[j]

j=j+1

k=k+1

print("Merging ",X)

X = [22,10,15,3,8,2]

mergeSort(X)

print(X) Hasil Program:

MERGE SORT (Lanjutan)

• Merupakan metode yang tercepat

• Quicksort diperkenalkan oleh

C.A.R. Hoare. Quicksort partition

exchange sort, karena konsepnya

membuat bagian-bagian, dan sort

dilakukan perbagian.

• Pada algoritma quick sort,

pemilihan pivot merupaka hal

yang menentukan apakah

algoritma quicksort tersebut akan

memberikan performa terbaik atau


terburuk (Nugraheny, 2018).

QUICK SORTING

QUICK SORTING (Lanjutan)

Misal ada N elemen dalam keadaan urut turun, adalah

mungkin untuk mengurutkan N elemen tersebut dengan

N/2 kali, yakni pertama kali menukarkan elemen paling kiri

dengan paling kanan, kemudian secara bertahap menuju

ke elemen yang ada di tengah. Tetapi hal ini hanya bisa

dilakukan jika tahu pasti bahwa urutannya adalah urut

turun.

Secara garis besar metode ini dijelaskan sebagai berikut,

Misal: akan mengurutkan vektor A yang mempunyai N

elemen. Pilih sembarang dari vektor tsb, biasanya elemen

pertama misalnya X. Kemudian semua elemen tersebut

disusun dengan menempatkan X pada posisi J sedemikian

rupa sehingga elemen ke 1 sampai ke j-1 mempunyai nilai

lebih kecil dari X dan elemen ke J+1 sampai ke N

mempunyai nilai lebih besar dari X.

QUICK SORTING (Lanjutan)

Pada langkah berikutnya, proses diatas diulang pada kedua

subvektor, sehingga akan mempunyai empat subvektor.

Proses diatas diulang pada setiap subvektor sehingga

seluruh vektor semua elemennya menjadi terurutkan.

Contoh 1: 23 45 12 24 56 34 27 23 16 12 23 16 23 45 24 56 34 27 Subvektor Kiri Subvektor Kanan 12


23 16 23 24 34 27 45 56 12 16 23 23 24 34 27 45 56 12 16 23 23 24 27 34 45 56

Dengan demikian mempunyai dua buah subvektor,

subvektor pertama nilai elemennya lebih kecil dari X,

subvektor kedua nilai elemennya lebih besar dari X.


QUICK SORTING (Lanjutan)

Contoh 2 Pilih vektor X → elemen pertama

Iterasi 1

22 10 15 3 8 2

22

10 15 3 8 2 22

QUICK SORTING (Lanjutan)

Iterasi 2

10 15 3 8 2 22

10

3 8 2 10 15 22

Pilih lagi vektor X berikutnya

Iterasi 3

3 8 2 10 15 22

2 3 8 10 15 22

Pilih lagi vektor X berikutnya

BINARY SEARCH

Binary Search (Untuk data yang sudah terurut)

Digunakan mencari sebuah data pada himpunan data-data

yang tersusun secara urut, yaitu data yang telah diurutkan

dari besar ke kecil/sebaliknya. Proses dilaksanakan pertama

kali pada bagian tengah dari elemen himpunan, jika data

yang dicari ternyata < elemen bagian atasnya, maka

pencarian dilakukan dari bagian tengah ke bawah

Algoritma Binary Search

Binary Search (Lanjutan)


1. Low = 1 , High = N

2. Ketika Low <= High Maka kerjakan langkah No .3, Jika

tidak Maka kerjakan langkah No.7

3. Tentukan Nilai Tengah dengan rumus

(Low + High) Div 2

4. Jika X < Nilai Tengah, Maka High = Mid –1, Ulangi

langkah 1

5. Jika X > Nilai Tengah, Maka Low = Mid +1, Ulangi

langkah 1

6. Jika X = Nilai Tengah, Maka Nilai Tengah = Nilai yang

dicari

7. Jika X > High Maka Pencarian GAGAL

Contoh:

Data A = { 1, 3, 9, 11, 15, 22, 29, 31, 48 }

Dicari 3

Langkah Pencariannya:

Langkah 1: Low = 1 dan High = 9

Langkah 2: Low <= High (jika YA ke L-3, jika TDK ke L-7)

Langkah 3: Mid = (1+9) div 2 = 5 yaitu 15

Langkah 4: 3 < 15, maka High = 5 – 1 = 4 yaitu 11

Langkah 1: Low = 1 dan High = 4

Langkah 2: Low <= High

Langkah 3: Mid = (1+4) div 2 = 2 yaitu 3

Langkah 4: 3 < 3, ke langkah 5

Langkah 5: 3 > 3, ke langkah 6

Langkah 6: 3 = 3 (Pencarian berhasil)

Binary Search (Lanjutan)


Binary Search (Lanjutan)

def BinSearch(data, key):

awal = 1

akhir = len(data) + 1

ketemu = False

while (awal <= akhir) and not ketemu:

tengah = int((awal + akhir)/ 2)

if key == data[tengah]:

ketemu = True

print('data', key, 'ditemukan diposisi', tengah+1)

elif key < data[tengah]:

akhir = tengah - 1

else:

awal = tengah + 1

if not ketemu:

print('data tidak ditemukan')

data = [1, 3, 9, 11, 15, 22, 29, 31, 48 ]

BinSearch(data, 3)

Hasil Program:

data 3 ditemukan diposisi 2

Kodingan Program Binary Search (Lanjutan)

Teknik D AND C

Teknik D AND C

• Dengan Prinsip Dasar Metode Divide & Conquer akan

dapat dipecahkan suatu permasalahan proses Searching

elemen Max&Min dengan teknik D and C

• Menghasilkan solusi optimal menemukan nilai Maximum


dan Minimum

• Contoh :

Tentukan elemen MaxMin suatu array A yang terdiri dari

9 bilangan :

A[1] = 22, A[4] = -8, A[7] = 17

A[2] = 13, A[5] = 15, A[8] = 31

A[3] = -5, A[6] = 60, A[9] = 47

Penyelesaian Teknik D and C

1,5

4,5

1,9

6,9

1,2 3,3

1,3 6,7 8,9

Teknik D AND C (Lanjutan)

A= {22,13, -5, -8, 15, 60, 17, 31, 47}

Penyelesaian Teknik D AND C

Lalu Proses tree call dr setiap elemen yang ditunjuk pada

bagan tree tersebut diatas. Dengan cara, membalik terlebih

dahulu posisi tree dari bawah ke atas. Lalu mengisinya

dengan elemen-elemnnya sesuai dengan bagan tree.

Perhatikan bagan tree call ini :

1,2 22,13 3,3 -5,-5

1,3 22,-5 4,5 -8,15 6,7 60,17 8,9 31,47

1,5 22,-8

6,9 60,17

1,9 60,-8
Teknik D AND C (Lanjutan)

A = { 22, 13, -5, -8, 15, 60, 17, 31, 47 }

Posisi penggabungan  Max, Min

Tugas Kelompok

• Ada sebuah data dengan urutan sebagai berikut:

25, 20, 15, 3, 7, 2, 1

Bagaimana hasil pengurutan data diatas dengan metode D

AND C Merge Sort, dan Quick Sort?

• Ada sebuah deretan angka 3 6 9 13 16 26 38 58

menggunakan Binary Search tentukan untuk pencarian data

13, 16 dan 10?

• Soal dikerjakan secara berkelompok


PERTEMUAN 11

METODE SORTING

METODE SORTING

2. Macam-Macam Metode Sorting:

1. Selection Sort

2. Bubble Sort

3. Insertion Sort

1. Pengertian Sorting

Proses pengaturan sederetan data ke dalam suatu urutan

atau susunan urutan tertentu. Data yang diurutkan dapat

berupa data bilangan, data karakter maupun data string

(Sitorus, 2015).

Hal yang mempengaruhi Kecepatan Algoritma Sorting:

Jumlah Operasi Perbandingan & Jumlah Operasi pemindahan Data

SELECTION SORT

Teknik pengurutan dengan cara

pemilihan elemen atau proses

kerja dengan memilih elemen

data terkecil untuk kemudian

dibandingkan & ditukarkan

dengan elemen pada data awal,

dst s/d seluruh elemen sehingga

menghasilkan pola data yang

telah disorting.

SELECTION SORT (Lanjutan)

Prinsip Kerja dari Teknik Selection Sort ini adalah :

1. Pengecekan dimulai data ke-1 sampai dengan


data ke-n

2. Tentukan index bilangan dengan nilai terkecil dari

data bilangan tersebut

3. Tukar bilangan pada index tersebut dengan

bilangan pada posisi awal iterasi (I = 0 untuk

bilangan pertama) dari data bilangan tersebut

4. Ulangi langkah diatas untuk bilangan berikutnya

(I= I+1) sampai n-1 kali

Contoh : 22 10 15 3 8 2

Iterasi 1

123456

Langkah 1 : 22 10 15 3 8 2

Langkah 2 : 22 10 15 3 8 2

Langkah 3 : 2 10 15 3 8 22

Langkah 4 : Ulangi langkah 2 dan 3

SELECTION SORT (Lanjutan)

Iterasi 2

Langkah 1 : 2 10 15 3 8 22

Langkah 2 : 2 10 15 3 8 22

Langkah 3 : 2 3 15 10 8 22

Langkah 4 : Ulangi langkah 2 dan 3

SELECTION SORT (Lanjutan)

Iterasi 3

Langkah 1 : 2 3 15 10 8 22

Langkah 2 : 2 3 15 10 8 22

Langkah 3 : 2 3 8 10 15 22

Langkah 4 : Ulangi langkah 2 dan 3


Iterasi 4

Langkah 1 : 2 3 8 10 15 22

Langkah 2 : 2 3 8 10 15 22

Langkah 3 : 2 3 8 10 15 22

Langkah 4 : Ulangi langkah 2 dan 3

Iterasi 5

Langkah 1 : 2 3 8 10 15 22

Langkah 2 : 2 3 8 10 15 22

Langkah 3 : 2 3 8 10 15 22

Langkah 4 : Ulangi langkah 2 dan 3

Iterasi 6

Langkah 1 : 2 3 8 10 15 22

Langkah 2 : 2 3 8 10 15 22

Langkah 3 : 2 3 8 10 15 22

Langkah 4 : Ulangi langkah 2 dan 3

SELECTION SORT (Lanjutan)

ilustrasi

22 10 15 3 8 2

22 10 15 3 8 2

2 10 15 3 8 22

2 3 15 10 8 22

2 3 8 10 15 22

2 3 8 10 15 22

SELECTION SORT (Lanjutan)

Contoh Program:

def SelectionSort(val):

for i in range(len(val)-1,0,-1):
Max=0

for l in range(1,i+1):

if val[l]>val[Max]:

Max = l

temp = val[i]

val[i] = val[Max]

val[Max] = temp

Angka = [22,10,15,3,8,2]

SelectionSort(Angka)

print(Angka)

Hasil dari program:

SELECTION SORT (Lanjutan)

BUBBLE SORTING

• Metode pengurutan dengan

membandingkan data nilai elemen

yang sekarang dengan data nilai

elemen-elemen berikutnya.

• Pembandingan elemen dapat dimulai

dari awal atau mulai dari paling akhir.

Apabila elemen yang sekarang lebih

besar (untuk urut menaik) atau lebih

kecil (untuk urut menurun) dari elemen

berikutnya, maka posisinya ditukar,

tapi jika tidak maka posisinya tetap

(Harumy et al., 2016).

BUBBLE SORT (Dari Depan)

• Prinsip Kerja dari Bubble Sort adalah :


1. Pengecekan mulai dari data ke-1 sampai data ke-n

2. Bandingkan data ke-1 dengan data sebelahnya (ke-2)

3. Jika lebih besar maka pindahkan bilangan tersebut

dengan bilangan yang ada didepannya

4. Jika lebih kecil maka tidak terjadi pemindahan

5. Ulangi langkah 1 s/d 4 sebanyak n-1 kali dengan

jumlah data dikurang 1 setiap iterasi

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

57324

Tidak Tukar

Awal

Iterasi 1

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

57324

Tukar

Awal
Iterasi 1 5 3

77

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

57324

Tukar

Awal

Iterasi 1 5 3 2

77

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

57324

Tukar

Awal

Iterasi 1 3 2 4 7

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7

Iterasi 2 7

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7

Tukar
Iterasi 2

37

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7

Tukar

Iterasi 2

327

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7

Tukar

Iterasi 2

32457

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7

Iterasi 2 3 2 4 5 7

Iterasi 3 5 7

BUBBLE SORTING lanjutan


BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 3 2 4 7

Iterasi 2

32457

Tukar

Iterasi 3 2 5 7

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7

Iterasi 2 3 2 4 5 7

Tidak Tukar

Iterasi 3 2 3 4 5 7

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7

Iterasi 2 3 2 4 5 7

Iterasi 3 2 3 4 5 7

Iterasi 4 4 5 7

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4
Iterasi 1 5 3 2 4 7

Iterasi 2 3 2 4 5 7

Iterasi 3

23457

Tidak Tukar

Iterasi 4

23457

BUBBLE SORTING lanjutan

HASIL BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 3 2 4 7

Iterasi 2 3 2 4 5 7

Iterasi 3 2 3 4 5 7

Iterasi 4 2 3 4 5 7

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

• Prinsip Kerja dari Bubble Sort adalah :

1. Pengecekan mulai dari data ke-n sampai data ke-1

2. Bandingkan data ke-n dengan data sebelahnya (ke-(n-1))

3. Jika lebih kecil maka pindahkan bilangan tersebut dengan

bilangan yang ada didepannya

4. Jika lebih besar maka tidak terjadi pemindahan

5. Ulangi langkah 1 s/d 4 sebanyak n-1 kali dengan jumlah

data dikurang 1 setiap iterasi

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)


Awal 5 7 3 2 4

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1

Tidak Tukar

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1

Tukar

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1

Tukar

4
2

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1

Tukar

2573

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2

Tidak Tukar

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)


Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2

Tukar

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2

Tukar

357

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2 3 5 7 4

Iterasi 3 2 3

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4
Iterasi 2 2 3 5 7 4

Iterasi 3 2 3

Tukar

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2 3 5 7 4

Iterasi 3 2 3

Tukar

45

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2 3 5 7 4

Iterasi 3 2 3 4 5 7

Iterasi 4 2 3 4

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2 3 5 7 4
Iterasi 3 2 3 4 5 7

Iterasi 4 2 3 4

Tidak Tukar

57

BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4

Iterasi 2 2 3 5 7 4

Iterasi 3 2 3 4 5 7

Iterasi 4 2 3 4 5 7

BUBBLE SORTING lanjutan

Contoh program:

def BubbleSort(X):

for i in range(len(X)-1,0,-1):

Max=0

for l in range(1,i+1):

if X[l]>X[Max]:

Max = l

temp = X[i]

X[i] = X[Max]

X[Max] = temp

Hasil = [22,10,15,3,8,2]

BubbleSort(Hasil)

print(Hasil)

Hasil program:

BUBBLE SORTING (Lanjutan)


INSERTION SORT

• Pengurutan data yang

membandingkan data dengan dua

elemen data pertama, kemudian

membandingkan elemen-elemen data

yang sudah diurutkan, kemudian

perbandingan antara data tersebut

akan terus diulang hingga tidak ada

elemen data yang tersisa

(Rahayuningsih, 2016).

• Mirip dengan cara mengurutkan kartu,

perlembar yang diambil & disisipkan

(insert) ke tempat yang seharusnya.

INSERTION SORT (Lanjutan)

Prinsip Kerja Insertion Sort adalah:

1. Index awal adalah data ke-2

2. Pengecekan mulai dari data ke-1 sampai data ke-(index-1)

3. Bandingkan data pada posisi index dengan data

pengecekan

4. Jika data pada posisi index lebih kecil maka data tersebut

dapat disisipkan sesuai dengan posisisi saat pengecekan

kemudian geser data sisanya

5. Ulangi langkah diatas untuk index berikutnya (I=I+1)

sampai n-1 kali

INSERTION SORT Lanjutan

Awal 5 7 3 2 4

INSERTION SORT
INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4

Iterasi 2

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4

Iterasi 2 2 4

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4

Iterasi 2 3 5 7 2 4
INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4

Iterasi 2 3 5 7 2 4

Iterasi 3

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4

Iterasi 2 3 5 7 2 4

Iterasi 3 4

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4

Iterasi 2 3 5 7 2 4

Iterasi 3

23574

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4
Iterasi 2 3 5 7 2 4

Iterasi 3 2 3 5 7 4

Iterasi 4

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Index

Iterasi 1 5 7 3 2 4

Iterasi 2 3 5 7 2 4

Iterasi 3 2 3 5 7 4

Iterasi 4 2 3 4 5 7

INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Iterasi 1 5 7 3 2 4

Iterasi 2 3 5 7 2 4

Iterasi 3 2 3 5 7 4

Iterasi 4 2 3 4 5 7

INSERTION SORT Lanjutan

Contoh program:

def InsertionSort(val):

for index in range(1,len(val)):

a = val[index]

b = index

while b>0 and val[b-1]>a:

val[b]=val[b-1]

b = b-1
val[b]=a

Angka = [22,10,15,3,8,2]

InsertionSort(Angka)

print(Angka)

Hasil program:

INSERTION SORT (Lanjutan)

KESIMPULAN METODE SORTING

• Bubble sorting membutuhkan waktu komputasi paling

lama.

• Insertion sort dan Selection sort memilki kompleksitas

yang sama dengan Bubble sort, tetapi waktunya lebih

cepat.
PERTEMUAN 12

Teknik Searching

dan

Pengantar Analisis Algoritma

TEKNIK SEARCHING

2. Teknik Searching (Pencarian)

a. Teknik Linear/Sequential Search

b. Teknik StraitMAXMIN

1. Pengertian Teknik Searching (Pencarian)

Teknik dalam memilih dan menyeleksi sebuah elemen dari

beberapa elemen yang ada.

TEKNIK LINEAR/SEQUENTIAL SEARCH

a. Linear/Sequential Search (Untuk data yang belum

terurut/yang sudah terurut )

Pencarian yang dimulai dari record-1 diteruskan ke record

selanjutnya yaitu record-2, ke-3,..., sampai diperoleh isi

record sama dengan informasi yang dicari (Nilai X).

Kecepatan Waktu Pencarian tergantung pada: Jumlah

elemen data dan posisi data yang dicari

TEKNIK LINEAR/SEQUENTIAL SEARCH (Lanjutan)

Algoritma :

1. Tentukan I = 1

2. Ketika Nilai (I) <> X Maka Tambahkan I = I +1

3. Ulangi langkah No. 2 sampai Nilai(I) = X atau

I>N

4.Jika I = N+1 Maka Cetak “Pencarian Gagal”

selain itu Cetak “ Pencarian Sukses “


Contoh 1:

Data A = { 10, 4, 9, 1, 15, 7 }

Dicari 15

Langkah pencariannnya:

Langkah 1: A[1] = 10

Langkah 2: 10 <> 15, maka A[2] = 4

Langkah 3: ulangi langkah 2

Langkah 2: 4 <> 15, maka A[3] = 9

Langkah 2: 9 <> 15, maka A[4] = 1

Langkah 2: 1 <> 15, maka A[5] = 15

Langkah 2: 15 = 15

Langkah 4: “Pencarian Sukses”

TEKNIK LINEAR/SEQUENTIAL SEARCH (Lanjutan)

TEKNIK LINEAR/SEQUENTIAL SEARCH (Lanjutan)

Contoh 2

Apabila ditemukan kondisi:

Nilai (I) = N + 1, maka pencarian tidak ditemukan atau gagal.

Dikarenakan jumlah elemen adalah N, N + 1 artinya data

yang dicari bukan merupakan elemen data dari N.

Kodingan Program Teknik Sequential/Linier Search

def seqSearch(data, key):

i=0

pos = i + 1

while(i<len(data)):

if data[i] == key:

break

i+=1
pos=i+1

if pos <= len(data):

print('data', key, 'ditemukan di posisi’, pos)

else:

print('data tidak ditemukan')

return pos

data=[10, 4, 9, 1, 15, 7]

seqSearch(data,15)

Hasil Program:

data 15 ditemukan di posisi 5

TEKNIK LINEAR/SEQUENTIAL SEARCH (Lanjutan)

Teknik Pencarian MAXMIN

b. Teknik STRAITMAXMIN

• Menentukan/mencari elemen max&min. Pada Himpunan

yang berbentuk array linear.

• Analisis waktu tempuh/time complexity yang digunakan

untuk menyelesaikan pencarian hingga mendapatkan

tingkat kompleksitas yang terbagi atas best case,

worst case dan average case

Algoritma untuk mencari elemen MaxMin dalam

pemrograman Python :

Teknik STRAITMAXMIN (Lanjutan)

def STRAITMAXMIN(A,n):

max = A[0]

min = A[0]

for i in range(1,n):

if A[i] > max:


max = A[i]

else

if A[i] < min:

min = A[i]

print("Max =", max,", Min =",min)

Teknik STRAITMAXMIN (Lanjutan)

Mulai

Selesai

max=A[0]

min=A[0]

i=1

i<n

A[i]>max A[i]<min

max=A[i] min=A[i]

i+=1

Cetak max & min

*Keterangan

B = Benar

S = Salah

BEST CASE

• Pada kasus ini keadaan tercapai jika elemen pada


himpunan A disusun secara increasing (menaik).

• Dengan perbandingan waktu n - 1 kali satuan operasi.

• Kondisi pencarian yang tercepat/terbaik

Contoh :

Terdapat himpunan A yang berisi 4 buah bilangan telah

disusun secara increasing dengan A[0]=2, A[1]=4, A[2]=5,

A[3]=10.

Tentukan/cari Bilangan Max&Min serta jumlah operasi

perbandingan yang dilakukan.

BEST CASE (Lanjutan)

Mulai

Selesai

max=A[0]

min=A[0]

i=1

i<n

A[i]>max A[i]<min

max=A[i] min=A[i]

i+=1

Cetak max & min

*Keterangan

B = Benar

S = Salah

P = Perbandingan

B
S

2 4 5 10

Max 4 5 10

Min 2 2 2

P111

Total Perbandingan = 3

BEST CASE (Lanjutan)

Penyelesaian Best Case:

• Untuk masalah tersebut dapat digunakan procedure

STRAITMAXMIN yang menghasilkan bilangan Min=2 &

bilangan Max=10,

• Operasi perbandingan data mencari bilangan MaxMin

dari himpunan tersebut (n-1)=3 kali operasi

perbandingan.

WORST CASE

• Pada kasus ini terjadi jika elemen dalam himpunan

nilai yang terbesar berada di paling depan atau

disusun secara decreasing (menurun).

• Dengan Oprasi perbandingan sebanyak 2(n-1) kali

satuan operasi.

• Kondisi Pencarian Terlama/Terburuk.

Contoh :

Mencari elemen MaxMin & jumlah oprasi

perbandingan yang dilakukan terhadap himpunan A

yang disusun decreasing.


A[0]=80, A[1]=21, A[2]=6, A[3]=-10

Mulai

Selesai

max=A[0]

min=A[0]

i=1

i<n

A[i]>max A[i]<min

max=A[i] min=A[i]

i+=1

Cetak max & min

*Keterangan

B = Benar

S = Salah

P = Perbandingan

80 21 6 -10

Max 80 80 80

Min 21 6 -10

P222

Total Perbandingan = 6

WORST CASE (Lanjutan)


• Untuk masalah tersebut dengan proses STRAITMAXMIN

adalah elemen max=80 & elemen min=-10,

• Operasi perbandingan untuk elemen Maxmin tersebut

adalah 2(4-1) = 6 kali satuan operasi.

Penyelesaian Worst Case

WORST CASE (Lanjutan)

AVERAGE CASE

• Digunakan untuk memprediksi jumlah langkah/operasi jika pencarian

elemen MaxMin dilakukan pada elemen dalam himpunan yang

tersusun secara acak (tidak decreasing/tidak increasing).

• Jumlah prediksi operasi Perbandingan yang dilakukan adalah ratarata waktu tempuh best case &
worst case, yaitu:

• Kondisi Pencarian acak

Contoh:

Pada himpuan A yg berisi { 5,-4, 9, 7 } dilakukan pencarian elemen

max & min dengan menggunakan proses STRAITMAXMIN.

Berapa elemen maxmin yang didapatkan & jumlah oprasi

perbandingan yang dilakukan.

Mulai

Selesai

max=A[0]

min=A[0]

i=1

i<n

A[i]>max A[i]<min

max=A[i] min=A[i]

i+=1

Cetak max & min


*Keterangan

B = Benar

S = Salah

P = Perbandingan

5 -4 9 7

Max 5 9 9

Min -4 -4 -4

P212

Total Perbandingan = 5

AVERAGE CASE (Lanjutan)

Contoh: A = { 5, -4, 9, 7 }

Operasi Perbandingan : 5

*Penyelesaian kasus acak tidak bisa menggunakan rumus

dikarenakan hasil perbandingan akan berada diantara Best Case dan

Worst Case

Best Case < Average Case < Worst Case

Penyelesaian kasus acak

Dimana menggunakan rumus:

3/2 n - 3/2 = 3/2*4 - 3/2 = 4,5

*note

Penggunaan average case digunakan untuk membandingkan algoritma


dimana jika terjadi perbedaan nilai yang lebih baik antara Best Case dan

Worst Case seperti merge sort dan quick sort. Dimana best case lebih baik

quick sort namun worst case lebih baik merge sort sehingga untuk

menentukan algoritma terbaik dilakukan perbandingan average case (Tidak

dibahas karena merupakan analisis algoritma yang lebih mendalam)

AVERAGE CASE (Lanjutan)

• Setiap Algoritma bisa dianalis langkah operasi yang

dilakukan untuk menentukan kompleksitasnya

• Untuk menyatakan suatu algoritma lebih baik bisa

dilakukan dengan membandingkan kompleksitas

algoritma tersebut secara menyeluruh

• Jika terjadi perbedaan nilai yang lebih baik antara Best

Case dan Worst Case, maka untuk menentukan

algoritma terbaik bisa dilakukan perbandingan Average

Case

Kesimpulan Analisis Algoritma


PERTEMUAN 13

METODE GREEDY

METODE GREEDY

• Greedy diambil dari bahasa inggris berarti rakus, tamak, loba,

serakah.

• Prinsip greedy: “Take What You Can Get Now!”.

• Algoritma greedy membentuk solusi langkah perlangkah (step

by step).

• Greedy adalah strategi pencarian untuk masalah optimasi

berbasis prinsip: pada setiap tahap, pilih solusi paling baik.

Dengan harapan, semua tahapan ini akan menemukan solusi

terbaik untuk masalah tersebut. Algoritma greedy termasuk

sederhana dan tidak rumit (Santosa and Ai, 2017).

METODE GREEDY (Lanjutan)

Untuk mendapatkan solusi optimal dari permasalahan yang

mempunyai dua kriteria yaitu:

1. Fungsi Tujuan/Utama

2. Nilai pembatas (constrain)

Proses Kerja Metode Greedy:

Untuk menyelesaikan suatu permasalahan dengan n input

data yang terdiri dari beberapa fungsi pembatas & 1 fungsi

tujuan yang diselesaikan dengan memilih beberapa solusi

yang mungkin (feasible solution/feasible sets), yaitu bila

telah memenuhi fungsi tujuan/obyektif.

Contoh Persoalan Optimasi:

(Masalah Penukaran Uang):

Diberikan uang senilai A. Tukar A dengan koin-koin uang yang


ada. Berapa jumlah minimum koin yang diperlukan untuk

penukaran tersebut?

METODE GREEDY (Lanjutan)

Contoh 1: tersedia banyak koin 1, 5, 10, 25

• Uang senilai A = 32 dapat ditukar dengan banyak cara

berikut:

32 = 1 + 1 + … + 1 (32 koin)

32 = 5 + 5 + 5 + 5 + 10 + 1 + 1 (7 koin)

32 = 10 + 10 + 10 + 1 + 1 (5 koin)

… dst

• Minimum: 32 = 25 + 5 + 1 + 1 (4 koin)

METODE GREEDY (Lanjutan)

Metode GREEDY digunakan dalam penyelesaian

masalah-masalah :

1. Optimal On Tape Storage Problem

2. Knapsack Problem

1. Optimal On Tape Storage Problem

Permasalahan bagaimana mengoptimalisasi

storage/memory dalam komputer agar data yg

disimpan dapat termuat dengan optimal.

Misalkan terdapat n program yang akan disimpan

didalam pita (tape). Pita tersebut mempunyai

panjang maksimal sebesar L, masing-masing

program yang akan disimpan mempunyai panjang

L1

,L2

,L3
...,Ln

. Cara penyimpanan adalah terurut

(sequential).

METODE GREEDY (Lanjutan)

Optimal On Tape Storage Problem (Lanjutan)

Penerapan dari Optimal On Tape Storage Problem adalah:

 Terdapat pada Pita Kaset

 Media penyimpanan pada abad 19

 Sebelum era digitalisasi pada abad 20

nj

Fungsi tujuan: Optimal Storage = D(I) =   l

ik

j=1 k=1

Fungsi Pembatas : Mean Retrieval Time (MRT) =  t

/n

j=1

Kriteria Greedy pada Optimal On Tape Storage Problem:

Contoh soal:

Penyimpanan pada pita kaset terdapat 3 file lagu dengan

durasi waktu 5 menit,10 menit, 3 menit).

Tentukan urutannya agar dapat menghemat media

penyimpanannya?

Optimal On Tape Storage Problem (Lanjutan)

Penyelesaiannya:
1. Menemukan 2 kriteria greedy

Fungsi tujuan: optimalisasi media penyimpanan

Fungsi pembatas : waktu akses file (Mean Retrieval Time)

2. Mencari Feasible Solution

Alternatif solusi yang dapat digunakan untuk memperoleh

optimal solution

Optimal On Tape Storage Problem (Lanjutan)

Jumlah Feasible Solution untuk 3 buah file input adalah:

N Faktorial dimana N: Jumlah File

3!=3x2x1=6

3. Menghitung Fungsi Tujuan & Fungsi Pembatas

Ordering Panjang D (I) MRT

1,2,3 5,10,3 5 + (5+10) + (5+10+3) = 38 38/3=12,66

1,3,2 5,3,10 5 + (5+3) + (5+3+10) = 31 31/3=10,33

2,1,3 10,5,3 10 + (10+5) + (10+5+3) = 43 43/3=14,33

2,3,1 10,3,5 10 + (10+3) + (10+3+5) = 41 41/3=13,66

3,1,2 3,5,10 3 + (3+5) + (3+5+10) = 29 29/3=9,66

3,2,1 3,10,5 3 + (3+10) + (3+10+5) = 34 34/3=11,33

Optimal On Tape Storage Problem (Lanjutan)

Dari tabel tersebut, didapat susunan/order

yang optimal,sbb :

susunan pertama untuk program ke tiga

susunan kedua untuk program kesatu

susunan ketiga untuk program kedua

(L1

,L2

,L3
) = (5,10,3)

Kunci dari permasalahan Optimal On Tape Storage

Problem adalah Susunan File dari ukuran Kecil Kebesar

(Increasing)

2. KNAPSACK Problem

METODE GREEDY (Lanjutan)

• Knapsack adalah tas atau karung

• Karung digunakan memuat objek,

tentunya tidak semua objek dapat

ditampung di dalam karung.

• Karung hanya dapat menyimpan

beberapa objek dengan total

ukurannya (weight) lebih kecil atau

sama dengan ukuran kapasitas

karung.

Ilustrasi Knapsack Problem

Gambar ilustrasi terdapat tas berkapasitas 15kg, ada 5

barang dengan berat dan keuntungannya masing-masing.

Persoalannya adalah barang mana saja yang harus

dimasukan ke dalam tas (Aristi, 2015)..

Kasus:

• Terdapat n obyek (Xi;i=1,2,3,....n)

• Masing-masing mempunyai berat (weight)/Wi

• Masing-masing memiliki nilai (profit)/Pi yang

berbeda-beda.

KNAPSACK Problem (Lanjutan)

Masalah KNAPSACK Problem


Bagaimana obyek-obyek tersebut dimuat/dimasukan

kedalam ransel (knapsack) yang mempunyai kapasitas

max=M.

Sehingga timbul permasalahan sbb:

Bagaimana memilih obyek yang akan dimuat dari n

obyek yang ada sehingga nilai obyek termuat

jumlahnya sesuai dengan kapasitas( M)

Jika semua obyek harus dimuat ke dalam ransel maka

berapa bagian dari setiap obyek yang ada dapat

dimuat ke dalam ransel sedemikian sehingga nilai

kumulatif max & sesuai dengan kapasitas ransel ?

KNAPSACK Problem (Lanjutan)

Penyelesaian Knapsack Problem dapat dilakukan

dengan:

1. Secara Matematika

2. Kriteria Greedy

3. Algoritma Pemrograman Greedy

KNAPSACK Problem (Lanjutan)

1. Penyelesaian Knapsack Secara Matematika

Fungsi tujuan = fungsi utama/obyektif

Fungsi yang menjadi penyelesaian permasalahan dengan

mendapatkan solusi yang optimal.

Solusi dimaksud = menemukan nilai/profit yangg

maksimal untuk jumlah obyek yang dimuat dalam ransel

sehingga sesuai kapasitas.

Fungsi Tujuan Maksimum :  Pi Xi


i=1

KNAPSACK Problem (Lanjutan)

Penyelesaian Knapsack Secara Matematika (Lanjutan)

Fungsi pembatas = fungsi subyektif

Fungsi yang bertujuan untuk memberikan batas maksimal

dari setiap obyek untuk dapat dimuat dalam ransel sehingga

kapasitasnya tidak melebihi dari jumlah maksimal daya

tampung ransel.

Fungsi Pembatas :  Wi Xi  M

i=1

dimana : 0  Xi  1; Pi >0;Wi>0

Catatan : karena dengan menggunakan Matematika sangat

sulit dan rumit maka tidak dibahas lebih mendalam.

2. Penyelesaian Dengan Kriteria Greedy

Konsep dari kriteria yang ditawarkan oleh metode Greedy

yaitu :

Pilih obyek (barang) dengan nilai Pi maximal atau

terbesar

Pilih obyek (barang) dengan berat Wi minimal dahulu.

Pilih obyek (barang) dgn perbandingan nilai & berat

yaitu Pi/Wi yang terbesar.

KNAPSACK Problem (Lanjutan)

Contoh:

Diketahui bahwa kapasitas M = 20kg

Dengan jumlah barang n=3

Berat Wi masing-masing barang


(W1

, W2

, W3

) = (18, 15, 10)

Nilai Pi masing-masing barang

(P1

, P2

, P3

) = (25, 24, 15)

Penyelesaian Dengan Kriteria Greedy (Lanjutan)

Penyelesaian Soal Kriteria Greedy

Pilih barang dengan Nilai Profit Maksimal

P1 = 25  X1 = 1, dimisalkan sebagai atas atas nilai

P2 = 24  X2 = 2/15, dihitung dengan Fungsi Pembatas

P3 = 15  X3 = 0, dimisalkan sebagai batas bawah nilai

Penyelesaian Dengan Kriteria Greedy (Lanjutan)

(W1

, W2

, W3

) = (18, 15, 10)

(P1

, P2

, P3

) = (25, 24, 15)

Penyelesaiannya:

Barang nilai profit terbesar adalah barang ke-1, maka yang pertama

kali dipilih adalah barang ke-1 sebanyak X1=1


Setelah barang ke-1 terpilih, maka sisa kapasitas ransel adalah

20 kg-18 kg= 2kg.

Kemudian pilih barang ke-2 sebanyak X2=sisa kapasitas

ransel/W2=2/15

Setelah barang ke-2 terpilih, sisa kapasitas ransel = 0Kg, sehingga

barang ke-3 tidak terpilih  X3=0

(X1

,X2

,X3

) = (1, 2/15, 0) adalah feasible solution

Penyelesaian Soal Kriteria Greedy

Pilih barang dengan Berat Minimal

W1 = 18  X1 = 0, sebagai batas bawah

W2 = 15  X2 = 2/3,dihitung dgn Fungsi Pembatas

W3 = 10  X3 = 1, sebagai batas atas

Penyelesaian Dengan Kriteria Greedy (Lanjutan)

(W1

, W2

, W3

) = (18, 15, 10)

(P1

, P2

, P3

) = (25, 24, 15)

Penyelesaiannya:

Barang dengan berat terkecil adalah barang ke-3, maka yang

terpilih adalah barang ke-3 sebanyak X3=1


Setelah barang ke-3 terpilih, maka sisa kapasitas ransel

adalah 20kg-10kg= 10kg

Pilih barang ke-2 sebanyak X2= Sisa Kapasitas ransel/W2 =

10/15=2/3

Setelah barang ke-2 terpilih, sisa kapasitas ransel adalah 0Kg,

artinya barang ke-1 tidak terpilih  X1=0

(X1

,X2

,X3

) = (0, 2/3, 1) adalah feasible solution

Pilih barang dengan menghitung perbandingan yang terbesar dari

Profit dibagi Berat (Pi/Wi) yang diurut secara tidak naik, yaitu :

P1/W1 = 25/18 =1.38 karena terkecil maka X1 = 0

P2/W2 = 24/15 =1.6 karena terbesar maka X2 = 1

P3/W3 = 15/10 =1.5dengan Fungsi pembatas X3 = 1/2

Penyelesaian Dengan Kriteria Greedy (Lanjutan)

(W1

, W2

, W3

) = (18, 15, 10)

(P1

, P2

, P3

) = (25, 24, 15)

Penyelesaiannya:

Barang dengan (Pi

/Wi
) terbesar adalah barang ke-2, maka yang

pertama kali dipilih adalah barang ke-2 sebanyak X2=1

Setelah barang ke-2 terpilih, maka sisa kapasitas ransel adalah

20kg - 15kg= 5kg

Kemudian pilih barang ke-3 sebanyak X3=sisa kapasitas ransel/W3

=5/10=1/2

Setelah barang ke-3 terpilih, sisa kapasitas ransel adalah 0kg, maka

barang ke-1 tidak terpilih X1=0

(X1

,X2

,X3

) = (0, 1, 1/2) adalah feasible solution

Dibuatkan tabel berdasarkan elemen dr ke-3 kriteria metode

Greedy

Nilai profit maksimal = 31.5 dengan komposisi yang sama

Solusi ke (X1

,X2

,X3

)  WiXi PiXi

Pi Max ( 1, 2/15, 0) 20

( 0, 2/3, 1) 20 (25.0)+(24.(2/3))

+(15.1) = 31

Pi/Wi max ( 0, 1, 1/2 ) 20

Wi Min

Penyelesaian Dengan Kriteria Greedy (Lanjutan)

(25.1) + (24.(2/15))

+ (15.0) = 28.2
(25.0) + (24.1) +

(15.(1/2)) = 31.5

3. Penyelesaian Algoritma Pemrograman Greedy

Algoritma GREEDY KNAPSACK

PROCEDURE GREEDY KNAPSACK (P, W, X, n)

REAL P(1:n), W(1:n), X(1:n), M, isi

INTEGER i, n

X(1:n) = 0

isi = M

FOR i = 1 TO n DO

IF W(i) > isi THEN EXIT ENDIF

X(i) = 1

isi = isi – W(i)

REPEAT

IF i ≤ n THEN X(i) = isi/W(i) ENDIF

END GREEDY KNAPSACK

Keterangan:

n = Jumlah objek

Wi = Bobot setiap objek

Pi = Profit setiap objek

Xi = Probabilitas setiap objek

M = Kapasitas media

penyimpanan

Penyelesaian Knapsack Problem (Lanjutan)

Algoritma Pemrograman Greedy (Lanjutan)

Efektif jika data (Pi/Wi) disusun secara tidak naik lebih dahulu.

Penyelesaiannya :
Dengan Algoritma Pemrograman Greedy.

Diket. bhw kapasitas M = 20kg, degan jumlah barang n=3

Berat Wi masing2 barang = (W1, W2, W3) = (18, 15, 10)

Nilai Pi masing2 barang = (P1, P2, P3) = (25, 24, 15)

Lakukan pengurutan secara tdk naik terhadap hasil Pi/Wi,

misalnya :

P1/Wi  25/18 = 1,39 menjadi urutan ke 3

P2/W2  24/15 = 1,60 menjadi urutan ke 1

P3/W3  15/10 = 1.50 menjadi urutan ke 2

Sehingga menghasilkan pola urutan data yg baru,yaitu

W1,W2,W3  15, 10, 18 dan

P1,P2,P3  24, 15, 25

Algoritma Pemrograman Greedy (Lanjutan)

Lalu data2

tsb diinputk’ pd Alg. Greedy, terjadi proses :

x(1:n)  0 ; isi  20 ; i = 1

W(i) > isi ?  15 > 20 ?  kondisi SALAH

x(1) = 1  b’arti bhw brg tsb dpt dimuat seluruhnya.

Isi = 20 - 15 kapasitas ransel b’kurang dengan

sisa 5kg i =2

W(2) > isi ??  10 > 5 ??  kondisi BENAR

x(2)=5/10=1/2benda 10kg hanya dpt dimuat 1/2 bagian

yaitu 5 kg.

i=3

Endif  diakhiri krn ransel sdh penuh (max =20kg)

Profit nilai yang didapat adalah : P1 + P2 + P3 yaitu:

24.1+ 15.1/2 + 18.0 = 24 + 7.5 = 31.5


Algoritma Pemrograman Greedy (Lanjutan)

W1,W2,W3  15, 10, 18

dan

P1, P2, P3  24, 15, 25

Penyelesaiannya:

x(1:n)  0 ; isi  20 ; i = 1

FOR i  1 TO 3

x[1] ← 1 barang dapat dimuat seluruhnya

Apakah W[2] > isi? → 10 > 5? → exit

ENDIF diakhiri karena ransel sudah penuh (max =20kg)

Profit nilai : P1 + P2 + P3 yaitu:

24(1)+ 15(1/2) + 18(0) = 24 + 7,5 = 31,5

Saat i=1 Apakah W[1] > isi? → 15 > 20?

isi = 20 – 15 = 5 sisa kapasitas 5kg

Saat i=2

x[2] = isi/W[2] = 5/10 = 1/2 benda 10kg

dimuat ½ bag = 5

Apakah i ≤ n? → 2 ≤ 3?

Penyelesaian Knapsack Problem Menggunakan Python

#Program Penyelesaian algoritma geedy pada knapsack

def fractional_knapsack(value, weight, capacity):

index = list(range(len(value)))

ratio = [v/w for v, w in zip(value, weight)]

index.sort(key=lambda i: ratio[i], reverse=True)

max_value = 0

fractions = [0]*len(value)

for i in index:
if weight[i] <= capacity:

fractions[i] = 1

max_value += value[i]

capacity -= weight[i]

else:

fractions[i] = capacity/weight[i]

max_value += value[i]*capacity/weight[i]

break

return max_value, fractions

n = int(input('Enter number of items: '))

value = input('Enter the values of the {} item(s) in order: '

.format(n)).split()

Kodingan Program 1

value = [int(v) for v in value]

weight = input('Enter the positive weights of the {} item(s) in order: '

.format(n)).split()

weight = [int(w) for w in weight]

capacity = int(input('Enter maximum weight: '))

max_value, fractions = fractional_knapsack(value, weight, capacity)

print('The maximum value of items that can be carried:', max_value)

print('The fractions in which the items should be taken:', fractions)

Penyelesaian Knapsack Problem Menggunakan Python

Kodingan Program lanjutan

Hasil Program:Enter number of items:

Enter the values of the 3 item(s) in order:

Enter the positive weights of the 3 item(s) in order:

Enter maximum weight:


Masukan data :

M = 20, n=3

(W1, W2, W3) = (18, 15, 10)

(P1, P2, P3) = (25, 24, 15)

Outputnya :

Kesimpulan Knapsack Problem

• Cara matematika dianggap lebih rumit dan tidak cocok untuk

digunakan, karena harus memperhatikan nilai probabilitas

setiap item, nilai ini merupakan faktor penentu mengingat

nilai probabilitas (Xi) 0≤Xi≤1. Kisaran nilai-nilai Xi di sini

sangat luas, bisa 0, 0,1, 0,01, 0,001, ... 1.

• Cara kriteria greedy dianggap lebih mudah dan lebih optimal

dibanding cara yang lain meskipun kekurangannya harus

mengerjakan beberapa tahapan terlebih dahulu.

• Cara algoritma greedy lebih cepat penyelesaiannya namun

harus tahu algoritma dan harus paham cara penterjemahan

algoritma tersebut. Selain itu teknik ini akan efektif jika objek

disusun secara tidak naik terlebih dahulu berdasarkan nilai

Pi/Wi.

Tugas Mandiri

Ibu Wati akan membeli barang-barang untuk acara santunan anak

yatim. Ibu wati menggunakan truk untuk mengangkut barang-barang

tersebut. Kapasistas maksimal truk adalah 40 ton. Barang pertama

yag dibeli adalah beras dengan berat 14 ton nilai profit Rp.28 Juta,

barang kedua gula seberat 10 ton nilai profit Rp.40 juta, barang

ketiga adalah Kentang dengan berat 20 ton nilai profit Rp.70 Juta,

barang ke empat adalah bawang dengan berat 12 ton nilai profit


Rp.36 Juta dan barang kelima empon-empon dengan berat 16 ton

nilai profit Rp.24 Juta. Jika keseluruhan barang akan diangkut

sekaligus tidak akan bisa dikarenakan daya maksimal truk adalah

40 ton sedangkan keseluruhan jumlah beratnya adalah 72 ton.

Dengan menggunakan kriteria greedy tentukan:

a. Pola urutan data yang baru untuk Pi?

a. Pola urutan data yang baru untuk Wi?

b. Profit nilai maxsimal yang didapat?


PERTEMUAN 14

PROBLEMA DAN MODEL GRAPH

DALAM METODE GREEDY

Pengertian Graph

Graph merupakan cabang matematika yang dapat diterapkan dalam

kehidupan sehari-hari, teori graph dapat memecahkan banyak

masalah yang ada (Ramadhan et al., 2018).

Graph digunakan untuk bermacam-macam disiplin ilmu dan

kehidupannya sehari-hari. Graph digunakan di berbagai

bidang(kimia, ekologi, genetika, olahraga, transportasi, kartografi,

dan jaringan komputer) untuk memodelkan masalah (Didiharyono

& Soraya, 2018) dan (Rahadi, 2019). .

Permasalahan yang bisa dipecahkan menggunakan data

graph adalah:

1. Travelling Salesman

2. Permasalahan pencarian pohon rentang minimum

(Minimum Spanning Tree Problem)

3. Permasalahan path minimum (Shortest path problem)

4. Coloring (Pewarnaan)

Pengertian Graph (Lanjutan)

1. TRAVELLING SALESMAN

Untuk menentukan waktu perjalanan seorang salesman

seminimal mungkin.

Permasalahan:

Setiap minggu sekali, seorang petugas kantor telepon

berkeliling untuk mengumpulkan coin-coin pada telepon

umum yang dipasang diberbagai tempat. Berangkat dari


kantornya, ia mendatangi satu demi satu telepon umum

tersebut dan akhirnya kembali ke kantor lagi. Masalahnya

ia menginginkan suatu rute perjalanan dengan waktu

minimal.

PROBLEMA DAN MODEL GRAPH DALAM METODE

GREEDY:

TRAVELLING SALESMAN (Lanjutan)

Misalnya :

Kantor pusat adalah simpul 1 dan misalnya ada 4 telepon

umum, yang kita nyatakan sebagai simpul 2, 3, 4 dan 5 dan

bilangan pada tiap-tiap ruas menunjukan waktu ( dalam

menit ) perjalanan antara 2 simpul .

12

8 10 7

11

12

11

10

MODEL GRAPH

Langkah penyelesaian:

1. Dimulai dari simpul yang diibaratkan sebagai kantor pusat


yaitu simpul 1

2. Dari simpul 1 pilih ruas yang memiliki waktu yang minimal.

3. Lakukan terus pada simpul–simpul yang lainnya tepat satu

kali yang nantinya Graph akan membentuk Graph tertutup

karena perjalanan akan kembali ke kantor pusat.

4. Problema diatas menghasilkan waktu minimalnya adalah 45

menit dan diperoleh perjalanan sbb :

TRAVELLING SALESMAN (Lanjutan)

TRAVELLING SALESMAN (Lanjutan)

Problema diatas menghasilkan waktu minimalnya

adalah 45 menit dan diperoleh perjalanan sebagai

berikut :

12

43

10

12

2. MINIMUM SPANNING TREE

Kasus MST Problem

Mencari minimum biaya (cost) spanning tree dari

setiap ruas (edge) graph yang membentuk pohon

(tree).

Solusi dari permasalahan ini:

a. Dengan memilih ruas suatu graph yang memenuhi


kriteria dari optimisasi yang menghasilkan biaya

minimum.

b. Penambahan dari setiap ruas pada seluruh ruas

yang membentuk graph akan menghasilkan

nilai/biaya yang kecil (minimum cost).

MINIMUM SPANNING TREE (Lanjutan)

Kriteria dari Minimum Spanning Tree, yaitu :

1. Setiap ruas pada graph harus terhubung

(connected)

2. Setiap ruas pada graph harus mempunyai nilai

(label graph)

3. Setiap ruas pada graph tidak mempunyai arah

(graph tidak berarah)

MINIMUM SPANNING TREE (Lanjutan)

Proses Total minimum cost terbentuknya graph dengan

tahapan sebagai berikut:

• Dari graph yang terbentuk, apakah memenuhi kriteria MST.

• Lakukan secara urut dari simpul ruas awal s/d ruas akhir

• Pada setiap simpul ruas perhatikan nilai/cost dari tiap-tiap

ruas

• Ambil nilai yang paling kecil (jarak tertpendek setiap ruas).

• Lanjutkan s/d semua simpul ruas tergambar pada spanning

tree

• Jumlahkan nilai/cost yang dipilih tadi.

MINIMUM SPANNING TREE (Lanjutan)

Kriteria :

√ graph terhubung
√ graph tidak berarah

√ graph mempunyai label

Tentukan nilai MST dari graph di atas serta tentukan ruas

(edge) yang membentuk MST

12

43

10

30

20

55

40

35

15

45 50

25

Penyelesaian MINIMUM SPANNING TREE

Perhatikan Kriteria dari MST, yaitu:

1.Graph sudah merupakan graph terhubung

2.Graph merupakan graph yang tidak berarah

3.Masing-masing ruasnya mempunyai label

Menghitung MST dari tiap-tiap ruas yang membentuk

graph tersebut dengan cara:

a. Dilakukan secara urut dari ruas/edge pertama sampai

dengan edge terakhir.

b. Setiap ruas/edge harus digambarkan pada spanning tree


yang terbentuk.

MINIMUM SPANNING TREE (Lanjutan)

Tahapan Proses Penyelesaian dari edge (ruas),

Cost(biaya) dan spanning tree

Edge (Ruas) Cost (Biaya) Spanning Tree

(1,2) 10

(2,6) (25)

12

12

MINIMUM SPANNING TREE (Lanjutan)

Tabel Lanjutan Proses Penyelesaian dari edge (ruas),

Cost(biaya) dan spanning tree

Edge (Ruas) Cost (Biaya) Spanning Tree

(3,6) 15

(4,6) 20

12

12

MINIMUM SPANNING TREE (Lanjutan)

Tabel Lanjutan Proses Penyelesaian dari edge

(ruas), Cost(biaya) dan spanning tree

Edge (Ruas) Cost (Biaya) Spanning Tree


(3,5) 35

Total Cost 105

MINIMUM SPANNING TREE (Lanjutan)

43

10

25

15

20

35

3. SHORTEST PATH PROBLEM

Permasalahan: Menghitung jalur terpendek dari sebuah graph

berarah.

Kriteria untuk permasalahan Shortest Path problem

tersebut :

1. Setiap ruas pada graph harus mempunyai nilai (label graph)

2. Setiap ruas pada graph tidak harus terhubung (unconnected)

3. Setiap ruas pada graph tersebut harus mempunyai arah

(graph berarah).

SHORTEST PATH PROBLEM (Lanjutan)

1. Hitung jarak satu per satu sesuai dengan arah yang

ditunjukkan oleh tiap-tiap ruas.

2. Perhitungan dilakukan terhadap ruas graph yang

memiliki jalur awal dan akhir.


ABE

CDF

45

20

15

10 15 20 35

50 10

30

SHORTEST PATH PROBLEM (Lanjutan)

• Pertama: Melihat proses simpul yang mempunyai awal

dan akhir tujuan dari graph, yaitu:

A – B, A – C, A – D, A – E

• Kedua: Mencari jalur terpendek dari tiap-tiap proses

keempat jalur tersebut dengan menghitung

panjang tiap-tiap jalur.

Penyelesaian

Langkah 1 Penyelesaian Jalur A - B

• A – B = 50

• A – C – D – B = 10 + 15 + 20 = 45

• A – E – D – B = 45 + 35 + 20 = 100

Jalur terpendek untuk simpul A tujuan B adalah:

A – C – D – B = 45

SHORTEST PATH PROBLEM (Lanjutan)

Langkah 2 Penyelesaian Jalur A - C

• A – C = 10

• A – B – C = 50 + 15 = 65
• A – B – E – D – B – C = 50 + 10 + 35 + 20 + 15 = 130

• A – E – D – B – C = 45 +35 +20 + 15 = 115

Jalur terpendek untuk simpul A tujuan C adalah:

A – C = 10

SHORTEST PATH PROBLEM (Lanjutan)

Langkah 3 Penyelesaian Jalur A - D

• A – C – D = 10 + 15 = 25

• A – B – E – D = 50 + 10 + 35 = 95

• A – B – C – D = 50 + 15 + 15 = 80

• A – E – D = 45 + 35 = 80

Jalur terpendek untuk simpul A tujuan D adalah:

A – C – D = 25

SHORTEST PATH PROBLEM (Lanjutan)

Langkah 4 Penyelesaian Jalur A - E

• A – E = 45

• A – B – E = 50 + 10 = 60

• A – C – D – B – E = 10 + 15 + 20 + 10 = 55

• A – C – D – E = 10 + 15 + 30 = 55

Jalur terpendek untuk simpul A tujuan E adalah

A – E = 45

SHORTEST PATH PROBLEM (Lanjutan)

Tabel Jalur SHORTEST PATH PROBLEM

Jalur Panjang jarak

A – C 10

A – C – D 25

A – C – D – B 45

A – E 45
SHORTEST PATH PROBLEM (Lanjutan)

Permasalahan pada Pewarnaan (Coloring)

Problema pemberian warna kepada semua simpul,

sedemikian sehingga 2(dua) simpul yang berdampingan

(ada ruas menghubungkan ke dua simpul tersebut)

mempunyai warna yang berbeda.

Banyak warna yang dipergunakan, diminta seminimal

mungkin

4. COLORING (PEWARNAAN)

Contoh 1: POLA LAMPU LALULINTAS

Permasalahan :

Menentukan pola lampu lalulintas dengan jumlah fase

minimal, dan pada setiap fase tidak ada perjalanan yang

saling melintas. Perjalanan yang diperbolehkan adalah :

A ke B, A ke C, A ke D, B ke C, B ke D, E ke B, E ke C

dan E ke D

PEWARNAAN (COLORING) (Lanjutan)

Langkah-langkah penyelesaian masalah

1. Tentukan simpul dari perjalanan yang diperbolehkan

(untuk peletakan simpulnya bebas)

2. Tentukan ruas untuk menghubungkan 2 simpul yg

menyatakan 2 perjalanan yg saling melintas


AD

EC

AC

AB BC

ED

BD EB

POLA LAMPU LALULINTAS (Lanjutan)

3. Beri warna pada setiap simpul dengan warna

warna baru.

- Bila Simpul berdampingan maka berilah warna lain

- Bila simpul tidak bedampingan maka berilah warna

yang sama

AD

EC

AC

AB BC

ED

BD EB P H

Penyelesaian Masalah (Lanjutan)

Penyelesaian Masalah (Lanjutan)

4. Kita lihat Bahwa simpul AB, BC dan ED tidak

dihubungkan oleh suatu ruas jadi untuk simpul tersebut

tidak pernah melintas perjalanan-perjalanan lain dan

simpul tersebut selalu berlaku lampu hijau


5. Tentukan pembagian masing–masing simpul yang

sudah diberikan warna.

Putih = ( AC, AD )

Hitam = ( BD, EB )

Merah = ( EC )

Penyelesaian Masalah (Lanjutan)

Catatan :

Pembagian simpul berdasarkan simpul yang tidak

langsung berhubungan seminimal mungkin (BISA

DILAKUKAN DENGAN BEBERAPA KEMUNGKINAN)

6. Dari langkah ke 5 diperoleh 3 fase, sehingga bisa kita

simpulkan keseluruhan situasi dan hasilnya dapat

dinyatakan dengan :

Penyelesaian Masalah (Lanjutan)

HIJAU AC, AD, AB, BC, ED

MERAH BD, EB, EC

HIJAU BD, EB, AB, BC, ED

MERAH AC, AD, EC

Fase 1:

Fase 2:

HIJAU EC, AB, BC, ED

MERAH AC, AD, BD, EB

Fase 3:

Contoh 2: Tabel Penjadwalan Ujian

MHS A B C D E F

1010010

2001100
3100010

4100001

5010100

6011000

7100001

8001100

PEWARNAAN (COLORING) (Lanjutan)

Penjelasan Tabel Penjadwalan Ujian

• 6 kolom yang dilambangkan

dengan huruf menunjukkan nama

mata kuliah.

• 8 baris yang ditunjukkan dengan

angka adalah mahasiswa.

• Angka “1” pada tabel menunjukkan

tentang mata kuliah yang diambil.

• Angka “0” pada tabel, berarti mata

kuliah yang tidak diambil.

Permasalahan Tabel Penjadwalan Ujian

• Ada mahasiswa yang mengambil dua mata kuliah

sekaligus.

• Tim pembuat jadwal harus membuat jadwal ujian

yang sesuai agar jadwal ujian mahasiswa tidak

bentrok.

• Syaratnya: tidak boleh ada mahasiswa yang

mengikuti dua ujian pada waktu yang bersamaan.

Tabel Penjadwalan Ujian (Lanjutan)

Penyelesaian Masalah Tabel Penjadwalan Ujian


• Menggambarkan Simpul yang menunjukan mata kuliah.

• Membuat ruas atau garis penghubung menyatakan ada

mahasiswa yang memilih kedua mata kuliah itu.

• Memilih simpul yang berwarna sama, simpul yang

berwarna sama menunjukan tidak ada mahasiswa yang

mengambil mata kuliah tersebut secara bersamaan,

berarti boleh dijadwalkan pada waktu yang sama.

Tabel Penjadwalan Ujian (Lanjutan)

Gambar Simpul Tabel Penjadwalan Ujian

Tabel Penjadwalan Ujian (Lanjutan)

Penjelasan Graph Dari Tabel Penjadwalan Ujian

• Apabila terdapat dua buah simpul yang dihubungkan

oleh ruas, maka ujian kedua mata kuliah tidak dapat

dibuat pada waktu yang bersamaan.

• Beri Warna pada masing-masing simpul, apabila warna

berbeda diberikan pada simpul yang menunjuk pada

waktu ujiannya berbeda.

• Warna yang digunakan harus seminimal mungkin.

• Catatan: Simpul yang berdampingan tidak boleh

berwarna sama.

Tabel Penjadwalan Ujian (Lanjutan)


Hasil Graph Dari Tabel Penjadwalan Ujian

dengan Warna

Keterangan:

P -> Putih

M -> Merah

H -> Hijau

Tabel Penjadwalan Ujian (Lanjutan)

Penjelasan Grap dengan Warna

• Warna Merah : untuk simpul F, E, D


• Warna Putih : untuk simpul A, B,

• Warna Hijau : untuk simpul C (dikarenakan

berdampingan)

• Simpul C bertetangga dengan simpul B (warna

putih), dan simpul D (warna merah) sehingga C

harus diberi warna lain.

Tabel Penjadwalan Ujian (Lanjutan)

Penjelasan Graph Tabel Penjadwalan Ujian dengan Warna

Kelompokkan simpul yang berwarna sama, warna yang

sama artinya bisa dijadwalkan untuk ujian sehingga

diperoleh hasil, sebagi berikut:

• Simpul merah = F, E, D

• Simpul Putih = A, B

• Simpul hijau = C

Tabel Penjadwalan Ujian (Lanjutan)

• Untuk posisi peletakan Simpul Bisa Bebas

• Awal pemberian warna boleh bebas

• Warna yang digunakan Bebas

• Awal pemberian warna mempengaruhi susunan Jadwal

Catatanapa

Anda mungkin juga menyukai