Anda di halaman 1dari 350

PERTEMUAN 1

PENGERTIAN DASAR
LOGIKA DAN ALGORITMA
KONTRAK PERKULIAHAN

• Pertemuan 1-6, materi disampaikan


oleh dosen dikelas
• Pertemuan 7 diadakan Uji
Kompetensi Individu
• Pertemuan 8 diadakan UTS, materi
diambil dari pertemuan 1-6
KONTRAK PERKULIAHAN
LANJUTAN
• Pertemuan 9-14 disampaikan dosen di
kelas
• Pertemuan 15 diadakan Uji Kompetensi
Individu
• Pertemuan 16 diadakan UAS dimana
materi diambil dari pertemuan 9-14
SISTEM PENILAIAN
MATA KULIAH
LOGIKA & ALGORITMA

Absensi: 20%
Tugas : 25%
UTS : 25%
UAS : 30%
LOGIKA & ALGORITMA
LOGIKA
Diperkenalkan pertama kali oleh Aristoteles
(384-322 SM).

ALGORITMA diperkenalkan Oleh Ahli


Matematika : Abu Ja’far Muhammad Ibnu
Musa Al Khawarizmi.
Seorang ilmuwan Persia yang menulis kitab al
jabr w’al muqabala (rules of restoration and
reduction) sekitar tahun 825 M
DEFINISI LOGIKA DAN ALGORITMA
Definisi Logika
1. Ilmu dalam lingkungan fllsafat yang membahas prinsip-
prinsip dan hukum penalaran dengan tepat (Rakmat, 2013).
2. ilmu yang memberikan prinsip-prinsip yang harus diikuti
agar dapat berfikir valid menurut aturan yang berlaku
(Mustofa, 2016).

Definisi Algoritma
1. Urutan langkah untuk menyelesaikan masalah matematika
dan logika (Zarman & Wicaksono, 2020).
2. Deretan instruksi yang jelas untuk memecahkan masalah
(Rinaldi munir,2016).
3. Sekumpulan instruksi yang jumlahnya terbatas, yang
apabila dilaksanakan akan menyelesaikan suatu tugas
tertentu (Sjukani, 2013 ).
TAHAP PENYELESAIAN MASALAH
Masalah

Analisis Model

Algoritma Analisis

Analisis Program

Eksekusi
Data
Hasil
Contoh Algoritma1:
Bagaimana cara agar dapat kuliah di suatu
Perguruan Tinggi?
Mulai
1. Memilih Perguruan Tinggi
2. Mengisi formulir pendaftaran
3. Mengikuti tes masuk
4. Jika lulus, lanjut ke 5. Jika tidak, selesai
5. Mendaftar ulang/bayar SPP
6. Mengambil KTM
Selesai
Note: contoh algoritma yang baik karena urutan langkahnya
logis.
Contoh Algoritma2:
Bagaimana cara agar dapat kuliah di suatu
Perguruan Tinggi?
Mulai
1. Mengikuti tes masuk
2. Memilih Perguruan Tinggi
3. Mengisi formulir pendaftaran
4. Membayar SPP
5. Jika lulus tes, lanjut ke 3, jika tidak selesai.
6. Mengambil KTM
Selesai
Note: contoh algoritma yang tidak baik karena urutan
langkahnya tidak logis.
Contoh Algoritma3:
Bagaimana cara untuk membuat Mie Instan?

Mulai
1. Merebus air
2. Memasukkan mie ke dalam air yang mendidih
3. Menuangkan mie yang telah matang ke dalam
mangkok
4. Memasukkan bumbu masak
5. Mengaduk sampai rata.
Selesai
Contoh Algoritma4:
Bagaimana cara untuk membuat Mie Instan?
Mulai
1. Merebus air
2. Memasukkan mie ke dalam air yang mendidih
3. Memasukkan bumbu masak
4. Mengaduk sampai rata
5. Menuangkan mie yang telah matang ke dalam
mangkok.
Selesai
Note: contoh algoritma 3 & 4 menjelaskan bahwa suatu
masalah dapat diselesaikan dengan beragam langkah dan
urutan.
Karakteristik Algoritma
1) Algoritma harus berhenti setelah mengerjakan
sejumlah langkah terbatas.
2) Setiap langah harus didefinisikan dengan tepat dan
tidak berarti dua (ambiguous).
3) Algoritma memiliki nol atau lebih masukan (input).
4) Algoritma mempunyai nol atau lebih keluaran
(output).
5) Algoritma harus sangkil (effective), setiap langkah
harus sederhana sehingga dapat dikerjakan dalam
sejumlah waktu yang masuk akal.
Algoritma
Bagaimana cara menuliskan Algoritma? Tidak ada
standar yang jelas untuk menuliskan algoritma,
namun tergantung pada masalah dan sumber daya.
Algoritma tidak ditulis untuk mendukung kode
pemrograman tertentu. Semua bahasa
pemrograman berbagi konstruksi dasar.
Konstruksi dasar terdiri dari:
1. Perulangan/Loop ( for, while)
2. Percabangan/Control Flow (if – else)
Contoh: Algoritma Menjumlahkan Dua
Bilangan dan Mencetak Hasilnya
Mulai
1. Baca bilangan a dan b
2. Hitung a ditambah b, simpan pada c
3. Tulis nilai c
Selesai
Penulisan Algoritma dalam
Pseuducode
Algoritma Penjumlahan {Bagian Nama}

Deklarasi {Bagian deklarasi}


a, b, c : integer
Begin {Bagian deskripsi}
Read(a,b)
c  a+b
write(c)
End
BAHASA PEMROGRAMAN
Program adalah kumpulan intruksi-instruksi yang
diberikan kepada komputer untuk melaksanakan suatu
tugas atau pekerjaan.
Dalam membuat program dibutuhkan bahasa
pemrograman.

Bahasa pemrograman adalah bahasa komputer yang


digunakan dalam menulis program

Contoh bahasa pemrograman adalah:


Bahasa rakitan (assembly), Fortran, Cobol, Pascal, C,
C++, Basic, Prolog, PHP, Java, Python.
BAHASA PEMROGRAMAN LANJUTAN
Berdasarkan kedekatan bahasa pemrograman
dikelompokkan menjadi 2 macam yaitu:
1. Bahasa tingkat rendah
Bahasa yang dirancang agar setiap instruksinya langsung
dikerjakan oleh komputer, tanpa harus melalui
penerjemah. Contoh: bahasa mesin (sekumpulan kode
biner (0 dan 1))

2. Bahasa tingkat tinggi


Bahasa jenis ini membuat program menjadi lebih mudah
dipahami.
Contoh: Pascal, Cobol, Fortran, Basic, Prolog, C, C++,
PHP, Java, Python
BAHASA PEMROGRAMAN PYTHON

Python adalah bahasa pemrograman tingkat tinggi


Dirancang oleh Guido Van Rossum
Python merupakan bahasa pemrograman yang mudah
dipahami karena struktur sintaknya rapi dan mudah
dipelajari.
Python banyak digunakan untuk membuat aplikasi
program seperti: Program GUI (desktop), Aplikasi
Mobile Web, Game, Hacking dan Internet of Thing
(IoT).
Python dianjurkan untuk pemula yang belum pernah
coding
BAHASA PEMROGRMAN
C++, JAVA, DAN PYTHON
Mencetak Kata Sintak pada Java:
“Logika Algoritma”
Class LogikaalgoritmaApp
Sintak pada C++: {
public static void main(string[] args)
{
#include <iostream.h> system.out.println(“Logika
main() { Algoritma”); } }
cout<<“Logika Algoritma”; }
return 0
Sintak pada Python:

print (“Logika Algoritma”)

Note: Bukti Python sangat mudah


TAHAPAN ANALISA ALGORITMA
1. Bagaimana merencanakan suatu algoritma.
Dengan menentukan model atau desain untuk
menyelesaikan suatu masalah sebagai sebuah solusi,
sehingga akan banyak terdapat variasi model yang diambil
yang terbaik.

2. Bagaimana menyatakan suatu algoritma


Menentukan model algoritma yang digunakan untuk
membuat barisan secara urut agar mendapatkan solusi
masalah. Model algortima tersebut dapat dinyatakan dengan
pseudocode atau flowchart.
a. Pseudocode (bahasa semu)
Merupakan bentuk informal untuk mendeskripsikan algoritma
yang mengikuti struktur bahasa pemrograman tertentu.
TAHAPAN ANALISA ALGORITMA
LANJUTAN
b. Flowchart (Diagram Alir)
Penggambaran algoritma secara diagram yang
menggambarkan alur susunan logika dari suatu
masalah.
Tujuan pseudocode adalah: Lebih mudah dibaca oleh
manusia, lebih mudah dipahami dan lebih mudah dalam
menuangkan ide/hasil pemikiran
Contoh : Untuk menghitung Luas Segi tiga
a. Masukan Nilai Alas
b. Masukan Nilai Tinggi
c. Hitung Luas =( Alas * Tinggi ) / 2
d. Cetak Luas
Tahapan Analisa Algoritma
Lanjutan
3. Bagaimana validitas suatu algoritma.
Validitas suatu algoritma dengan didapatkan solusi sebagai
penyelesaian dari masalah
4. Bagaimana Menganalisa suatu Algoritma.
Analisa algoritma dengan melihat waktu tempuh dan jumlah
memori yang digunakan
5. Bagaimana Menguji Program dari suatu Algoritma.
Algoritma tersebut diimplementasikan kedalam bahasa
pemrograman misal: Python. Proses uji algoritma tersebut
dengan dua tahap yaitu:
a. Fase Debugging dan
b. Fase Profilling
Tahapan Analisa Algoritma
Lanjutan
a. Fase Debugging
yaitu fase dari proses program eksekusi
yang akan melakukan koreksi terhadap
kesalahan.

