Disusun oleh :
Anissa Azhari
3411181167
2020
Daftar Isi
Daftar Isi..............................................................................................................................i
BAB I ALGORTIMA BRUTE FORCE............................................................................1
1.1 Pengertian..........................................................................................................1
1.2 Tahapan Algoritma Umum.................................................................................1
1.3 Contoh Masalah & Penjelasan Penyelesaian......................................................2
1.3.1 Mencari Elemen Terbesar...........................................................................2
1.3.2 Pencarian Beruntun (Sequential Search)....................................................2
1.3.3 Menghitung an (a > 0, n adalah bilangan bulat tak-negatif)........................3
1.3.4 Menghitung n! (n bilangan bulat tak-negatif).............................................4
1.3.5 Mengalikan dua buah matriks, A dan B......................................................4
1.3.6 Tes Bilangan Prima.....................................................................................5
1.3.7 Selection Sort.............................................................................................6
1.3.8 Bubble Sort.................................................................................................7
1.3.9 Mengevaluasi Polinom...............................................................................8
1.3.10 Pencocokan String (String Matching)..........................................................9
1.3.11 Mencari Pasangan Titik yang Jaraknya Terdekat (Closest Pairs)...............12
1.3.12 Exhaustive search.....................................................................................13
1.4 Kelebihan dan Kekurangan...............................................................................16
2.4.1. Kelebihan..................................................................................................16
2.4.2. Kekurangan...............................................................................................16
BAB II ALGORITMA GREEDY....................................................................................17
2.1 Pengertian........................................................................................................17
2.2 Tahapan Algoritma Umum...............................................................................18
2.3 Contoh Masalah & Penjelasan Penyelesaian....................................................19
2.3.1 Persoalan Penukaran Uang.......................................................................19
2.3.2 Minimisasi Waktu di dalam Sistem (Penjadwalan)...................................20
2.3.3 An Activity Selection Problem...................................................................22
2.3.4 Integer Knapsack......................................................................................23
2.3.5 Fractional Knapsack..................................................................................24
i
2.3.6 Penjadwalan Job dengan Tenggat Waktu (Job Schedulling with Deadlines)
26
2.3.7 Pohon Merentang Minimum....................................................................27
2.3.8 Lintasan Terpendek (Shortest Path).........................................................29
2.3.9 Pemampatan Data dengan Algoritma Huffman........................................32
2.4 Kelebihan dan Kekurangan...............................................................................32
2.4.1. Kelebihan..................................................................................................32
2.4.2. Kekurangan...............................................................................................33
BAB III IMPLEMENTASI..............................................................................................34
3.1 Bubble Sort.......................................................................................................34
3.2 Bilangan Prima.................................................................................................35
3.3 Bilangan Polinom..............................................................................................35
3.4 Perbandingan String.........................................................................................36
3.5 Jarak Antar Titik................................................................................................37
3.6 Travelling Salesman Problem...........................................................................39
3.7 Knapsack Problem............................................................................................40
3.8 Coin Exchange..................................................................................................41
3.9 Penjadwalan Pelanggan....................................................................................42
3.10 Fractional Knapsack..........................................................................................43
3.11 Job Schedulling 1..............................................................................................45
3.12 Algoritma Prim.................................................................................................47
3.13 Algoritma Kruskal.............................................................................................49
3.14 Algoritma Dijkstra.............................................................................................52
3.15 Kode Kompresi Huffman...................................................................................54
ii
BAB I
ALGORTIMA BRUTE FORCE
1.1 Pengertian
Dalam beberapa literature, algoritma merupakan suatu langkah-langkah
tertentu yang logis dalam memecahkan ataupun menyelesaikan masalah yang
disusun secara sistematis dan memiliki urutan langkah. Meskipun dalam hal ini
algoritma sering dikaitkan dengan komputer, akan tetapi algoritma juga dapat
diterapkan dalam menyelesaikan masalah di kehidupan sehari-hari.
1
1.3 Contoh Masalah & Penjelasan Penyelesaian
2
idx diisi dengan 0.
Masukan: a 1, a 2, ..., a n
Keluaran: idx
}
Deklarasi
k: integer
Algoritma:
k←1
while (k < n) and (ak != x) do
k←k+1
endwhile
{k = n or ak = x}
if ak = x then { x ditemukan }
idx ← k
else
idx ← -1 { x tidak ditemukan }
endif
1.3.3 Menghitung an (a > 0, n adalah bilangan bulat tak-negatif)
Definisi:
=1 , jika n = 0
3
endfor
return hasil
1.3.4 Menghitung n! (n bilangan bulat tak-negatif)
n! = 1 × 2 × 3 × … × n , jika n > 0
=1 , jika n = 0
Algoritma Brute Force : kalikan n buah bilangan, yaitu 1, 2, 3, …, n,
bersama-sama.
n
Cij = a i1b1j + ai2b2j + … + a inbnj = ∑ aik bkj
k =1
Algoritma brute force: hitung setiap elemen hasil perkalian satu per
satu,dengan cara mengalikan dua vektor yang panjangnya n
4
Deklarasi
i, j, k : integer
Algoritma
for i←1 to n do
for j←1 to n do
C[i,j]←0 { inisialisasi penjumlah }
for k ← 1 to n do
C[i,j]←C[i,j] + A[i,k]*B[k,j]
endfor
endfor
endfor
1.3.6 Tes Bilangan Prima
Diberikan sebuah bilangan bilangan bulat positif. Periksa apakah
bilangan tersebut adalah bilangan prima atau bukan. Bilangan prima
adalah bilangan yang hanya habis dibagi oleh 1 dan dirinya sendiri.
Algoritma Brute Force : bagi n dengan 2 sampai √ n. Jika semuanya
tidak habis membagi n, maka n adalah bilangan prima.
5
while (test) and (y ← 2) do
if x mod y = 0 then
test ← false
else
y←y-1
endif
endwhile
{ not test or y < 2 }
return test
endif
endif
1.3.7 Selection Sort
Pass ke –1:
Pass ke-2:
6
for j ← i+1 to n do
if s[j] < s[imin] then
imin ← j
endif
endfor
{pertukarkan s[imin] dengan s[i] }
temp ← s[i]
s[i] ← s[imin]
s[imin] ← temp
endfor
1.3.8 Bubble Sort
Mulai dari elemen ke-1:
1. Jika s2 < s1, pertukarkan
2. Jika s3 < s2, pertukarkan
…
3. Jika sn – 1 < sn, pertukarkan
Ulangi lagi untuk pass ke-2, 3, .., n – 1 dst. Semuanya ada n – 1 kali pass
procedure BubbleSort (input/output s : TabelInt, input n : integer)
{ Mengurutkan tabel s[1..N] sehingga terurut menaik dengan metode
pengurutan bubble sort.
Masukan : Tabel s yang sudah terdefenisi nilai-nilainya.
Keluaran: Tabel s yang terurut menaik sedemikian sehingga
s[1] ≤ s[2] ≤… ≤ s[N].
}
Deklarasi
i : integer { pencacah untuk jumlah langkah }
k: integer { pencacah,untuk pengapungan pada setiap langkah }
temp : integer { peubah bantu untuk pertukaran }
Algoritma:
for i ← n-1 downto 1 do
for k ← 1 to i do
if s[k+1] < s[k] then
{pertukarkan s[k] dengan s[k+1]}
temp ← s[k]
7
s[k] ← s[k+1]
s[k+1] ← temp
endif
endfor
endfor
1.3.9 Mengevaluasi Polinom
Persoalan: Hitung nilai polinom
8
{ Menghitung nilai p(x) pada x = t. Koefisien-koefisein polinom
sudah disimpan di dalam a[0..n].
Masukan: t
Keluaran: nilai polinom pada x = t.
}
Deklarasi
i, j : integer
p, pangkat : real
Algoritma:
p ← a[0]
pangkat←1
for i ← 1 to n do
pangkat ← pangkat * t
p ← p + a[i] * pangkat
endfor
return p
1.3.10 Pencocokan String (String Matching)
Persoalan: Diberikan
9
procedure PencocokanString(input P : string, T : string, n, m :
integer, output idx : integer)
{ Masukan: pattern P yang panjangnya m dan teks T yang
panjangnya n. Teks T direpresentasika sebagai string (array of
character)
Keluaran: lokasi awal kecocokan (idx)
}
Deklarasi
i : integer
ketemu : boolean
Algoritma:
i←0
ketemu←false
while (i ← n-m) and (not ketemu) do
j←1
while (j <= m) and (Pj = Ti+j ) do
j←j+1
endwhile
{ j > m or Pj != Ti+j }
if j = m then { kecocokan string ditemukan }
ketemu←true
else
i←i+1 {geser pattern satu karakter ke kanan teks }
endif
endwhile
{ i > n – m or ketemu }
if ketemu then
idx←i+1
else
idx←-1
endif
Analisis:
a. Worst Case
10
Pada setiap pergeseran pattern, semua karakter di pattern dibandingkan.
Jumlah perbandingan: m(n – m + 1) = O(mn)
Contoh:
T: "aaaaaaaaaaaaaaaaaaaaaaaaaah"
P: "aaah"
b. Base Case
Contoh:
Contoh:
P: "store"
11
Jarak dua buah titik, p1 = (x1, y1) dan p2 = (x2, y2) dihitung dengan
rumus Euclidean:
d = √ ( x 1−x 2 )2+( y 1− y 2 )2
Algoritma Brute Force :
12
Algoritma:
dmin←9999
for i←1 to n-1 do
for j←i+1 to n do
2 2
√
d ← ( ( pi . x− p j . x ) + ( p i . y + p j . y ) )
13
Algoritma exhaustive search untuk TSP:
1. Enumerasikan (list) semua sirkuit Hamilton dari graf lengkap
dengan n buah simpul.
2. Hitung (evaluasi) bobot setiap sirkuit Hamilton yang
ditemukan pada langkah 1.
3. Pilih sirkuit Hamilton yang mempunyai bobot terkecil. 50
Contoh 4: TSP dengan n = 4, simpul awal = a
Contoh:
TSP dengan n = 4, simpul awal = a
R
ute perjalananan terpendek dengan bobot = 32 adalah:
acbda
adbca
2. 1/0 Knapsack Problem
14
Diberikan n buah objek dan sebuah knapsack dengan
kapasitas bobot K. Setiap objek memiliki properti bobot
(weigth) wi dan keuntungan(profit) pi. Bagaimana memilih
memilih objek-objek yang dimasukkan ke dalam knapsack
sedemikian sehingga diperoleh keuntungan yang maksimal.
Total bobot objek yang dimasukkan ke dalam knapsack
tidak boleh melebihi kapasitas knapsack. Persoalan 0/1
Knapsack dapat kita pandang sebagai mencari himpunan
bagian (subset) dari keseluruhan objek yang muat ke dalam
knapsack dan memberikan total keuntungan terbesar.
X = {x1, x2, …, x}
15
3. Pilih himpunan bagian yang memberikan total keuntungan
terbesar.
2.4.1. Kelebihan
Metode brute force dapat digunakan untuk memecahkan hampir sebagian
besar masalah (wide applicability).
Metode brute force sederhana dan mudah dimengerti.
Metode brute force menghasilkan algoritma yang layak untuk beberapa
masalah penting seperti pencarian, pengurutan, pencocokan string, perkalian
matriks.
Metode brute force menghasilkan algoritma baku (standard) untuk tugas-
tugas komputasi seperti penjumlahan/perkalian n buah bilangan, menentukan
elemen minimum atau maksimum di dalam tabel (list).
2.4.2. Kekurangan
Metode brute force jarang menghasilkan algoritma yang mangkus.
Beberapa algoritma brute force lambat sehingga tidak dapat diterima.
Tidak sekontruktif/sekreatif teknik pemecahan masalah lainnya.
16
BAB II
ALGORITMA GREEDY
2.1 Pengertian
Algoritma Greedy merupakan metode yang paling populer untuk
memecahkan persoalan optimasi. Persoalan optimasi (optimization
problems) merupakan persoalan untuk mencari solusi optimum. . Terdapat
dua macam persoalan optimasi:
1. Maksimasi (maximization)
2. Minimasi (minimization)
1. Mengambil pilihan yang terbaik yang dapat diperoleh pada saat itu tanpa
memperhatikan konsekuensi ke depan (prinsip “take what you can get
now!”)
2. Berharap bahwa dengan memilih optimum lokal pada setiap langkah akan
berakhir dengan optimum global.
1. Himpunan kandidat, C.
2. Himpunan solusi, S
3. Fungsi seleksi (selection function)
4. Fungsi kelayakan (feasible)
5. Fungsi obyektif
17
Algoritma Greedy melibatkan pencarian sebuah himpunan bagian, S,
dari himpunan kandidat, C, yang dalam hal ini, S harus memenuhi
beberapa kriteria yang ditentukan, yaitu menyatakan suatu solusi dan S
dioptimisasi oleh fungsi obyektif.
18
Algoritma Greedy tidak beroperasi secara menyeluruh terhadap
semua alternatif solusi yang ada (sebagaimana pada metode
exhaustive search).
Terdapat beberapa fungsi SELEKSI yang berbeda, sehingga kita
harus memilih fungsi yang tepat jika kita ingin algoritma
menghasilkan solusi optimal.
Obyektif persoalan:
n
Minimisasi : F = ∑ xi (fungsi objektif)
i=1
n
Dengan kendala ∑ dixi= A
i=1
19
Deklarasi
S : himpunan_koin
x : koin
Algoritma
S ← {}
while (Σ (nilai semua koin di dalam S) != A) and (C != {} ) do
x ← koin yang mempunyai nilai terbesar
C ← C - {x}
if (Σ (nilai semua koin di dalam S) + nilai koin x <= A
then
S ← S U {x}
endif
endwhile
if (Σ (nilai semua koin di dalam S) = A then
return S
else
write(’tidak ada solusi’)
endif
Agar pemilihan koin berikutnya optimal, maka perlu mengurutkan
himpunan koin dalam urutan yang menurun (noninceasing order). Jika
himpunan koin sudah terurut menurun,maka kompleksitas algoritma
Greedy = O(n). Algoritma Greedy untuk masalah penukaran uang ini tidak
selalu menghasilkan solusi optimal (lihat contoh sebelumnya).
n
T = ∑ ❑ (Waktu di dalam sistem)
i=1
20
Jika ada n orang pelanggan, maka tedapat n! urutan pelanggan
Untuk mengevaluasi fungsi obyektif : O(n)
Kompleksitas algoritma exhaustive search = O(nn!)
21
Deklarasi
i : integer
Algoritma:
{pelanggan 1, 2, ..., n sudah diurut menaik berdasarkan ti}
for i1 to n do
write(‘Pelanggan ‘, i, ‘ dilayani!’)
endfor
Algoritma greedy untuk penjadwalan pelanggan akan selalu menghasilkan
solusi optimum.
n k
meminimumkan T = ∑ ∑ t i j
k =1 j=1
Strategi Greedy :
22
Urutkan semua aktivitas berdasarkan waktu selesai dari kecil
ke besar.
Pada setiap step, pilih aktivitas yang waktu mulainya lebih
besar atau sama dengan waktu selesai aktivitas yang dipilih
sebelumnya.
23
Kompleksitas algoritma exhaustive search untuk persoalan ini =
O(n.2n).
Pemilihan objek berdasarkan salah satu dari ketiga strategi di atas tidak
menjamin akan memberikan solusi optimal.
24
Oleh karena 0 xi 1, maka terdapat tidak berhinga nilai-nilai xi .
Persoalan Fractional Knapsack menjadi malar (continuous)
sehingga tidak mungkin dipecahkan dengan algoritma exhaustive
search.
25
x[i] ← 0 { inisialisasi setiap fraksi objek i dengan 0 }
endfor
i←0
TotalBobot ← 0
MasihMuatUtuh ← true
while (i <= n) and (MasihMuatUtuh) do
{ tinjau objek ke-i }
i←i+1
if TotalBobot + C.w[i] <= K then
{ masukkan objek i ke dalam knapsack }
x[i] ← 1
TotalBobot ← TotalBobot + C.w[i]
else
MasihMuatUtuh false
x[i] ← (K – TotalBobot)/C.w[i]
endif
endwhile
{ i > n or not MasihMuatUtuh }
return x
Kompleksitas waktu algoritma = O(n).
26
MaksimasiF = ∑ pi
i∊J
Cari himpunan bagian (subset) job yang layak dan memberikan total
keuntungan terbesar.
Strategi greedy untuk memilih job: Pada setiap langkah, pilih job i
dengan pi yang terbesar untuk menaikkan nilai fungsi obyektif F.
27
2.3.7 Pohon Merentang Minimum
A. Algoritma Prim
Pada setiap langkah, pilih sisi e dari graf G(V, E) yang mempunyai bobot
terkecil dan bersisian dengan simpul simpul di T tetapi e tidak membentuk
sirkuit di T.
Algoritma Prim
Langkah 2: pilih sisi (u, v) yang mempunyai bobot minimum dan bersisian
dengan simpul di T, tetapi (u, v) tidak membentuk sirkuit di T. Masukkan
(u, v) ke dalam T.
B. Algoritma Kruskal
28
Strategi greedy yang digunakan:
Pada setiap langkah, pilih sisi e dari graf G yang mempunyai bobot minimum
tetapi e tidak membentuk sirkuit di T.
Algoritma Kruskal
Langkah 0: sisi-sisi dari graf sudah diurut menaik berdasarkan bobotnya – dari
bobot kecil ke bobot besar
Langkah 1: T masih kosong
Langkah 2: pilih sisi (u, v) dengan bobot minimum yang tidak membentuk
sirkuit di T. Tambahkan (u, v) ke dalam T.
Langkah 3: ulangi langkah 2 sebanyak n – 1 kali.
29
b. Lintasan terpendek antara semua pasangan simpul (all pairs shortest
path).
c. Lintasan terpendek dari simpul tertentu ke semua simpul yang lain
(single-source shortest path).
d. Lintasan terpendek antara dua buah simpul yang melalui beberapa
simpul tertentu (intermediate shortest path).
30
procedure Dijkstra (input G: weighted_graph, input a: intial_vertex)
Deklarasi:
S : himpunan simpul solusi
L : array[1..n] of real { L(z) berisi panjang lintasan terpendek dari a
ke z}
Algoritma
for i←1 to n
L(vi) ← infinite
endfor
L(a) ← 0
S←{}
while z !E S do
u ← simpul yang bukan di dalam S dan memiliki L(u)
minimum
S ← S U {u}
for semua simpul v yang tidak terdapat di dalam S
if L(u) + G(u,v) < L(v) then L(v) ← L(u) + G(u,v)
endfor
endwhile
31
2.3.9 Pemampatan Data dengan Algoritma Huffman
Prinsip kode Huffman:
32
2.4 Kelebihan dan Kekurangan
2.4.1. Kelebihan
Mudah diimplementasikan, algoritma Greedy sangat mudah untuk
diimplementasikan pada persoalan-persoalan yang ada.
Efisien, algoritma Greedy merupakan algoritma yang sangat efisien
karena algoritma ini selalu berusaha memilih hasil optimal.
2.4.2. Kekurangan
Tidak adanya penanganan kasus jika titik tujuan tidak ditemukan.
Tidak dapat melakukan pemantauan parameter yang melibatkan lebih
dari satu perangkat
33
BAB III
IMPLEMENTASI
3.1 Bubble Sort
a. Source Code
import java.util.Scanner;
class BubbleSort
{
private static Scanner sc;
void bubbleSort(int arr[])
{
int n = arr.length;
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
void printArray(int arr[])
{
int n = arr.length;
for (int i=0; i<n; ++i)
System.out.print(arr[i] + " ");
System.out.println();
}
public static void main(String args[])
{
BubbleSort ob = new BubbleSort();
sc = new Scanner (System.in);
System.out.print("Masukan Jumlah Angka =");
int angka = sc.nextInt();
int arr[] = new int[angka];
for (int i=0;i<angka;i++) {
arr[i] = sc.nextInt();
}
ob.bubbleSort(arr);
System.out.println("Hasil Pengurutan
Angka :");
ob.printArray(arr);
}
}
b. Hasil Program
34
3.2 Bilangan Prima
a. Source Code
import java.util.*;
public class Prima {
private static Scanner s;
static boolean Cek(int n)
{
if (n <= 1)
return false;
for (int i = 2; i < n; i++)
if (n % i == 0)
return false;
return true;
}
public static void main(String[] args)
{
s = new Scanner (System.in);
System.out.print("Masukan Angka yang ingin
diperiksa :");
int nilai = s.nextInt();
if(Cek(nilai))
System.out.println(nilai+" adalah Bilangan
Prima") ;
else
System.out.println(nilai+" Bukan Bilangan
Prima");
}
}
b. Hasil Program
35
{
for (int i = 0; i < n; i++)
{
System.out.print(poly[i]);
if (i != 0)
{
System.out.print("x^" + i);
}
if (i != n - 1)
{
System.out.print(" + ");
}
}
}
public static void main(String[] args)
{
sc = new Scanner (System.in);
System.out.println("Masukan banyak pangkat
untuk membuat Polinom");
int pangkat = sc.nextInt();
System.out.println("Masukan angka Polinom :
");
int A[] = new int [pangkat];
for (int i=0;i<pangkat;i++) {
A[i] = sc.nextInt();
}
}
b. Hasil Program
36
while((j < plength) && (text.charAt(i+j)
== tobematched.charAt(j))){
j++;
}
if(j == plength){
return i;
}
}
return -1;
}
}
b. Hasil Program
37
}
public Titik(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
public String getKoordinat() {
return "("+x+","+y+")";
}
public static double hitJarak(Titik t1, Titik t2) {
double dx = t1.x - t2.x;
double dy = t1.y - t2.y;
return Math.sqrt(dx * dx + dy * dy);
}
}
b. Hasil Program
38
3.6 Travelling Salesman Problem
a. Source Code
import java.util.Scanner;
public class TSP {
static int tsp(int[][] graph, boolean[] v,
int currPos, int n,
int count, int cost, int ans)
{
if (count == n && graph[currPos][0] > 0)
{
ans = Math.min(ans, cost + graph[currPos][0]);
return ans;
}
for (int i = 0; i < n; i++)
{
if (v[i] == false && graph[currPos][i] > 0)
{
v[i] = true;
ans = tsp(graph, v, i, n, count + 1,
cost + graph[currPos][i],
ans);
v[i] = false;
}
}
return ans;
}
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
System.out.println("Masukan Jumlah Node : ");
int sim = sc.nextInt();
//int arr[] = new int[angka];
int graph[][] = new int[sim][sim];
for(int i=0;i<sim;i++) {
System.out.println("Titik "+(i+1));
for(int j=0;j<sim;j++) {
System.out.println("Masukan jarak dari
titik "+(i+1)+" ke titik "+(j+1));
graph[i][j]= sc.nextInt();
}
}
39
boolean[] v = new boolean[sim];
v[0] = true;
int ans = Integer.MAX_VALUE;
ans = tsp(graph, v, 0, sim, 1, 0, ans);
System.out.println("Jarak Terdekat adalah "+ans);
}
}
b. Hasil Program
40
}
public static void main(String args[])
{
Scanner sc = new Scanner (System.in);
System.out.print("Masukan Jumlah Barang : ");
int n = sc.nextInt();
System.out.print("Masukan Jumlah Maksimal
Berat Barang : ");
int W = sc.nextInt();
int val[] = new int[n];
int wt[] = new int[n] ;
}
b. Hasil Program
41
return 1;
if (n < 0)
return 0;
if (m <=0 && n >= 1)
return 0;
return count( S, m - 1, n ) +
count( S, m, n-S[m-1] );
}
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
System.out.print("Masukan Nilai Uang yang
ingin ditukar : ");
int uang = sc.nextInt();
System.out.print("Masukan Jumlah Uang
Pecahan : ");
int jum = sc.nextInt();
int arr[] = new int [jum];
for (int i=0;i<jum;i++){
System.out.print("Uang Pecahan ke - "+
(i+1)+" : ");
arr[i] = sc.nextInt();
}
System.out.println("Jumlah Penyelesaian adalah
"+count (arr, jum, uang));
}
}
b. Hasil Program
42
for (j = 1; j < n; j++)
{
if (s[j] >= f[i])
{
System.out.print(j+" ");
i = j;
}
}
}
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
System.out.print("Masukan Jumlah Pekerjaan :
");
int n = sc.nextInt();
int s[] = new int [n];
int f[] = new int[n];
for(int i=0;i<n;i++) {
System.out.println("Pekerjaan ke - "+
(i));
System.out.print("Masukan Waktu Awal:
");
s[i]= sc.nextInt();
System.out.print("Masukan Waktu Akhir :
");
f[i]= sc.nextInt();
System.out.println();
}
printMaxActivities(s, f, n);
System.out.println();
}
}
b. Hasil Program
43
{
Scanner sc = new Scanner (System.in);
System.out.print("Masukan Jumlah Barang : ");
int n = sc.nextInt();
System.out.print("Masukan Jumlah Maksimal
Berat Barang : ");
int capacity = sc.nextInt();
int val[] = new int[n];
int wt[] = new int[n] ;
for(ItemValue i: iVal)
{
int curWt = (int) i.wt;
int curVal = (int) i.val;
44
totalValue += curVal;
}
else
{
double fraction =
((double)capacity/(double)curWt);
totalValue += (curVal*fraction);
capacity = (int)(capacity -
(curWt*fraction));
break;
}
}
return totalValue;
}
static class ItemValue
{
Double cost;
double wt, val, ind;
public ItemValue(int wt, int val, int ind)
{
this.wt = wt;
this.val = val;
this.ind = ind;
cost = new Double(val/wt );
}
}
}
b. Hasil Program
45
char id;
int deadline;
int profit;
Job(char id, int deadline, int profit)
{
this.id = id;
this.deadline = deadline;
this.profit = profit;
}
}
public static class Sorted implements Comparator {
public int compare(Object o1, Object o2)
{
Job j1 = (Job)o1;
Job j2 = (Job)o2;
if (j1.profit != j2.profit)
return j2.profit - j1.profit;
else
return j2.deadline - j1.deadline;
}
}
public static void printJobScheduling(Job jobs[],
int n)
{
Sorted sorter = new Sorted();
Arrays.sort(jobs, sorter);
TreeSet<Integer> ts = new TreeSet<>();
for (int i = 0; i < n; i++)
ts.add(i);
for (int i = 0; i < n; i++) {
Integer x = ts.floor(jobs[i].deadline -
1);
if (x != null) {
System.out.print(jobs[i].id + "
");
ts.remove(x);
}
}
}
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
System.out.print("Masukan Jumlah Pekerjaan :
");
int n = sc.nextInt();
Job[] jobs = new Job[n];
46
Pekerjaan ke - "+(i+1)+" : ");
int prof = sc.nextInt();
jobs[i] = new Job(nama,waktu,prof);
System.out.println();
}
System.out.print("Urutan Pekerjaan yang
Dikerjakan adalah ");
printJobScheduling(jobs, n);
System.out.println();
}
}
b. Hasil Program
47
System.out.println(parent[i] + " - " + i
+ "\t" + graph[i][parent[i]]);
}
void primMST(int graph[][])
{
int parent[] = new int[V];
int key[] = new int[V];
Boolean mstSet[] = new Boolean[V];
for (int i = 0; i < V; i++) {
key[i] = Integer.MAX_VALUE;
mstSet[i] = false;
}
key[0] = 0;
parent[0] = -1;
for (int count = 0; count < V - 1; count++) {
int u = minKey(key, mstSet);
mstSet[u] = true;
for (int v = 0; v < V; v++)
if (graph[u][v] != 0 && mstSet[v]
== false && graph[u][v] < key[v]) {
parent[v] = u;
key[v] = graph[u][v];
}
}
printMST(parent, graph);
}
48
}
b. Hasil Program
49
{
return this.weight-compareEdge.weight;
}
};
class subset
{
int parent, rank;
};
int V, E;
Edge edge[];
Kruskal(int v, int e)
{
V = v;
E = e;
edge = new Edge[E];
for (int i=0; i<e; ++i)
edge[i] = new Edge();
}
int find(subset subsets[], int i)
{
if (subsets[i].parent != i)
subsets[i].parent = find(subsets,
subsets[i].parent);
return subsets[i].parent;
}
void Union(subset subsets[], int x, int y)
{
int xroot = find(subsets, x);
int yroot = find(subsets, y);
if (subsets[xroot].rank < subsets[yroot].rank)
subsets[xroot].parent = yroot;
else if (subsets[xroot].rank >
subsets[yroot].rank)
subsets[yroot].parent = xroot;
else
{
subsets[yroot].parent = xroot;
subsets[xroot].rank++;
}
}
void KruskalMST()
{
Edge result[] = new Edge[V];
int e = 0;
int i = 0;
for (i=0; i<V; ++i)
result[i] = new Edge();
Arrays.sort(edge);
subset subsets[] = new subset[V];
for(i=0; i<V; ++i)
subsets[i]=new subset();
for (int v = 0; v < V; ++v)
{
subsets[v].parent = v;
50
subsets[v].rank = 0;
}
i = 0;
while (e < V - 1)
{
Edge next_edge = new Edge();
next_edge = edge[i++];
int x = find(subsets, next_edge.src);
int y = find(subsets, next_edge.dest);
if (x != y)
{
result[e++] = next_edge;
Union(subsets, x, y);
}
}
System.out.println("Hasil Langkah Tercepat
adalah");
for (i = 0; i < e; ++i)
System.out.println(result[i].src+" -- "
+
result[i].dest+" == " +
result[i].weight);
}
public static void main (String[] args)
{
for(int i=0;i<E;i++) {
System.out.print("Masukan Titik
Awal: ");
graph.edge[i].src= sc.nextInt();
System.out.print("Masukan Titik
Tujuan : ");
graph.edge[i].dest= sc.nextInt();
System.out.print("Masukan Jaraknya
: ");
graph.edge[i].weight=
sc.nextInt();
System.out.println();
}
51
graph.KruskalMST();
}
}
b. Hasil Program
return min_index;
}
void printSolution(int dist[], int n)
{
System.out.println("Jarak dari Titik Awal");
for (int i = 0; i < V; i++)
System.out.println(i + " tt " +
52
dist[i]);
}
void dijkstra(int graph[][], int src)
{
int dist[] = new int[V];
Boolean sptSet[] = new Boolean[V];
for (int i = 0; i < V; i++) {
dist[i] = Integer.MAX_VALUE;
sptSet[i] = false;
}
dist[src] = 0;
for (int count = 0; count < V - 1; count++) {
int u = minDistance(dist, sptSet);
sptSet[u] = true;
for (int v = 0; v < V; v++)
if (!sptSet[v] && graph[u][v] != 0
&&
dist[u] != Integer.MAX_VALUE &&
dist[u] + graph[u][v] < dist[v])
dist[v] = dist[u] + graph[u]
[v];
}
printSolution(dist, V);
}
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
System.out.println("Masukan Jumlah Node : ");
int sim = sc.nextInt();
}
b. Hasil Program
53
3.15 Kode Kompresi Huffman
a. Source Code
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Comparator;
class HuffmanNode {
int data;
char c;
HuffmanNode left;
HuffmanNode right;
}
class MyComparator implements Comparator<HuffmanNode> {
public int compare(HuffmanNode x, HuffmanNode y)
{
54
printCode(root.right, s + "1");
}
public static void main(String[] args)
{
b. Hasil Program
55
56