0% found this document useful (0 votes)
47 views

Romi Java 04 Algorithms October2013

This document provides an outline for a course on Java algorithms. Section 4 focuses on Java algorithms and includes subsections on introductions to algorithms, algorithm efficiency analysis, data structures using Java collections, sorting algorithms, and searching algorithms. The document includes definitions and explanations of key algorithm concepts like time complexity, space complexity, asymptotic analysis, and different approaches to algorithm analysis like empirical versus theoretical. It also outlines common computational problems addressed by algorithms.

Uploaded by

bams
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views

Romi Java 04 Algorithms October2013

This document provides an outline for a course on Java algorithms. Section 4 focuses on Java algorithms and includes subsections on introductions to algorithms, algorithm efficiency analysis, data structures using Java collections, sorting algorithms, and searching algorithms. The document includes definitions and explanations of key algorithm concepts like time complexity, space complexity, asymptotic analysis, and different approaches to algorithm analysis like empirical versus theoretical. It also outlines common computational problems addressed by algorithms.

Uploaded by

bams
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 54

Java Fundamentals:

4. Java Algorithms

Romi Satria Wahono


[email protected]
http://romisatriawahono.net
+6281586220090

1
Course Outline
1. OOP Concepts:
Konsep dan Paradigma Object-Oriented
2. Java Basics:
Memahami Sintaks dan Grammar Bahasa Java
3. Java GUI:
Swing, GUI Component, Event Handling, Pengembangan
Aplikasi GUI
4. Java Algorithms:
Pengantar Algoritma, Struktur Data, Algorithm Analysis
5. Java Advanced:
Eksepsi, Thread, Java API
6. Java Database:
Koneksi ke Database, Pengembangan Aplikasi Database
3
4. Java Algorithms

4
Java Algorithms
1. Pengantar Algoritma
2. Analisis Efisiensi Algorithm
3. Struktur Data dengan Java Collection
4. Sorting Algorithms
5. Searching Algorithms

5
4.1 Pengantar Algoritma

6
Algoritma
An algorithm is a sequence of unambiguous
instructions for solving a problem, i.e., for
obtaining a required output for any legitimate
input in a finite amount of time (Levitin, 2012)

7
Konsep Algoritma
 program = algorithm + data structure
 The nonambiguity requirement for each step of an
algorithm cannot be compromised
 The range of inputs for which an algorithm works has to be
specified carefully
 The same algorithm can be represented in several different
ways
 There may exist several algorithms for solving the same
problem
 Algorithms for the same problem can be based on very
different ideas and can solve the problem with dramatically
different speeds

8
Masalah Komputasi Penting
 Sorting
 Searching
 String processing
 Graph problems
 Combinatorial problems
 Geometric problems
 Numerical problems

9
4.2 Analisis Efisiensi Algoritma

10
Analisis Efisiensi Algoritma
 Menentukan karakteristik kinerja (memprediksi
sumber daya)
 Memilih algoritma yang paling efisien dari
beberapa alternatif penyelesaian untuk kasus yang
sama
 Mencari waktu yang terbaik untuk keperluan
praktis
 Apakah algoritma itu optimal untuk beberapa kasus
atau ada yang lebih baik

11
Analisis Efisiensi Algoritma
1. Time efficiency (time complexity):
Indicates how fast an algorithm in question runs

2. Space efficiency (space complexity):


Refers to the amount of memory units required by
the algorithm in addition to the space needed for
its input and output.

12
Analisis Efisiensi Algoritma
 Both time and space efficiencies are measured as functions
of the algorithm’s input size
 Time efficiency is measured by counting the number of
times the algorithm’s basic operation is executed
 Space efficiency is measured by counting the number of
extra memory units consumed by the algorithm
 The efficiencies of some algorithms may differ significantly
for inputs of the same size. For such algorithms, we need to
distinguish between the worst-case, average-case, and
best-case efficiencies
 The framework’s primary interest lies in the order of
growth of the algorithm’s running time (extra memory units
consumed) as its input size goes to infinity
13
Kompleksitas Komputasi
1. Worst-case: kompleksitas waktu untuk waktu
terburuk (waktu tempuh bernilai maksimum dari
suatu fungsi f(n)) atau Tmax(n)

2. Best-case: kompleksitas waktu untuk waktu


terbaik (kompleksitas waktu yang bernilai
minimum dari suatu fungsi f(n)) atau Tmin(n)

3. Average-case: kompleksitas waktu untuk kasus


rata-rata