b. Fase Profilling
yaitu fase yang akan bekerja jika program
tersebut sudah benar (telah melewati
fase debugging).
Tambahan Materi
Pseuducode konsultasi ibu hamil pada sistem pakar, berikut ini:
Buka menu konsultasi
input nama pengguna
input jenis kelamin pengguna
input tanggal lahir pengguna
input alamat pengguna
input pekerjaan pengguna
input nomor telepon pengguna.
Link:
https://repository.bsi.ac.id/index.php/unduh/item/269488/SISTEM-
PAKAR-DIAGNOSA-KEGUGURAN-PADA-IBU-HAMIL.pdf
PERTEMUAN 2

KONSEP ALGORITMA
&
TIPE DATA
KONSEP ALGORITMA
1. ALGORITMA PE-UBAH
Adalah Variabel yang nilainya BUKAN konstanta (selalu
berubah – sesuai dengan kondisi Variabel terKINI)
Sintaks : P=Q
Algoritma : PQ
Arti : Bahwa Nilai P diberi harga Nilai Q
Nilai P akan SAMA DENGAN nilai Q, & Nilai Q TETAP

2. ALGORITMA PERTUKARAN
Berfungsi mempertukarkan masing-masing isi Variabel
sedemikian sehingga Nilai dari tiap Variabel akan
berubah/bertukar
Contoh Soal Algoritma
1. Diketahui P=10, Q=15 dan R=5.
Diberikan Algoritma P=Q,Q=R, mk Nilai P,Q,R
sekarang?

2. Diketahui Algoritma P=11, P=P+1 dan Q = P


Berapakan Nilai P dan Q ? ……………

3. Diketahui 3 variabel peubah P,Q dan R. Agar isi Q


ditaruh di P, isi R ditaruh di Q dan isi P ditaruh di R,
maka Algoritma yang dapat ditulis adalah : ……….

4. Diketahui 2 peubah K = 15 dan L = 25. Buat Algoritma


untuk mempertukarkan isi K dan L. : ……………
ANALISA ALGORTIMA
1. Sekumpulan lidi yang berjumlah 12 dapat membentuk
kotak seperti di bawah ini. Pertanyaan pindahkanlah
dua buah lidi tersebut agar membentuk empat buah
kotak.
ANALISA LANJUTAN

Dengan memindahkan dua buah lidi yang ada pada


bagian bawah, seperti dibawah ini
ANALISA LANJUTAN

2. Ada tiga batang lidi dibawah ini, bagaimana


caranya untuk membentuk angka 6 tanpa
mematahkannya
ANALISA LANJUTAN
Jawab: Ketiga buah lidi tersebut akan membentuk
angka 6 romawi
ANALISA LANJUTAN

3. Budi tidak pernah bolos dalam kelasnya, tetapi dia


tidak pernah mengerjakan tugas selama setahun ini.
Kerjanya cuma bicara dan Budi juga tidak pernah
mengikuti ujian semester, Budi juga bukan murid yang
berprestasi. Kenapa Budi tidak pernah mendapat
peringatan dari pihak sekolah?
(menurut Anda apa jawabannya)
ANALISA LANJUTAN

Jawabannya: Karena Budi adalah Seorang guru.

Penjelasan:
Budi tidak pernah mengerjakan tugas namun membuat
tugas, kerjanya cuma bicara menjelaskan materi pelajaran
dalam kelas sehingga Budi tidak akan pernah mengikuti
ujian semester.
ANALISA LANJUTAN
4. Berapa banyaknya garis minimal untuk menutup
seluruh titik-titik yang ada dibawah ini dengan syarat
bahwa untuk membuat garis tersebut tidak boleh
terputus :
a.  
 

b.   
  
  

c.  
   
   
 

d.    
   
   
   
5. Algoritma Pertukaran Isi Bejana
Untuk Latihan Uji Coba Pertukaran Mahasiswa Membawa
2 Gelas air yang berbeda warnanya dan 1 gelas Kosong

Diberikan dua buah bejana, A dan B; bejana A berisi larutan


berwarna merah, bejana B berisi larutan berwarna biru.

Buatlah pseudocode untuk menukarkan isi kedua bejana


itu sedemikian sehingga bejana A berisi larutan berwarna
biru dan bejana B berisi larutan berwarna merah.

Bejana A Bejana B
LANJUTAN
Keadaan Awal Sebelum Pertukaran:

PROSES

Keadaan Akhir Setelah Pertukaran:


Tipe Data Pada Python
Tipe Data Keterangan
Boolean Mempunyai dua nilai yaitu true bernilai 1 dan false bernilai 0
String Terdiri dari karakter/kalimat berupa huruf, angka, dll (diapit
tanda “ atau ‘)
Integer Menyatakan bilangan bulat
Float Menyatakan bilangan yang mempunyai koma
Complex Menyatakan pasangan angka real dan imajiner
List Data untaian yang menyimpan berbagai tipe data, isinya
dapat berubah-ubah
Tuple Data untaian yang menyimpan berbagai tipe data, tapi isinya
tidak dapat berubah-ubah
Hexadecimal Menyatakan bilangan dalam format heksa
Dictionary Data untaian yang menyimpan berbagai tipe data berupa
pasangan penunjuk dan nilai
Contoh tipe data pada python
#tipe data Boolean
Hasil Running:
print(True)
True
#tipe data String
Belajar Python menyenangkan...
print("Belajar Python menyenangkan...")
20
#tipe data Integer
print(20)
3.14
#tipe data Float
print(3.14)
5j
#tipe data Complex
print(5j)
Tipe Data list
Adalah sebuah array yang berisi kumpulan tipe yang tidak
sejenis.

#tipe data list


kata = ["Belajar", "Python", "di", "Kampus UBSI"]
angka = [10, 50, 100, 1000]
campur = ["Belajar", 100, 7.99, True]
#cetak
print(kata)
print(angka)
print(campur)

Hasil Running:
['Belajar', 'Python', 'di', 'Kampus UBSI']
[10, 50, 100, 1000]
['Belajar', 100, 7.99, True]
Tipe Data Tuple
Tipe data tuple hampir sama dengan list, perbedaanya anggotanya
tidak bisa diubah setelah dideklarasikan. Tuple menggunakan
kurung biasa dan dipisahkan dengan koma untuk anggota
#tipe data tuple
kata = ("Belajar", "Python", "di", "Kampus UBSI")
angka = (10, 50, 100, 1000)
campur = ("Belajar", 100, 7.99, True)
#cetak
print(kata)
print(angka)
print(campur)
Hasil Running:
('Belajar', 'Python', 'di', 'Kampus UBSI')
(10, 50, 100, 1000)
('Belajar', 100, 7.99, True)
Tipe Data Dictionary
Bentuk umum tipe data dictionary pada pemrograman python:
Nama_variabel = {“ key1”: “value1”, “key2”: “value2”, “key3”: “value3” }
#Tipe data dictionary
data = {1:"Belajar",
2: ["C++", "Python"],
"Di Kampus": "UBSI",
"menyerah" : False,
"Tahun": 2021}
print(data)

Hasil Running:
{1: 'Belajar', 2: ['C++', 'Python'], 'Di Kampus': 'UBSI', 'menyerah': False,
'Tahun': 2021}
OPERATOR ARITMATIKA & MATEMATIKA

Operator Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Modulus (sisa bagi)
** Pemangkatan
// Pembagian dimana hasilnya
bilangan bulat
Contoh Operator Aritmatika dan
Matematika
>>> 1+2
3
>>> 8-12
-4
>>> 4*5
20
>>> 42/7
6.0
>>> 9%2
1
>>> 5**2
25
>>> 10//3
3

* Dosen diharapkan memberikan contoh lain penerapan operator


Aritmatika & Matematika
OPERATOR PERBANDINGAN

Operator Keterangan
> Lebih besar dari
< Lebih kecil dari
== Sama dengan
!= Tidak sama dengan
<= Lebih kecil sama dengan
>= Lebih besar sama dengan
Contoh Operator Perbandingan
>>> 10>5
True
>>> 8<6
False
>>> 10==10
True
>>> 5!=6
True
>>> 6<=6
True
>>> 8>=3
True
>>>

* Dosen diharapkan memberikan contoh lain penerapan operator


Perbandingan
OPERATOR BITWISE
Operator Keterangan
& AND
| OR
~ NOT
^ XOR
<< Geser bit ke kiri
>> Geser bit ke kanan
OPERATOR AND
Operator AND akan bernilai false (0) apabila nilai semua
operandnya atau salah satu bernilai false (0), dan akan bernilai
true (1) apabila kedua operand bernilai true (1).

Operand 1 Operand 2 Output


