PENGERTIAN DASAR
LOGIKA DAN ALGORITMA
KONTRAK PERKULIAHAN
Absensi: 20%
Tugas : 25%
UTS : 25%
UAS : 30%
LOGIKA & ALGORITMA
LOGIKA
Diperkenalkan pertama kali oleh Aristoteles
(384-322 SM).
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}
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 : PQ
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?
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
Bejana A Bejana B
LANJUTAN
Keadaan Awal Sebelum Pertukaran:
PROSES
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
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
>>>
Hasil Running:
Belajar Bahasa Pemrograman Python Sangat Menyenangkan
Fungsi Len
#Fungsi Len
#Untuk Menghitung Panjang Karakter
Hasil Running:
33
Fungsi index()
#fungsi index
kata = 'Aisah Zahra'
#dimana posisi karakater Z
print (kata.index('Z'))
Hasil Running:
6
9
Membuat Dokumentasi Kode Program
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)
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
Masukan
Alas
Masukan
Tinggi
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
BA 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.
BA • 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 ...
A2*A 20 YX-25 ...
B A 20 ZY/5 ...
Write(B) 20 XX/(Z+5) ...
Write(X,Y,Z)
Tabel 2. Media Penyimpanan Sequence 2
Perintah A B Output
A 10 10
A2*A 20
B A 20
Write(B) 20
Menjumlahkan Dua Bilangan Positip
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
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.
BRANCHING
(PERCABANGAN)
STRUKTUR BRANCHING
(Percabangan)
Struktur Percabangan dalam pemrograman python, yaitu:
1. Struktur Percabangan if
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
Hasil Running:
Masukan Sebuah Bilangan: 9
Bilangan 9 adalah ganjil .
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
Begin
Read(A,B)
If A>B then
C A*B
Else
C A+B
D C*C
Write(C,D)
End
Begin
Read(A,B)
If A+B < 10 then
C A-B
Else
C A+B
D 2*C+B
Write(C,D)
End
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.
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.
x=4: write(x) 4
true
xx+2 6
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
Deskripsi
while bil > 0:
cetak bil
bil = bil - 1
Program Python Mencetak
bilangan Menurun 10 sampai 1
Hasil Running:
Masukkan Bilangan : 137
137 adalah bilangan prima
......
......
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
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.
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
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
a. Fungsi pangkat
b. Faktorial
c. Fibonancy
d. Menara Hanoi
Fungsi Pangkat
Menghitung 10 pangkat n dengan menggunakan konsep
rekursif.
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)
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!
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
Menara (n,asal,bantu,tujuan)
N = Jumlah Piringan
PERTEMUAN 9
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)
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:
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
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
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
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)
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
3 8 2 10 15 22
3
2 3 8 10 15 22
BINARY SEARCH
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,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
6,9 60,17
1,5 22,-8
1,9 60,-8
Tugas Kelompok
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).
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.
Awal 5 7 3 2 4
BUBBLE SORTING lanjutan
BUBBLE SORT (Dari Depan)
Awal 5 7 3 2 4
Iterasi 1
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Tidak Tukar 7
Iterasi 1 5
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Tukar 7 7
Iterasi 1 5 3
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Tukar 7 7
Iterasi 1 5 3 2
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Tukar 7
Iterasi 1 5 3 2 4 7
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Iterasi 1 5 3 2 4 7
Iterasi 2 7
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Iterasi 1 5 3 2 4 7
Tukar 5
Iterasi 2 3 7
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Iterasi 1 5 3 2 4 7
Tukar 5 5
Iterasi 2 3 2 7
BUBBLE SORTING lanjutan
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
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
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
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
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
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)
Awal 5 7 3 2 4
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Iterasi 1
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
2 Tidak Tukar
Iterasi 1 4
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
2 2 Tukar
Iterasi 1 3 4
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
2 2 Tukar
Iterasi 1
7 3 4
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
2 Tukar
Iterasi 1 2 5 7 3 4
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Iterasi 1 2 5 7 3 4
Iterasi 2 2
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Iterasi 1 2 5 7 3 4
3 Tidak Tukar
Iterasi 2 2 4
BUBBLE SORTING lanjutan
Awal 5 7 3 2 4
Iterasi 1 2 5 7 3 4
3 3 Tukar
Iterasi 2 2 7 4
BUBBLE SORTING lanjutan
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
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
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
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
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
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
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).
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
Teknik Searching
dan
Pengantar Analisis Algoritma
TEKNIK SEARCHING
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
b. Teknik STRAITMAXMIN
• Menentukan/mencari elemen max&min. Pada Himpunan
yang berbentuk array linear.
i=1
S
i<n
B
S S
A[i]>max A[i]<min
B B
max=A[i] min=A[i]
i+=1
Selesai
BEST CASE
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
Selesai
BEST CASE (Lanjutan)
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
Selesai
WORST CASE (Lanjutan)
i+=1
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
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)
(L1,L2,L3) = (5,10,3)
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)
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/2benda 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
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
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.
1. Travelling Salesman
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)
(2,6) (25)
1 2
6
MINIMUM SPANNING TREE (Lanjutan)
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
A 50 B 10 E
10 20 15 20 35
30
C D F
15 3
Penyelesaian
• Pertama: Melihat proses simpul yang mempunyai awal
dan akhir tujuan dari graph, yaitu:
A – B, A – C, A – D, A – E
• 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
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)
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
Catatan :
Pembagian simpul berdasarkan simpul yang tidak
langsung berhubungan seminimal mungkin (BISA
DILAKUKAN DENGAN BEBERAPA KEMUNGKINAN)
Fase 2:
HIJAU BD, EB, AB, BC, ED
Fase 3:
HIJAU EC, AB, BC, ED
D
A
C
E B
F
Tabel Penjadwalan Ujian (Lanjutan)
E B
M P
Keterangan: F
P -> Putih
M -> Merah M
H -> Hijau
Tabel Penjadwalan Ujian (Lanjutan)