14
Metode Analisis Algoritma
1. Asymptotic/theoretic/mathematic: berdasarkan
pendekatan secara teori atau atas dasar analisa
secara matematik

2. Empirical/Practical/Empiris/Praktis: berdasarkan
pendekatan praktis yang biasanya didasarkan atas
data-data yang telah ada atau data-data yang di-
generate / dibangkitkan

15
Asymptotic
 Menggambarkan karakteristik/perilaku suatu
algoritma pada batasan tertentu (berupa suatu
fungsi matematis)
 Dituliskan dengan notasi matematis yg dikenal dgn
notasi asymptotic
 Notasi asymptotic dapat dituliskan dengan beberpa
simbul berikut
Q O W o w

16
4.3 Struktur Data dengan
Java Collection Framework

17
Java Collection Framework
 A collection (sometimes called a container) is an
object that groups multiple elements into a single
unit
 Collections are used to store, retrieve,
manipulate, and communicate aggregate data
 Typically, they represent data items that form a
natural group, such as a poker hand (a collection
of cards), a mail folder (a collection of letters), or
a telephone directory (a mapping of names to
phone numbers)

18
Java Collection Framework
 A collections framework is a unified architecture for
representing and manipulating collections
 All collections frameworks contain the following:
1. Interfaces: These are abstract data types that represent
collections. Interfaces allow collections to be
manipulated independently of the details of their
representation
2. Implementations: These are the concrete
implementations of the collection interfaces. In essence,
they are reusable data structures
3. Algorithms: These are the methods that perform useful
computations, such as searching and sorting, on objects
that implement collection interfaces

19
Core Collection Interfaces

Collection Map
SortedSet
Set List Queque
Sorted
Set

20
Core Collection Implementation

INTERFACES IMPLEMENTATION
Hash Table +
Hash Table Resizable Array Tree Linked List
Linked List
Set HashSet TreeSet LinkedHashSet
List ArrayList LinkedList
Queue
Map HashMap TreeMap LinkedHashMap

21
Object Array
 Array standard yang dimiliki oleh Java API
(java.util)
 Array memiliki method-method:

Method Keterangan
static int binarySearch(array, key) Pencarian nilai dalam array
boolean equals(array1, array2) Membandingkan apakah dua array
memiliki nilai sama. Bekerja pada array
satu dimensi

static void sort(array) Mengurutkan isi array


static String toString(array) Mengubah nilai array menjadi String