0 0 0
0 1 0
1 0 0
1 1 1
OPERATOR OR
Operator Or akan menghasilkan output:
Jika salah satu operand atau kedua operand bernilai true (1) akan
menghasilkan output true (1), jika kedua operand bernilai false (0) maka
akan menghasilkan output false (0).

Operand1 Operand2 Output


0 0 0
0 1 1
1 0 1
1 1 1
OPERATOR XOR
Hasil operasi menggunakan operator XOR, yaitu:
• Apabila bit yang dibandingkan nilainya berbeda misalnya 1 (true) dan
0 (false) maka outputnya adalah 1 (true).
• Apabila bit yang dibandingkan nilainya sama misalnya 1 (true) dan
1(true) atau 0 (false) dan 0 (false) maka outputnya adalah 0 (false).

Operand1 Operand1 Output


0 0 0
0 1 1
1 0 1
1 1 0
Menggabungkan Nilai string
Pada Pemrograman Python untuk menggabungkan nilai string pada
program adalah sebagai berikut:

#Penggabungan dua string


kata1 = "Belajar Bahasa Pemrograman Python "
kata2 = "Sangat Menyenangkan"
print(“Kata1: “,kata1)
Print(“Kata2: “,kata2)
#kata pertama dan kedua digabungkan
gabung = kata1 + kata2
print(“Hasil Penggabungan kata1 dan kata2”)
print(gabung)

Hasil Running:
Belajar Bahasa Pemrograman Python Sangat Menyenangkan
Fungsi Len

Untuk menghitung jumlah karakter digunakan fungsi len()

#Fungsi Len
#Untuk Menghitung Panjang Karakter

kata = "Belajar Bahasa Pemrograman Python"


jumlah_karakter=len(kata)
print(jumlah_karakter)

Hasil Running:
33
Fungsi index()

untuk mengetahui posisi karakter dalam kalimat.

#fungsi index
kata = 'Aisah Zahra'
#dimana posisi karakater Z
print (kata.index('Z'))

#dimana posisi karakter r


print (kata.index('r'))

Hasil Running:
6
9
Membuat Dokumentasi Kode Program

Dokumentasi kode program adalah:


Bentuk hard copy dari modul program yang telah ditulis
termasuk property dari kode program tersebut (tanggal
dibuat, versi, nama modul, pembuat, nomor dsb).

Tahapan membuat Dokumentasi Kode Program :


1. Mengidentifikasi kode program
2. Membuat dokumentasi program dengan memberikan
penjelasan pada setiap baris program
3. Melakukan generate dokumentasi
Tugas Mandiri
Ibu pergi ke pasar membeli telur sebanyak 5 kilogram
untuk membuat kue, harga 1 kilo gram telor adalah 26000
perkilogram. Untuk pergi ke pasar ibu harus naik angkot pp
(pulang pergi) dengan tarip Rp 3500 sekali naik angkot.
Pertanyaan: Berapakah sisa uang jika ibu membawa uang
sebesar Rp 200.000,-
Identifikasi masalah
Input: berat telur(brt), harga telur (hrg), transport(ongkos)
uang ibu(uang)
Output: sisa uang(sisa)
Buatlah Programnya dengan Python!
Tugas Mandiri
• Seorang pedagang mangga menjual dagangannya
yang setiap kg mangga dihargai dengan harga
tertentu. Setiap pembeli membayar harga
mangga yang dibeli nya berdasarkan berat.
• Tentukan algoritma pedagang untuk menentukan
harga yang harus dibayar pembeli.
• Identifikasi masalah
• Input: harga per kg(hrg), berat pembelian(brt)
• Output: harga yang dibayar pembeli(byr)
PERTEMUAN 3

FLOWCHART
(Diagram Alir)
DIAGRAM ALUR (FLOWCHART)
Adalah suatu diagram yang menggambarkan susunan
logika suatu program
Simbol simbol yang digunakan adalah sebagai berikut :
Simbol Nama Simbol Keterangan
sebagai awal (berisi
Terminal ‘Start’/’Mulai’) dan sebagai akhir
(berisi ‘End’/’Stop’/’Selesai’)
membaca masukan (input) atau
Input / Output menampilkan keluaran (output)

Mengolah data melalui operasi


Proses/ aritmatika dan logika
prosessing
DIAGRAM ALUR Lanjutan
Simbol Nama Simbol Keterangan
Decision / berfungsi utk memutuskan
(kotak arah/percabangan yang diambil
keputusan) sesuai dengan kondisi yang
dipenuhi, yaitu Benar/Salah.

Subroutine/ untuk menjalankan proses suatu


subrutin bagian (sub program) atau
prosedur.

On page untuk menghubungkan diagram


Connector alur yang terputus dimana bagian
tersebut masih berada pada
halaman yang sama.
DIAGRAM ALUR Lanjutan
Simbol Nama Simbol Keterangan
bagian arah instruksi yang
Flowline/ dijalankan
Arus data

menghubungkan sambungan
Off page dari bagian flowchart yang
Connector terputus dimana sambungannya
berada pada halaman lain.
digunakan untuk pemberian
Preparation harga awal.
Diagram Alir Program Komputer

Pada dasarnya suatu program komputer


umumnya terdiri atas :
1. Pembacaan / pemasukan data ke dalam
komputer
2. Melakukan komputasi/perhitungan
terhadap data tersebut
3. Mengeluarkan / mencetak/ menampilkan
hasilnya.
Flowchart terdiri dari tiga struktur

1. Struktur Sequence / Struktur Sederhana


Digunakan untuk program yang instruksinya sequential
atau urutan
Contoh Flowchart Struktur Squence
Menghitung Luas Segitiga
Start

Masukan
Alas

Masukan
Tinggi

Luas = (Alas * Tinggi)/2

Cetak
Luas

End
Algoritma Sequence 1
Algortima Sequence 1 Penjelasan:
Deklarasi • Mula-mula variabel A
A, B: integer diberi nilai 10.
Deskripsi • Nilai variabel A menjadi
A  10 dua kali dari sebelumnya
sehingga nilai A=20.
A  2*A
• Pada variabel B kita
BA simpan nilai variabel A
Write (B) yang terakhir yaitu 20.
• Tampilkan nilai dari
variabel B yaitu 20
Algoritma Sequence 2
Algortima Sequence 2 Penjelasan:
Deklarasi • Mula-mula variabel A
A, B: integer diberi nilai 10.
Deskripsi • Nilai variabel B sama
A  10 dengan nilai A yaitu 10.
BA • Variabel A diberi nilai
dua kali variabel A
A  2*A sehingga A=20.
Write (B) • Tampilkan nilai dari
variabel B yaitu 10
Note: Perbedaan urutan langkah pada Sequence 1 & 2 akan
menghasilkan output yang berbeda.
Menggunakan Tabel Penyimpanan
Tabel 1. Media Penyimpanan Sequence 1 Latihan:
Perintah A B Output Perintah X Y Z Output
A 10 10 X 100 ...
A2*A 20 YX-25 ...
B A 20 ZY/5 ...
Write(B) 20 XX/(Z+5) ...
Write(X,Y,Z)
Tabel 2. Media Penyimpanan Sequence 2
Perintah A B Output
A 10 10
A2*A 20
B A 20
Write(B) 20
Menjumlahkan Dua Bilangan Positip

Membuat flowchart untuk menjumlahkan dua


bilangan bulat positip dan mencetak hasilnya
Algoritmanya:
a) Masukkan bilangan a
b) Masukkan bilangan b
c) Jumlahkan bilangan a dan b
d) Cetak hasil jumlahnya
Flowchart Menjumlahkan Dua
Bilangan Positip
Lanjutan Struktur Flowchart
2. Struktur Branching
Digunakan untuk program
yang menggunakan pemilihan
atau penyeleksian kondisi.
(contoh menentukan bilangan
genap/ganjil)
T

Y
Menentukan Bilangan Genap/Ganjil

Algoritmanya:
1. Masukkan sebuah bilangan
2. Bagi bilangan tersebut dengan 2
3. Jika sisa pembagian = 0 maka bilangan
tersebut adalah bilangan genap
4. Jika sisa pembagian = 1 maka bilangan
tersebut adalah bilangan ganjil
Lanjutan Menentukan bil Genap/Ganjil

Pseuducode:
read bilangan
If bil mod 2 = 0 then
“Bilangan Genap”
Else
“Bilangan Ganjil”
Flowchart Bilangan Genap/Ganjil
Mulai

Masukkan
bilangan
bulat

Bilangan dibagi 2
dengan operasi sisa bagi
(mod)

T
Sisa bagi = 0

“Bilangan “Bilangan
Genap” Ganjil”

Selesai
Lanjutan Struktur Flowchart
3. Stuktur Looping
Digunakan untuk program yang instruksinya akan
dieksekusi berulang-ulang.

T
Contoh Flowchart Perulangan
Menentukan Bilangan Terbesar dari 3
Bilangan yang di Inputkan
Algoritmanya:
1. Masukkan bilangan pertama
2. Masukkan bilangan kedua
3. Masukkan bilangan ketiga
4. Jika b1 > b2 adalah benar/ya dan b1 > b3 adalah benar/ya maka
cetak “ Bilangan Terbesar adalah b1”, tetapi jika b1>b3 adalah
tidak benar/tidak maka cetak “ Bilangan Terbesar adalah b3”
5. Jika b2 > b3 adalah benar/ya dan b2 > b1 adalah benar/ya maka
cetak “ Bilangan Terbesar adalah b2”, tetapi jika b2>b1 adalah
tidak benar/tidak maka cetak “ Bilangan Terbesar adalah b1”
6. Jika b2 > b3 adalah tidak benar atau tidak maka cetak “ Bilangan
Terbesar adalah b3”
Flowchart Menentukan Bilangan
Terbesar
Tambahan Materi
1. Algoritma yang menggambarkan proses bagaimana aplikasi sistem pakar
mendiagnosa penyakit ikan nilai menggunakan flowchart:
Link: https://repository.bsi.ac.id/index.php/unduh/item/229796/Sistem-Pakar-
Diagnosa-Penyakit-Ikan-Nila-(Oreochomis-Niloticus)-Berbasis-Web-
Menggunakan-Metode-Forward-Chaining.pdf

2. Menggambarkan algoritma Sistem Pakar dengan menggunakan Flowchart.


http://www.jurnalpradita.com/index.php/jii/article/view/65/48

3. Penggambaran alur HIPO menggunakan Flowchart dari jurnal Aplikasi


Pengenalan Kebudayaan Jawa Berbasis Desktop (Desri yani, et, al, 2019)
Link: http://journal.uinjkt.ac.id/index.php/ti/article/view/11077

4. Penggambaran Menu Utama menggunakan Flowchart dari jurnal


Simulasi sistem kerja Bioseptic tank berbasis dua dimensi (Sriyadi, et,
al, 2019)
Link:
https://ejournal.bsi.ac.id/ejurnal/index.php/paradigma/article/view/5716
/pdf
STUDI KASUS
Membuat flowchart dari program aplikasi
pada jurnal sebagai berikut:
a. Membuat flowchart dari program aplikasi Sistem
Pakar Kerusakan Mesin Sepeda Motor Transmission
Automatic dengan Metode Forward Chaining Studi
Kasus: AHASS 00955 Mitra Perdana (Imron, et, al,
2019).
http://ji.unbari.ac.id/index.php/ilmiah/article/view/7
42
STUDI KASUS
b. Rancang bangun Sistem Informasi Penjualan Dan
Pembelian Alat Tulis Kantor Pada CV. Putra
Mandiri (Rifky Permana, et, al, 2020).
https://ejournal.bsi.ac.id/ejurnal/index.php/jtk/article
/view/6885
Latihan 1

Diberikan flowchart
sebagai berikut, jika
diinput gross = 10 maka
hasil yang tercetak
adalah
Latihan 2

Diberikan flowchart
sebagai berikut, jika
nilai r yang diinput
adalah 20 maka nilai
yang tercetak pada
variabel kell adalah
Latihan 3

Diberikan flowchart
sebagai berikut, hasil
yang tercetak pada
bilangan tersebut
adalah
Latihan 4
Diberikan flowchart
sebagai berikut, jika
diinput nilai = 80
maka keterangan
yang tercetak adalah
Latihan 5
Diberikan flowchart
sebagai berikut, hasil
yang tercetak pada
Variabel bil adalah...
Tugas Mandiri
1. Diketahui empat bilangan 60, 20, 100, dan 40. Buatlah
flowchart/diagram alir dan program Python untuk
mendapatkan nilai terbesar diantara keempat bilangan
tersebut.

2. Buatlah algoritma dan program python berikut:


Aldi mempunyai kelereng 15 lebih banyak dari Budi,
sedangkan Anto mempunyai kelerang 2X jumlah
kelereng Aldi dan Budi. Agung memiliki kelerang 5
buah lebih sedikit dari jumlah kelereng Aldi, Budi dan
Anto. Berapakah jumlah kelereng Budi, Anto dan
Agung apabila jumlah kelereng Aldi diketahui
PERTEMUAN 4

BRANCHING
(PERCABANGAN)
STRUKTUR BRANCHING
(Percabangan)
Struktur Percabangan dalam pemrograman python, yaitu:

1. Struktur Percabangan if

2. Struktur Percabangan if ... else

3. Struktur Percabangan if ... Elif ... Else

4. Struktur Percabangan Nested if


1. Struktur Percabangan if
Struktur percabangan if digunakan untuk satu pilihan
keputusan.
Jika kondisi True/benar maka statement dikerjakan,
Jika kondisi False/salah maka statement tidak dikerjakan
Bentuk Umum :
if kondisi:
statement

Diagram alir if :
Contoh Kondisi if
Jika Nilai Ujian >= 70, maka cetak “Selamat Anda Lulus
Ujian”.
Penulisan kode program python sbb:

#struktur Percabangan if
Nilai = input('Masukan Nilai Anda: ')
if Nilai >= '70':
print('Selamat Anda Lulus Ujian')

Hasil Running:
Masukan Nilai Anda: 75
Selamat Anda Lulus Ujian
2. Struktur Percabangan if ... else
Percabangan if ... Else akan menyeleksi kondisi jika bernilai
True/benar maka statement1 dijalankan, jika kondisi bernilai
False/salah maka statement2 dijalankan

Bentuk umum :
if kondisi:
statement1
else:
statement2

Diagram alir percabangan if ... else


Menentukan Bilangan
Genap atau Ganjil
Soal: Membuat algoritma untuk menentukan
suatu bilangan termasuk bilangan genap atau
ganjil.
Identifikasi Masalah:
Input: Bilangan bulat (integer)
Output: Bilangan “Ganjil” atau “Genap”.
Menentukan Bilangan
Genap atau Ganjil
algoritma bilangan_ganjil_genap
Deklarasi
Bil: integer
Ket: string
Begin
Read (bil)
If bil mod 2 = 0 then
ket  ‘genap’
Else
ket  ‘ganjil’
Write (ket)
end
Menentukan Bilangan
Genap atau Ganjil
Mula-mula diinputkan variabel (bil), misal 5. karena
kondisi (bil mod 2 = 0) bernilai salah’, maka variabel ket
adalah yang setelah else yaitu ‘ganjil’ sehingga perintah
write (ket) nya sebagai output adalah ganjil.

Perintah bil ket Output


read (bil) 5
If bil mod 2 = 0 then
Ket’genap’
else ‘ganjil’
ket  ‘ganjil’
write (ket) ‘ganjil’
Flowchart
Bilangan Genap/Ganjil
Contoh Program if ... Else
Menentukan Bilangan Ganjil atau Genap
#struktur Percabangan if ... else
bilangan = int(input('Masukan Sebuah Bilangan: '))
if bilangan % 2 == 0:
print("Bilangan {} adalah genap.".format(bilangan))
else:
print("Bilangan {} adalah ganjil .".format(bilangan))

Hasil Running:
Masukan Sebuah Bilangan: 9
Bilangan 9 adalah ganjil .

Masukan Sebuah Bilangan: 6


Bilangan 6 adalah genap.
3. Struktur Percabangan if ... elif ... else
Digunakan untuk menguji lebih dari 2 kondisi, bila kondisi1
benar maka statement1 dikerjakan, bila salah menuju ke
kondisi2 . Bila kondisi2 benar maka statement2 dikerjakan, jika
salah maka statemen3 dikerjakan.