22
Contoh Object Array
public class ArrayCari {
public static void main(String[] args) {
String[] jenisKelamin = new String[3];
jenisKelamin[0] = "laki";
jenisKelamin[1] = "perempuan";
jenisKelamin[2] = "waria";

int ketemu = Arrays.binarySearch(jenisKelamin , "perempuan");


if (ketemu > -1)
System.out.println("Data ditemukan pada: “ + ketemu);
else
System.out.println("Data tidak ditemukan.");
}
}

23
ArrayList
 ArrayList mirip dengan array, tapi memiliki
kemampuan lebih baik
 Jumlah elemen dalam ArrayList dapat berubah
secara fleksibel tergantung jumlah data yang ada di
dalamnya
 Setelah array terbentuk, data baru dapat
dimasukkan di tengah-tengah, tidak harus di akhir
elemen array
 Isi dalam array bisa dihapus, dan index dalam array
sesudahnya akan maju satu langkah untuk mengisi
slot kosong tersebut
24
ArrayList
Method Keterangan
add(object element) Menambahkan object ke dalam ArrayList
boolean equals(array1, array2) Menambahkan object ke dalam index yang ditentukan
static void sort(array) Menghapus semua elemen dalam ArrayList
static String toString(array) Mengambil object pada index tertentu
iterator() Mengembalikan iterator pada ArrayList
remove(int index) Menghapus object dengan index tertentu
remove(object element) Menghapus elemen tertentu
size() Mengembalikan nilai berupa jumlah elemen dalam
ArrayList
toArray() Mengembalikan elemen ArrayList sebagai array object
toArray(type[] array) Mengembalikan elemen ArrayList Sebagi array dengan
tipe tertentu

25
Contoh ArrayList
public class ArrayAngka{
public static void main(String[] args) {
ArrayList angka= new ArrayList();
angka.add("One");
angka.add("Two");
angka.add(3);
angka.add("Four");

for (Object i: angka) System.out.println(i);


angka.set(1, "Siji");
angka.remove(angka.size() - 1);
System.out.println(angka);
}
}

26
Vector
 Sama seperti ArrayList, Vector memiliki dua
atribut utama: kapasitas dan penambahan
kapasitas
 Penambahan kapasitas menentukan berapa
jumlah index yang akan ditambahkan, jika
index saat ini sudah tidak mencukupi

27
Vector
Method Keterangan
void add(int index, Object element) Memasukkan object ke dalam Vector dengan
index yang ditentukan
boolean add(Object element) Menambahkan Object ke dalam Vector. Jika
berhasil nilai boolean = true
void addElement(Object element)
….

28
Contoh Vector
public class VectorDemo { //menampilkan vector dengan perulangan dan size
public static void main(String[] args) { for (int i=0; i < newVector.size();i++)
Vector newVector = new Vector(); System.out.println(i + ":" + newVector.get(i));

//menambahkan data vector //menampilkan vector dengan iterator "for-loop"


newVector.add("Jakarta"); for (Iterator d = newVector.iterator(); d.hasNext(); ) {
newVector.add("Surabaya");
System.out.println("->" + d.next());
newVector.add("Semarang");
}

// menampilkan data vector pertama


}
System.out.println("Menampilkan Data Vector:");
}
System.out.println("Data Vector Pertama:"+ newVector.get(0));
System.out.println("Data Vector Pertama:"+ newVector.firstElement());
System.out.println("Data Vector Kedua: " + newVector.get(1));

// menampilkan data vector terakhir (ketiga)


System.out.println("Data Vector Ketiga: " + newVector.elementAt(2));
System.out.println("Data Vector Ketiga: " + newVector.lastElement());

//mencari index vector dan ditampilkan


System.out.println('\n' + "Mencari Data Vector:");
int idxCari = newVector.indexOf("Surabaya");
System.out.println("Nilai Index Yang Dicari Adalah: " + idxCari);
if (idxCari>=0)
System.out.println("Data yang Dicari Adalah:" + newVector.get(idxCari));

29
HashMap
 Koleksi yang memetakan kunci (key) ke dalam
nilai (value)
 Kunci dan nilai dalam HashMap boleh diset
dengan null
 HashMap tepat untuk data yang kompleks,
sehingga programmer tidak harus menghafal
letak index seperti pada array dan collection
class sequence lainnya

30
HashMap
Method Keterangan
void clear() Menghapus semua elemen dalam HashMap
sehingga ukurannya menjadi 0
boolean isEmpty() Nilai true dikembalikan jika tidak ada elemen di
dalam
int size() Mengembalikan jumlah elemen dalam
HashMap
boolean containsKey(Object key) Nilai true dikembalikan jika key ditemukan
dalam HashMap
boolean containsValue(Object Nilai true dikembalikan jika value ditemukan
value) dalam HashMap

31
Contoh HashMap
public class HashMapDemo {
public static void main(String[] args) { //mengecek data di hashmap
HashMap map = new HashMap(); System.out.println("Has Key NIM?“ +
map.containsKey("NIM"));
//menambahkan data ke hashmap
map.put("Nama", "Joko Bodo"); //mendetele data di hashmap
System.out.println("Removed: " +
map.put("NIM", new Integer(234567));
map.remove("NIM"));
map.put("Alamat", "Semarang");
//menampilkan dan melihat ukuran hashmap
//menampilkan hashmap System.out.println("Hashmap: " + map.entrySet());
System.out.println("Hashmap: " + map.entrySet());
System.out.println("Ukuran Hashmap: " + map.size()); System.out.println("Ukuran Hashmap:" +
map.size());
//menambahkan data ke hashmap }
map.put("Situs favorit", "ilmukomputer.com"); }

//menampilkan dan melihat ukuran hashmap


System.out.println("Hashmap: " + map.entrySet());
System.out.println("Ukuran Hashmap: " + map.size());

32
InterfaceIterator
 Fasilitas pada Java API yang dapat digunakan
untuk melakukan iterasi komponen-komponen
dalam Koleksi
 Ada tiga method yang sering digunakan dalam
Iterator: hasNext(), next(), remove()

Method Keterangan
hasNext() Menentukan apakah masih ada sisa koleksi
next() Mengembalikan elemen object pada koleksi. Jika sudah tidak ada
elemen lagi namun berusaha diambil maka akan muncul pesan:
NoSuchElementException
remove() Menghapus elemen yang terakhir kali diakses oleh Iterator

33
Contoh Iterator
while (v.hasNext()){
Object ob = v.next();
System.out.println(v);
}

for(Iterator i = v.iterator(); i.hasNext();){


String name = (String) i.next();
System.out.println(name);
}

34
Generic
 Implementasi tipe data pada koleksi
 Tanpa adanya generic, tipe data berbeda-beda dapat
dimasukkan dalam sebuah koleksi. Ketika data tersebut
diambil, maka perlu dilakukan casting
 Misal method seperti di bawah:
public boolean add (Object o){
//statements
}
 Untuk pengambilan data, harus dilakukan casting tipe data:
Mahasiswa mhs = (Mahasiswa) organisasi.get();
 Masalah muncul jika ada beberapa elemen yang bukan bertipe
Mahasiswa, elemen lain mungkin saja ada karena semua
object dapat ditambahkan dengan metode add() diatas
35
Generic
 Tipe generic pada koleksi dapat diterapkan
dengan menambahkan tanda <>
 Bila kita berusaha menambahkan elemen
dengan tipe data berbeda, maka akan keluar
error
 Dengan adanya generic, program dapat lebih
handal, karena kesalahan programmer dapat
dicegah

36
4.4 Sorting Algorithms

37
Sorting Algorithms
 Algoritma sorting adalah algoritma dasar yang
paling sering digunakan
 Data dalam keadaan yang sudah urut (sesuai
dengan kunci pengurutan tertentu) akan
memudahkan kita dalam manipulasi berikutnya
 Beberapa algoritma sorting:
• Bubble Sort
• Merge Sort
• Selection Sort

38
Bubble Sort
 Pengurutan dengan membandingkan suatu elemen
dengan elemen berikutnya
 Jika elemen sekarang lebih besar daripada elemen
berikutnya maka elemen tersebut akan ditukar
 Data yang ingin diurutkan: 34, 86, 15
 Catatan: data[i], data[i+1]
• data[0] = 34
• data[1] = 86
• data[2] = 15
 Menukar data:
39
Alur Algoritma Bubble Sort (34 86 15)

Langkah 0 Langkah 1
34 86 15 34 15 86
tukar
tidak tukar

15 34 86
34 86 15
tukar

34 15 86

40
Alur Algoritma Bubble Sort (34 86 15)
LANGKAH bilangan[0] bilangan[1] Bilangan[2]
34 86 15
0 34 15 86
34 15 86
15 34 86
1
15 34 86

41
BubbleSort.java BubbleSortBeraksi.java
public class BubbleSort { public class BubbleSortBeraksi{
public static void urutkan(int data[]){ public static void main(String[] args){
for(int langkah=0; langkah<data.length; langkah++){
for(int indeks=0; indeks<data.length-1; indeks++){ int data[] = {34, 86, 15};
if(data[indeks]>data[indeks+1]){
int temp = data[indeks]; System.out.print("Data awal: ");
data[indeks] = data[indeks+1]; for(int i=0;i<data.length;i++){
data[indeks+1] = temp; System.out.print(data[i] + " ");
} }
}
} BubbleSort.urutkan(data);
}
} System.out.print('\n' + "Data hasil: ");
for(int i=0;i<data.length;i++){
System.out.print(data[i] + " ");
}
System.out.println();
}
}
42
Latihan: Versi GUI dari BubbleSort

43
Selection Sort
 Pengurutan dengan mencari elemen berikutnya
sampai elemen terakhir
 Jika ditemukan elemen lain yang lebih kecil dari
elemen sekarang, maka elemen tersebut akan
ditukar
 Data yang ingin diurutkan: 34, 86, 15

44
Selection Sort untuk Data 34 86 15

Langkah 1 Langkah 2
34 86 15 15 86 34
1 1 1 2

34 86 15
1 2 15 34 86
tukar

15 86 34
tukar

45
SelectionSort.java SelectionSortBeraksi.java
public class SelectionSort { public class SelectionSortBeraksi{
public static void urutkan(int data[]){ public static void main(String[] args){
for(int langkah=0; langkah<data.length-1; langkah++){
int indeksTerkecil=langkah; int data[] = {34, 86, 15};
for(int indeks=langkah+1; indeks<data.length; indeks++){
if(data[indeks]<data[indeksTerkecil]) System.out.print("Data awal: ");
indeksTerkecil=indeks; for(int i=0;i<data.length;i++){
} System.out.print(data[i] + " ");
}
int temp=data[langkah];
data[langkah]=data[indeksTerkecil]; SelectionSort.urutkan(data);
data[indeksTerkecil]=temp;
} System.out.print('\n' + "Data hasil: ");
} for(int i=0;i<data.length;i++){
} System.out.print(data[i] + " ");
}
System.out.println();
}
}
46
47
Merge Sort
 Algoritma pengurutan dengan cara
menggabungkan dua kelompok data yang sudah
urut, kemudian digabung dan hasilnya adalah data
yang terurut
 Langkah algoritma Merge Sort
1. Bila jumlah item yang diurutkan adalah 0 atau 1, return
2. Urutkan secara rekursif bagian pertama dan kedua
secara terpisah
3. Gabungkan dua bagian yang sudah terurut tersebut ke
dalam sebuah kelompok terurut

48
Library Sorting
1. Buat project bernama Sorting
1. Buat dua class: BubbleSort dan SelectionSort
2. Build project Sorting supaya menghasilkan Sorting.jar

2. Buat project baru bernama SortingGUI


1. Buat aplikasi GUI yang melakukan sorting terhadap 5
bilangan bulat yang kita masukkan
2. Gunakan library Sorting.jar pada project SortingGUI
tersebut dan sajikan hasil dari BubbleSort dan
SelectionSort

49
4.5 Searching Algorithms

50
Tugas
 Pahami dan buat program dari algoritma di bawah
dengan menggunakan Java. Pilih berdasarkan digit
terakhir NPM
1. Selection sort 8. Binary Search
2. Bubble sort 9. Sequential Search
3. Merge sort 0. Depth-First Search
4. Quicksort
5. Insertion sort
6. Shell sort
7. Heapsort
 Rangkumkan secara komprehensif dalam bentuk slide
 Presentasikan di depan kelas dengan bahasa manusia

51
Tugas
 Rangkumkan secara komprehensif dalam bentuk slide:
1. Analisis Efsiensi Algoritma (Rangkumkan dari buku Levitin dan Weiss bab
1-2)
2. Algoritma (sesuai dengan NPM):
1. Pengantar Algoritma (definisi, kategorisasi algoritma, dsb … lihat levitin)
2. Tahapan Algoritma (kalimat, formula, dsb)
3. Tahapan Algoritma (Pseudocode)
4. Tahapan Algoritma (Java)
5. Tahapan Algoritma (Animasi) – (harus sinkron dengan code)
6. Penerapan untuk Studi Kasus (harus sinkron sesuai tahapan algoritma)
7. Analisis Algoritma (penghitungan efisiensi)
 Kirimkan slide, code dan animasi ke [email protected] dengan
subject [algoritma-univ] nama-nim sebelum 29 Agustus 2013
 Slide dibuat asal-asalan, kebut semalam, tidak mudah dipahami, tidak
komprehensif, tidak dengan menggunakan bahasa manusia, atau
nyontek  mendapatkan nilai E
52
Tugas
 Pahami dan buat program dari algoritma di bawah
dengan menggunakan Java (GUI)
 Pilih algoritma sesuai digit terakhir NPM:
0 Particle Swarm Optimization 5 A*
1 Neural Network 6 K-Means
2 Support Vector Machine 7 Genetic Algorithm
3 Naive Bayes 8 Ant Collony Optimization
4 C4.5 9 k-Nearest Neighbor (kNN)
 Rangkumkan secara komprehensif tentang algoritma
dan program yang dibuat dalam bentuk slide
 Presentasikan di depan kelas

53
Tugas
 Kerjakan semua latihan dan tugas yang ada di
slide Java Algorithms
 Kirimkan netbeans project yang sudah di zip ke
[email protected]
dengan subyek: [OOP4-Universitas] Nama–NIM
 Deadline: 2 minggu
 Meng-copy file orang lain akan menyebabkan
nilai tugas 0

54
Referensi
1. Sharon Zakhour et al, The Java Tutorial Fourth Edition,
http://java.sun.com/docs/books/tutorial
2. Cay Horstmann, Big Java: Earl Objects 5th Edition, John Wiley & Sons,
2013
3. Deitel & Deitel, Java Howto Program 9th Edition, Prentice Hall, 2012
4. Richard M. Reese, Oracle Certified Associate Java SE 7 Programmer
Study Guide, Packt Publishing, 2012
5. Walter Savitch, Absolute Java 5th Edition, Pearson Education, 2013
6. Mark Allen Weiss, Data Structures and Algorithm Analysis in Java 3rd
Edition, Pearson Education, 2012
7. Anany Levitin, Introduction to the Design and Analysis of Algorithms
3rd Edition, Pearson Education, 2012
8. Ying Bai, Practical Database Programming with Java, John Wiley &
Sons, 2011

55

You might also like