Bentuk umum :
if kondisi1:
statement1
elif kondisi2:
statement2
else:
statement3
Contoh Program if ... Elif ... else
#Struktur Percabangan if ... elif ... else Hasil Running:
Nilai = input('Masukan Nilai Akhir : ') Masukan Nilai Akhir : 70
if Nilai >= 80: Grade = B
print('Grade = A') >>>
elif Nilai >= 70:
print('Grade = B') Masukan Nilai Akhir : 90
elif Nilai >= 60: Grade = A
print('Grade = C') >>>
elif Nilai >= 40:
print(Grade = D) Masukan Nilai Akhir : 65
else: Grade = C
printf(Grade = E) >>>
Tambahan Materi
Pada jurnal “Sistem Pakar Diagnosa Keguguran Pada Ibu Hamil
Pada Rule Pakar dan Pohon Pakar terdapat uji kompetensi
menggunakan seleksi kondisi IF then else, misal:
Rule 1 : IF Terlambat haid kurang dari 20 minggu and Usia kehamilan
kurang dari 20 minggu and Perdarahan pervaginam and Hasil konsepsi
masih baik dalam kandungan and Mulas sedikit and Tes
kehamilan/HCG masih positif and Mulut rahim/cervix masih dalam
kondisi menutup and Nyeri perut bagian bawah THEN Anda di
diagnosa mengalami sakit Abortus Imminens ELSE Anda tidak
mengalami sakit Abortus Imminens END
Link Jurnal:
https://repository.bsi.ac.id/index.php/unduh/item/269488/SISTEM-
PAKAR-DIAGNOSA-KEGUGURAN-PADA-IBU-HAMIL.pdf
4. Struktur Percabangan Nested if
Nested if (if bersarang)
Kondisi nested If adalah suatu kondisi if didalam kondisi if.
Bentuk umum :
if kondisi1:
if kondisi 1.1:
statement 1.1
elif kondisi 1.2:
statement 1.2
else:
statement 1.3
elif kondisi2:
if kondisi 2.1:
statement 2.1
elif kondisi 2.2:
statement 2.2
else:
statement 2.3
else:
statement3
Contoh Program Nested if
#Struktur Percabangan Nested If elif ukuran == 'M':
#Merk Baju Polo/Alisan/StYess print('Harga = 200000')
Merk = input('Merk Baju P/A/S: ') else:
if Merk =='P': print('Harga = 150000')
print('Merk Polo') else:
ukuran = input('Ukuran L/M/S: ') print('Merk StYess')
if ukuran == 'L': ukuran = input('Ukuran L/M/S: ')
print('Harga = 300000') if ukuran == 'L':
elif ukuran == 'M': print('Harga 250000')
print('Harga = 225000') elif ukuran == 'M':
else: print('Harga = 175000')
print('Harga = 175000') else:
elif Merk=='A': print('Harga = 125000')
print('Merk Alisan')
ukuran = input('Ukuran L/M/S: ')
if ukuran == 'L':
print('Harga = 275000'
Contoh Program Nested if lanjutan
Hasil Running:
Note: Merk Baju dan Ukuran di input dengan Huruf Besar
Merk Baju P/A/S: P
Merk Polo
Ukuran L/M/S: L
Harga = 300000

Merk Baju P/A/S: A


Merk Alisan
Ukuran L/M/S: S
Harga = 150000
Latihan 1.

Tentukan keluaran dari Algoritma berikut:


Algoritma1

Begin
Read(A,B)
If A>B then
C  A*B
Else
C  A+B
D  C*C
Write(C,D)
End

Bila diketahui variabel A dan B sebagai berikut:


a. 4 dan 6, b. 3 dan 5, c. 9 dan 6
Latihan 2

Tentukan keluaran dari Algoritma berikut:


Algoritma2

Begin
Read(A,B)
If A+B < 10 then
C  A-B
Else
C  A+B
D  2*C+B
Write(C,D)
End

Bila diketahui variabel A dan B sebagai berikut:


a. 2 dan 4, b. 5 dan 7, c. 8 dan 5
Latihan 3

Sebuah warnet memberlakukan ketentuan tarif


sebagai berikut: untuk penyewaan selama 3 jam
pertama tarif Rp 6000/jam, sedangkan untuk
jam berikutnya dikenakan tarip sebesar Rp
5000/jam. Buatlah flowchart untuk menghitung
biaya penyewaan warnet dengan masukan lama
pemakaian.
Latihan 4

Seorang salesman sebuah produk mendapat gaji


pokok dari perusahaan sebesar 5000000. Jika
produk yang terjual lebih dari 100, akan
mendapatkan bonus 20% dari omset penjualan.
Namun jika kurang mendapat 10% dari omset
penjualan. Buatlah program Python untuk
menghitung gaji salesmen tersebut dengan
inputan: banyak produk dan harga satuan
produk.
Latihan 5

Sebuah perusahaan memberlakukan penggajian


sebagai berikut: gaji pegawai terdiri dari gaji pokok
(gp), tunjangan (tjg) dan lembur (lm). Besar
tunjangan adalah 20% dari gaji pokok, sedangkan
lembur bergantung dari total jam kerja (jk). Jika
total jam kerja diatas 200 jam, maka pegawai
mendapat tambahan uang 20000 perjam kelebihan.
Pegawai juga dikenai pajak sebesar 10% dari gaji.
Buatlah program Python untuk menghitung gaji
dengan masukkan gaji pokok dan jam kerja.
PERTEMUAN 5

LOOPING
(PERULANGAN)
LOOPING
Instruksi pengulangan (repetition) adalah instruksi yang
dapat mengulangi pelaksanaan sederetan instruksi lain
berulangkali sesuai dengan persyaratan yang ditentukan.
Struktur instruksi perulangan pada dasarnya terdiri atas:
1. Kondisi perulangan. Suatu kondisi yang harus dipenuhi
agar perulangan dapat terjadi
2. Badan (body) perulangan. Deretan instruksi yang akan
diulang-ulang pelaksanaannya
3. Pencacah (counter) perulangan. Suatu variabel yang
nilainya harus berubah agar perulangan dapat terjadi
dan pada akhirnya membatasi jumlah perulangan yang
dapat dilaksanakan.
Bentuk Perulangan pada Python
1. Perulangan For
Perulangan yang mengerjakan “bagian pernyataan
yang sama” secara berulang-ulang berdasarkan syarat
atau kondisi yang ditentukan.

2. Perulangan While
Perulangan yang mengerjakan perintah selama
kondisinya bernilai benar.

3. Loop bersarang (Nested Loop)


Perulangan di dalam perulangan.
1. PERULANGAN FOR
Bentuk Umum : Flow Chart - For
For variabel in range :
statements
Menampilkan Deret Bilangan
Input: - Program Python Untuk
Deret Bilangan:
Output: 0 1 2 3 ...
#Menampilkan Deret Bilangan
Algoritma deret n=int(input('Banyak Data : '))
for i in range (n):
Deklarasi
n, i : integer print(i)

Begin Output Program:


read(n)
for i in range n Banyak Data : 5
write(i) 01234
End
Note: pada Python perulangan dengan fungsi
Range dimulai dari 0
Menampilkan Deret Bilangan
Penjelasan algoritma: Tabel Penyimpanan deret
Perintah n i=0..n i Output
Mula-mula masukkan nilai n
Read(n) 5
misal:5, kemudian terjadi
i=0: write(i) true 0 0
perulangan dengan i=0 i=1: write(i) true 1 1
sampai n. Pengulangan i=2: write(i) true 2 2
i=3: write(i) true 3 3
dikerjakan selama kondisi i=4: write(i) true 4 4
bernilai true. Kemudian i=5: write(i) false
write (i) menghasilkan
keluaran 0 dst, proses
diulang lagi sampai dengan
i kurang dari nilai n.
2. Perulangan While
Perulangan akan terus dilaksanakan selama kondisi bernilai
True / benar.

Flowchart Perulangan while


Bentuk Umum :

while kondisi:
statement(s)
Perulangan While (Lanjutan)
1. Ada instruksi yang berkaitan dengan kondisi sebelum
masuk ke while sehingga kondisi ini benar (terpenuhi)
dan pengulangan bisa dilaksanakan.

2. Ada suatu instruksi di antara instruksi-instruksi yang


diulang yang mengubah nilai variabel perulangan agar
pada saat kondisi perulangan tidak terpenuhi sehingga
perulangan berhenti.
Menampilkan Deret Bilangan
Genap
Input : -
Output : 2, 4, 6, ... Program Python Menampilkan
Algoritma deret Deret - Bilangan:
Deklarasi #Menampilkan Deret Bilangan Genap
n, x : integer n=int(input('Masukkan Nilai N : '))
x=2
Begin
while x<=n:
read(n) print(x,end=" ")
x2 x=x+2
while x <= n do Output Program:
write(x) Masukkan Nilai N : 8
2468
x x + 2
End
Menampilkan Deret Bilangan
Genap
Mula-mula inputkan nilai n = 8, kemudian x diberi
nilai 2, setelah itu x dibandingkan dengan n. Jika
(x<=n) bernilai benar maka x ditampilkan kemudian
x ditambah 2 dan menghasilkan nilai x baru. Setelah
itu data kembali keatas dan menguji (X<=N) bernilai
benar, jika ya proses yang sama dgn sebelumnya
dilakukan kembali. Demikian seterusnya sampai
(x<=n) bernilai salah
Tabel Penyimpanan Deret
Perintah X<=n N X output
Read(n) 8
X2 2
x=2: write(x) true 2
xx+2 4

x=4: write(x) 4
true
xx+2 6

x=6: write(x) true 6


xx+2 8

x=8: write(x) true 8


xx+2 10

x=10: write(x) False


xx+2
Algoritma while untuk menampilkan
angka 1 hingga 15

Algoritma Perulangan_while
{mencetak angka 1 hingga 15}
Deklarasi
angka =1

Deskripsi
while angka <= 15:
cetak angka
angka  angka + 1
Program Python Mencetak
bilangan 1 sampai 15
Hasil Running :
# Perulangan While Bilangan ke-: 1
angka = 1 Bilangan ke-: 2
Bilangan ke-: 3
Bilangan ke-: 4
while angka <= 15: Bilangan ke-: 5
Bilangan ke-: 6
print ("Bilangan ke-: ", angka)
Bilangan ke-: 7
angka = angka + 1 Bilangan ke-: 8
Bilangan ke-: 9
Bilangan ke-: 10
print ("Terima Kasih") Bilangan ke-: 11
Bilangan ke-: 12
Bilangan ke-: 13
Bilangan ke-: 14
Bilangan ke-: 15
Terima Kasih
Algoritma While Mencetak Bilangan
menurun dari 10 sampai 1

Algoritma while_mencetak angka menurun


#mencetak angka 10 sampai angka 1
Deklarasi
bil = 10

Deskripsi
while bil > 0:
cetak bil
bil = bil - 1
Program Python Mencetak
bilangan Menurun 10 sampai 1

#Perulangan While Hasil Running:


#Mencetak bilangan 10 sampai 1 10
9
bil = 10 8
7
while bil > 0: 6
5
print(bil) 4
bil = bil - 1 3
2
1
print ("Hasil Mencetak Bilangan
Hasil Mencetak Bilangan
Secara menurun") Secara menurun
Program Python Menentukan Bilangan
Prima atau tidak
#input bilangan
bilangan = int(input("Masukkan Bilangan : "))
#bilangan prima harus lebih besar dari 1
if bilangan > 1:
for i in range(2,bilangan):
if (bilangan % i) == 0:
print(bilangan, "bukan bilangan prima")
print(i, "kali", bilangan//i, "=", bilangan)
break
else:
print(bilangan,"adalah bilangan prima")
#bila bilangan kurang atau sama dengan satu
else:
print(bilangan, "bukan bilangan prima")
Program Python Lanjutan

Hasil Running:
Masukkan Bilangan : 137
137 adalah bilangan prima

Masukkan Bilangan : 147


147 bukan bilangan prima
3 kali 49 = 147
Perintah BREAK;

Berfungsi untuk keluar dari suatu loop for atau while.


Bentuk Umumnya adalah:

......
......
break
......
......
Program Python Menggunakan
Perintah Break
#Perintah break pada perulangan for
#Program akan keluar setelah mencetak angka sampai 6 karena
perintah break

bil = 6

for i in range(0,10):
print(i)
if i is bil:
break

Note:
Looping akan dikerjakan terus sampai dipaksa keluar oleh
instruksi break;
Program Python Lanjutan
Hasil Running:
0
1
2
3
4
5
6

Program keluar setelah mencetak angka 6 karena instruksi


break
Perintah Continue:
Fungsi Continue akan melakukan
pengulangan mulai dari awal lagi.
#penggunaan continue pada while
bil = 0
pilihan = 'y'
while (pilihan != 'n'):
bil = int(input("Masukkan bilangan dibawah 50: "))

if (bil > 50):


print("Bilangan melebihi angka 50, Silahkan diulangi.")
continue
print("Pangkat dua dari bilangan ini adalah: ",bil*bil)
pilihan = input("Apakah Anda ingin mengulang kembali (y/n)? ")
Program Continue lanjutan
Hasil Running:
Masukkan bilangan dibawah 50: 20
Pangkat dua dari bilangan ini adalah: 400
Apakah Anda ingin mengulang kembali (y/n)? y
Masukkan bilangan dibawah 50: 36
Pangkat dua dari bilangan ini adalah: 1296
Apakah Anda ingin mengulang kembali (y/n)? y
Masukkan bilangan dibawah 50: 70
Bilangan melebihi angka 50, Silahkan diulangi.
Masukkan bilangan dibawah 50: 25
Pangkat dua dari bilangan ini adalah: 625
Apakah Anda ingin mengulang kembali (y/n)? n
3. Nested Loop (Loop Bersarang)

Bentuk Umum Nested While:


While kondisi:
while kondisi:
statement(s)
statement(s)
Nested Loop Lanjutan
Bentuk Umum Nested For:
for variabel in range:
for variabel in range:
statement(s)
statement(s)
Program Python Menggunakan Nested
While Mencetak Bil. Prima antara 1 - 50
#Program Menggunakan Nested While
#Untuk mencetak bilangan prima antara 1 sampai 50
i=2
while(i < 50):
j=2
while(j <= (i/j)):
if not(i%j): break
j=j+1
if (j > i/j) : print (i, "adalah Bilangan Prima")
i=i+1
print("Terima Kasih")
Program Python Nested While Lanjutan

Hasil Running: 37 adalah Bilangan Prima


2 adalah Bilangan Prima 41 adalah Bilangan Prima
3 adalah Bilangan Prima 43 adalah Bilangan Prima
5 adalah Bilangan Prima 47 adalah Bilangan Prima
Terima Kasih
7 adalah Bilangan Prima
11 adalah Bilangan Prima
13 adalah Bilangan Prima
17 adalah Bilangan Prima
19 adalah Bilangan Prima
23 adalah Bilangan Prima
29 adalah Bilangan Prima
31 adalah Bilangan Prima
Program Python

1. Membuat Program untuk mencetak bilangan genap 1


sampai 10:
for i in range(2,12,2):
print(i)

Hasil Running
2
4
6
8
10
Program Python
2. Membuat program menjumlahkan Bilangan 1 sampai
10.
jum = 0
for i in range(10):
i=i+1
print(i)
jum = jum + i
pint()
print("Jumlah Bilangan 1 - 10 adalah: ",jum)
Hasil Running:
1 2 3 4 5 6 7 8 9 10
Jumlah Bilangan 1-10 adalah 55
Program Python
3. Buatlah program untuk menggambar segitiga siku-siku
dengan melakukan masukan bilangan bulat.

Format Masukan & keluaran:


Masukan adalah bilangan bulat dengan range : 1 ≤ 𝑁 ≤
100.
Keluaran program adalah karakter „*‟ yang
menggambarkan pola segitiga siku-siku.
Program Python
Masukan Keluaran

10
Program Python
#Masukan Bilangan Bulat Ineteger pada variabel n
n = int(input("Masukan Bilangan/karakter : "))
#Lakukan perulangan nested for untuk
menghasilkan pola siku-siku
for i in range(0, n):
for j in range(0, i + 1):
Nested for
print('* ', end='')
print('')
Tugas Berkelompok

1. Buatlah program untuk menggambar pola segitiga


dengan sebuah karakter. Karakter dapat berupa huruf
atau karakter khusus seperti: *,#,%,@,&, dan lain-lain.
Format Masukan & keluaran:
Masukan terdiri dari dua baris, baris pertama untuk
menginput bilangan bulat N dengan : 1 ≤ 𝑁 ≤ 100. baris
kedua masukan sebuah karakter.
Keluaran program adalah huruf/karakter khusus yang
menggambarkan pola segitiga sama kaki
Tugas Lanjutan
Contoh Masukkan/Keluaran
Masukan Keluaran

5
*

10
$
Tugas Lanjutan
2. Buatlah program tentang lagu anak ayam sebagai
berikut:
Tek kotek kotek kotek, anak ayam turun berkotek
anak ayam turunlah 5 mati satu tinggallah 4
anak ayam turunlah 4 mati satu tinggallah 3
anak ayam turunlah 3 mati satu tinggallah 2
anak ayam turunlah 2 mati satu tinggallah 1
anak ayam turunlah 1 mati satu tinggallah induknya
Format Masukan & keluaran:
Masukan dari program adalah bilangan bulat N dengan
batasan: 1 ≤ 𝑁 ≤ 100.
Keluaran program adalah berupa baris lirik lagu yang
akan diuraikan sesuai dengan bilangan bulat yang
diinput.
Tugas Lanjutan
Contoh Masukan/Keluaran
Masukan Keluaran
5 tek kotek kotek kotek, anak ayam turun berkotek
anak ayam turunlah 5 mati satu tinggallah 4
anak ayam turunlah 4 mati satu tinggallah 3
anak ayam turunlah 3 mati satu tinggallah 2
anak ayam turunlah 2 mati satu tinggallah 1
anak ayam turunlah 1 mati satu tinggallah induknya
1 tek kotek kotek kotek, anak ayam turun berkotek
anak ayam turunlah 1, mati satu tinggallah induknya
PERTEMUAN 6

STRUKTUR REKURSIF
STRUKTUR REKURSIF

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.
Contoh Fungsi Rekursif

a. Fungsi pangkat
b. Faktorial
c. Fibonancy
d. Menara Hanoi
Fungsi Pangkat
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 secara Rekursif Output Program:
def pangkat(x,y): Masukan Nilai X : 10
if y == 0: Masukan Nilai Y : 3
return 1 10 dipangkatkan 3 = 1000
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)))
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.
Faktorial
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
Misal :
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.
Program Faktorial
#Fungsi Pangkat secara Rekursif Output Program:
def faktorial(a): Masukan Bilangan : 5
5! = 120
if a == 1:
return (a) Masukan Bilangan : 6
else: 6! = 720
return (a*faktorial(a-1))

bil = int(input("Masukan Bilangan :


"))

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


faktorial(bil)))
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
Fibonancy

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
Program Deret Fibonancy
#Fibonacci Secara Rekursif Output Program:
def fibonacci(n): Masukan Batas Deret Bilangan
Fibonacci : 5
if n == 0 or n == 1: Deret Fibonacci
return n 01123
else:
return (fibonacci(n-1) + Masukan Batas Deret Bilangan
Fibonacci : 8
fibonacci(n-2))
Deret Fibonacci
0 1 1 2 3 5 8 13
x = int(input("Masukan Batas
Deret Bilangan Fibonacci : "))
print("Deret Fibonacci")
for i in range(x):
print(fibonacci(i),end=' ')
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))
Konsep Menara Hanoi

A B C
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.
Langkah pemindahan tsb diatas dpt
diubah dengan notasi sbb:

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 Piringan
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 
A
MENARA(1,C,B,A) ....... C  A
MENARA(3,B,A,C) B C ......................................... B  C
MENARA(1,A,C,B) ........ A 
B
MENARA(2,A,B,C) AC ............... A 
C
MENARA(1,B,A,C) ........ B  C
Lanjutan
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 :


2N - 1

N = Jumlah Piringan
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).
• Array disebut juga tabel, vektor, atau larik

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.
LARIK ATAU ARRAY Lanjutan)
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)
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]
Dimensi Array terdiri dari: [ 9 10 11 12]]
1. Array Dimensi Satu
2. Array Dimensi Dua
1. Array Dimensi Satu
Sebuah variabel yang menyimpan sekumpulan data yang
memiliki tipe sama dan elemen yang akan diakses hanya
melalui 1 indeks atau subskrip.

Bentuk Umum :
Nama_array[jumlah_elemen]
Contoh:
nilai_tugas [6]
jumlah elemen
nama array
Array Dimensi Satu (Lanjutan)

Contoh Program Array dimensi 1:


nilai_tugas=[70,80,90,"Keterangan Lulus"]
print("Nilai Tugas: \n",nilai_tugas)

Hasil program:

Nilai Tugas:
[70, 80, 90, 'Keterangan Lulus']
2. Array Dimensi Dua
• Array dimensi dua atau disebut sebagai array bersarang atau
nested list
• Array dimensi dua terdiri dari baris dan kolom
Bentuk Umum :
nama_aray[jumlah_elemen_baris] [jumlah_elemen_kolom]
Contoh:
nama_array [2] [3]
jumlah kolom
jumlah baris
nama array
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 Baris
1 2 3

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
elemen
a21 a22 …….. a2n
Baris am1 am2 ……… amn

Kolom 2 1 2
3 0 1 Ordo 3x3
2 0 0
a11=2 a21=3 a31=2
Hasil: a12=1 a22=0 a32=0
a13=2 a23=1 a33=0
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)
Kodingan Program
#deklarasi matrik 4x4
Contoh:
matriks=([0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0])
Diberikan matriks A #isi matriks 4x4
sebagai berikut : for i in range(4):
1 1 1 1 for j in range(4):
if i==j:
0 1 1 1
matriks[i][j]=1
0 0 1 1 if i<j:
0 0 0 1 matriks[i][j]=1
if i>j:
matriks[i][j]=0
Perintah pokok yang digunakan
pada pengisian matriks A adalah : #cetak bentuk matriks
for i in range(4):
A[i,j] = 1, jika i <=j , A[i,j] = 0, jika i > j
print(matriks[i])
Latihan

1. Diberikan matriks A sebagai berikut :


1 2 3 4
0 2 3 4
0 0 3 4
0 0 0 4

Perintah pokok yang digunakan pada pengisian


matriks A adalah :
Latihan

2. Diberikan matriks A sebagai berikut :


1 0 0 0
2 2 0 0
3 3 3 0
4 4 4 4

Perintah pokok yang digunakan pada pengisian matriks


A adalah
Latihan

3. Diberikan matriks A sebagai berikut :


1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Perintah pokok yang digunakan pada pengisian


matriks A adalah :
Latihan

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…..


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

n input I n input II n input III n input K

Subproblem I Subprob. II Subprob. III Subprob. K

Subsolusi I Subsolusi II Subsolusi III Subsolusi K

Solusi Optimal
Metode D AND C Lanjutan
• 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.
• Metode D AND C:
1. Merge Sorting
2. Quick Sorting
3. Binary Search
4. Teknik D and C
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 (Lanjutan)
MERGE SORT
Contoh 2:

Awal 5 7 3 2 4
MERGE SORT (Lanjutan)
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 4 5 7 3 2 4
MERGE SORT (Lanjutan)
MERGE SORT

Awal 5 7 3 2 4

Bagi 2 5 7 3 2 4

Bagi 4 5 7 3 2 4

Bagi 8 5 7 3 2 4
MERGE SORT (Lanjutan)
MERGE SORT

Awal 5 7 3 2 4

Bagi 2 5 7 3 2 4

Bagi 4 5 7 3 2 4

Bagi 8 5 7 3 2 4

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 4 5 7 3 2 4

Bagi 8 5 7 3 2 4

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 4 5 7 3 2 4

Bagi 8 5 7 3 2 4

Sorting 1 5 7 3 2 4

Sorting 2 3 5 7 2 4

Sorting 3 2 3 4 5 7
MERGE SORT (Lanjutan)
i=i+1
def mergeSort(X): k=k+1
print("Bilangan diurutkan ",X) while j < len(righthalf):
if len(X)>1: X[k]=righthalf[j]
mid = len(X)//2
j=j+1
lefthalf = X[:mid]
k=k+1
righthalf = X[mid:]
print("Merging ",X)
mergeSort(lefthalf)
mergeSort(righthalf) X = [22,10,15,3,8,2]
i=j=k=0 mergeSort(X)
while i < len(lefthalf) and j < len(righthalf): print(X)
Hasil Program:
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]
QUICK SORTING

• 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 (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)
Dengan demikian mempunyai dua buah subvektor,
subvektor pertama nilai elemennya lebih kecil dari X,
subvektor kedua nilai elemennya lebih besar dari X.
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

Subvektor Kiri Subvektor Kanan


12 23 16 23 45 24 56 34 27

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
QUICK SORTING (Lanjutan)

Pilih vektor X → elemen pertama


Contoh 2

Iterasi 1

22 10 15 3 8 2

22

10 15 3 8 2 22
QUICK SORTING (Lanjutan)
Iterasi 2 Pilih lagi vektor X berikutnya

10 15 3 8 2 22

10

3 8 2 10 15 22

Iterasi 3 Pilih lagi vektor X berikutnya

3 8 2 10 15 22
3
2 3 8 10 15 22
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
Binary Search (Lanjutan)

Algoritma Binary Search


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
Binary Search (Lanjutan)
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)
Kodingan Program 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')
Hasil Program:

data = [1, 3, 9, 11, 15, 22, 29, 31, 48 ] data 3 ditemukan diposisi 2
BinSearch(data, 3)
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
Teknik D AND C (Lanjutan)
Penyelesaian Teknik D and C
A= {22,13, -5, -8, 15, 60, 17, 31, 47}

1,9

1,5 6,9

1,3 4,5 6,7 8,9

1,2 3,3
Teknik D AND C (Lanjutan)
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 :
A = { 22, 13, -5, -8, 15, 60, 17, 31, 47 }
Posisi penggabungan  Max, Min
1,2 22,13 3,3 -5,-5

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

6,9 60,17
1,5 22,-8

1,9 60,-8
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
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).

2. Macam-Macam Metode Sorting:


1. Selection Sort
2. Bubble Sort
3. Insertion Sort

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
SELECTION SORT (Lanjutan)
Contoh : 22 10 15 3 8 2
Iterasi 1
1 2 3 4 5 6

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
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
SELECTION SORT (Lanjutan)
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): Hasil dari program:
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)
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 SORTING lanjutan
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)

Awal 5 7 3 2 4

Tidak Tukar 7
Iterasi 1 5
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4
Tukar 7 7
Iterasi 1 5 3
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Tukar 7 7
Iterasi 1 5 3 2
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Tukar 7
Iterasi 1 5 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 5
Iterasi 2 3 7
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7
Tukar 5 5
Iterasi 2 3 2 7
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Depan)

Awal 5 7 3 2 4

Iterasi 1 5 3 2 4 7
Tukar 5
Iterasi 2 4 7
3 2 5
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 5 3 2 4 7

Iterasi 2 3 2 4 5 7
Tukar 3
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 3
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
2 3 4 5 7
Tidak Tukar
Iterasi 4 2 3 4 5 7
BUBBLE SORTING lanjutan
HASIL 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 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

2 Tidak Tukar
Iterasi 1 4
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

2 2 Tukar
Iterasi 1 3 4
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

2 2 Tukar
Iterasi 1
7 3 4
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

2 Tukar
Iterasi 1 2 5 7 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
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4
3 Tidak Tukar
Iterasi 2 2 4
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4
3 3 Tukar
Iterasi 2 2 7 4
BUBBLE SORTING lanjutan

BUBBLE SORT (Dari Belakang)

Awal 5 7 3 2 4

Iterasi 1 2 5 7 3 4
3 Tukar
Iterasi 2 2 3 5 7 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
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
4 Tukar
Iterasi 3 2 3 7
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
4 Tukar
Iterasi 3 2 3 4 5 7
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
Tidak Tukar
Iterasi 4 2 3 4 5 7
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): Hasil program:
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)
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

INSERTION SORT

Awal 5 7 3 2 4
INSERTION SORT Lanjutan

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

Iterasi 1 5 7 3 2 4
Index
Iterasi 2
INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Iterasi 1 5 7 3 2 4
Index
Iterasi 2 2 4
INSERTION SORT Lanjutan

INSERTION SORT

Awal 5 7 3 2 4

Iterasi 1 5 7 3 2 4
Index
Iterasi 2 3 5 7 2 4
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
Index
Iterasi 3
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
Index
Iterasi 3 4
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
Index
Iterasi 3 2 3 5 7 4
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
Index
Iterasi 4
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
Index
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): Hasil program:
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)
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

1. Pengertian Teknik Searching (Pencarian)


Teknik dalam memilih dan menyeleksi sebuah elemen dari
beberapa elemen yang ada.

2. Teknik Searching (Pencarian)


a. Teknik Linear/Sequential Search
b. Teknik StraitMAXMIN
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 “
TEKNIK LINEAR/SEQUENTIAL SEARCH (Lanjutan)

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)

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.
TEKNIK LINEAR/SEQUENTIAL SEARCH (Lanjutan)

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] Hasil Program:
seqSearch(data,15) data 15 ditemukan di posisi 5
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
Teknik STRAITMAXMIN (Lanjutan)

Algoritma untuk mencari elemen MaxMin dalam


pemrograman Python :
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
*Keterangan
max=A[0]
B = Benar
min=A[0]
S = Salah

i=1

S
i<n
B
S S
A[i]>max A[i]<min
B B
max=A[i] min=A[i]

i+=1

Cetak max & min

Selesai
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
*Keterangan 2 4 5 10
max=A[0]
B = Benar Max 4 5 10
min=A[0]
S = Salah
P = Perbandingan Min 2 2 2
i=1
P 1 1 1
S Total Perbandingan = 3
i<n
B
S S
A[i]>max A[i]<min
B B
max=A[i] min=A[i]

i+=1

Cetak max & min

Selesai
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
WORST CASE (Lanjutan)
Mulai
*Keterangan 80 21 6 -10
max=A[0]
B = Benar Max 80 80 80
min=A[0]
S = Salah
P = Perbandingan Min 21 6 -10
i=1
P 2 2 2
S Total Perbandingan = 6
i<n
B
S S
A[i]>max A[i]<min
B B
max=A[i] min=A[i]

i+=1

Cetak max & min

Selesai
WORST CASE (Lanjutan)

Penyelesaian Worst Case

• 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.
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 rata-
rata 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.
AVERAGE CASE (Lanjutan)
Mulai
*Keterangan 5 -4 9 7
max=A[0]
B = Benar Max 5 9 9
min=A[0]
S = Salah
P = Perbandingan Min -4 -4 -4
i=1
P 2 1 2
S Total Perbandingan = 5
i<n
B
S S
A[i]>max A[i]<min
B B
max=A[i] min=A[i]

i+=1

Cetak max & min

Selesai
AVERAGE CASE (Lanjutan)
Penyelesaian kasus acak
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
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)
Kesimpulan Analisis Algoritma
• 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
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.
METODE GREEDY (Lanjutan)

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?
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
METODE GREEDY (Lanjutan)

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).
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

Kriteria Greedy pada Optimal On Tape Storage Problem:


n j
Fungsi tujuan: Optimal Storage = D(I) =   lik
j=1 k=1

n
Fungsi Pembatas : Mean Retrieval Time (MRT) =  tj /n
j=1
Optimal On Tape Storage Problem (Lanjutan)
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?

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)

(L1,L2,L3) = (5,10,3)

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

Kunci dari permasalahan Optimal On Tape Storage


Problem adalah Susunan File dari ukuran Kecil Kebesar
(Increasing)
METODE GREEDY (Lanjutan)
2. KNAPSACK Problem
Ilustrasi Knapsack Problem
• 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.

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)..
KNAPSACK Problem (Lanjutan)

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.
n
Fungsi Tujuan Maksimum :  Pi Xi
i=1
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.
n
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.
KNAPSACK Problem (Lanjutan)

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.
Penyelesaian Dengan Kriteria Greedy (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
(W1, W2, W3) = (18, 15, 10)
(P1, P2, P3) = (25, 24, 15)
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
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 Dengan Kriteria Greedy (Lanjutan)
Penyelesaian Soal Kriteria Greedy
(W1, W2, W3) = (18, 15, 10)
Pilih barang dengan Berat Minimal (P1, P2, P3) = (25, 24, 15)
W1 = 18  X1 = 0, sebagai batas bawah
W2 = 15  X2 = 2/3,dihitung dgn Fungsi Pembatas
W3 = 10  X3 = 1, sebagai batas atas
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
Penyelesaian Dengan Kriteria Greedy (Lanjutan)
(W1, W2, W3) = (18, 15, 10)
(P1, P2, P3) = (25, 24, 15)
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
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
Penyelesaian Dengan Kriteria Greedy (Lanjutan)

Dibuatkan tabel berdasarkan elemen dr ke-3 kriteria metode


Greedy
Solusi ke (X1,X2,X3)  WiXi PiXi

( 1, 2/15, 0) 20 (25.1) + (24.(2/15))


Pi Max + (15.0) = 28.2

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


+(15.1) = 31

Pi/Wi max ( 0, 1, 1/2 ) 20 (25.0) + (24.1) +


(15.(1/2)) = 31.5

Nilai profit maksimal = 31.5 dengan komposisi yang sama


Penyelesaian Knapsack Problem (Lanjutan)
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 Keterangan:
isi = isi – W(i) n = Jumlah objek
Wi = Bobot setiap objek
REPEAT
Pi = Profit setiap objek
IF i ≤ n THEN X(i) = isi/W(i) ENDIF Xi = Probabilitas setiap objek
END GREEDY KNAPSACK M = Kapasitas media
penyimpanan
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
Penyelesaiannya: dan
x(1:n)  0 ; isi  20 ; i = 1 P1, P2, P3  24, 15, 25
FOR i  1 TO 3

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


x[1] ← 1 barang dapat dimuat seluruhnya
isi = 20 – 15 = 5 sisa kapasitas 5kg
Saat i=2 Apakah W[2] > isi? → 10 > 5? → exit
Apakah i ≤ n? → 2 ≤ 3?
x[2] = isi/W[2] = 5/10 = 1/2 benda 10kg
dimuat ½ bag = 5
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
Penyelesaian Knapsack Problem Menggunakan Python
Kodingan Program 1
#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()
Penyelesaian Knapsack Problem Menggunakan Python
Kodingan Program lanjutan
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)
Masukan data :
Hasil Program: Enter number of items: M = 20, n=3
Enter the values of the 3 item(s) in order: (W1, W2, W3) = (18, 15, 10)
Enter the positive weights of the 3 item(s) in order:(P1, P2, P3) = (25, 24, 15)
Enter maximum weight:

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). .
Pengertian Graph (Lanjutan)

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)
PROBLEMA DAN MODEL GRAPH DALAM METODE
GREEDY:

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.
TRAVELLING SALESMAN (Lanjutan)

MODEL GRAPH
8 7 10
1 2
12 9
11 9
11 5 10
8 3
4

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 .
TRAVELLING SALESMAN (Lanjutan)

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)
Problema diatas menghasilkan waktu minimalnya
adalah 45 menit dan diperoleh perjalanan sebagai
berikut :

7
8 1 2
12

5
10

4 3
8
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
10
1 2 √ graph tidak berarah
45 50 √ graph mempunyai label
30
40
4 35 3
25
20 5
55
15
6

Tentukan nilai MST dari graph di atas serta tentukan ruas


(edge) yang membentuk MST
MINIMUM SPANNING TREE (Lanjutan)

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
1 2

(2,6) (25)
1 2

6
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
1 2

3
6

(4,6) 20
1 2

4
3
6
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
10
1 2

25
4 3
35
20 5

6 15

Total Cost 105


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)
45

A 50 B 10 E

10 20 15 20 35

30

C D F
15 3

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.
SHORTEST PATH PROBLEM (Lanjutan)

Penyelesaian
• 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.
SHORTEST PATH PROBLEM (Lanjutan)

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
4. COLORING (PEWARNAAN)

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
PEWARNAAN (COLORING) (Lanjutan)
Contoh 1: POLA LAMPU LALULINTAS
C

B D

E
Permasalahan : A
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
POLA LAMPU LALULINTAS (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

AC BD EB

AB BC EC

AD
ED
Penyelesaian Masalah (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
H
P AC BD EB H

AB BC EC M

AD
P ED
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)
Fase 1:
HIJAU AC, AD, AB, BC, ED

MERAH BD, EB, EC

Fase 2:
HIJAU BD, EB, AB, BC, ED

MERAH AC, AD, EC

Fase 3:
HIJAU EC, AB, BC, ED

MERAH AC, AD, BD, EB


PEWARNAAN (COLORING) (Lanjutan)

Contoh 2: Tabel Penjadwalan Ujian

MHS A B C D E F Penjelasan Tabel Penjadwalan Ujian


1 0 1 0 0 1 0 • 6 kolom yang dilambangkan
2 0 0 1 1 0 0 dengan huruf menunjukkan nama
mata kuliah.
3 1 0 0 0 1 0
• 8 baris yang ditunjukkan dengan
4 1 0 0 0 0 1
angka adalah mahasiswa.
5 0 1 0 1 0 0 • Angka “1” pada tabel menunjukkan
6 0 1 1 0 0 0 tentang mata kuliah yang diambil.
7 1 0 0 0 0 1 • Angka “0” pada tabel, berarti mata
8 0 0 1 1 0 0 kuliah yang tidak diambil.
Tabel Penjadwalan Ujian (Lanjutan)

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

D
A
C

E B

F
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
D
P
A M
C
H

E B
M P

Keterangan: F
P -> Putih
M -> Merah M
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
Catatan
• Untuk posisi peletakan Simpul Bisa Bebas
• Awal pemberian warna boleh bebas
• Warna yang digunakan Bebas
• Awal pemberian warna mempengaruhi susunan Jadwal

Anda mungkin juga menyukai