Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Algoritma dan Struktur Data

Presentasi serupa


Presentasi berjudul: "Algoritma dan Struktur Data"— Transcript presentasi:

1 Algoritma dan Struktur Data

2 Materi Algoritma Struktur Data Abstract Data Type Rekursif

3 Siklus Hidup Perangkat Lunak

4 Algoritma Urutan langkah logis untuk menyelesaikan suatu masalah yang dituangkan secara tertulis berdasarkan alur pemikiran seseorang.

5 Contoh Kasus Buatlah algoritma untuk menentukan apakah suatu bilangan merupakan bilangan genap atau bilangan ganjil.

6 Hitung sisa bagi antara bilangan dengan 2
Flowchart Ya Tidak Start Input n Hitung sisa bagi antara bilangan dengan 2 Apakah Sisa = 0 Cetak Genap End Cetak Ganjil

7 Pseudocode Masukkan bilangan Bagi bilangan dengan 2 Cek sisa bagi
Jika sisa=0 cetak “bilangan genap” Jika sisa tidak 0 cetak “bilangan ganjil”

8 Latihan Buatlah algoritma untuk menghitung konversi suhu.dari Celcius menjadi Reamur dan Farenheit. Input: suhu dalam Celcius Proses: R = 4/5 * C dan F = 9/5 * C + 32 Output: suhu dalam Reamur dan Farenheit 2. Buatlah algoritma untuk mencari sisi miring dari suatu segitiga siku-siku, jika diketahui panjang sisi yang membentuk sudut siku-siku. Input: a dan b, yaitu panjang sisi pembentuk sudut siku-siku Proses: Ouput: sisi miring (c) 3. Buatlah algoritma untuk menentukan suatu bilangan adalah bilangan prima atau bukan.

9 Struktur Data Cara representasi dan manipulasi data.
Representasi data : array, linkedlist, stack, queue, tree, graph. Manipulasi data menggunakan algoritma. Manipulasi data : add, remove, update, access, searching.

10 Array (1-Dimensi)

11 Definisi Sebuah tipe data yang mampu meyimpan data/variabel dengan nama dan tipe yang sama. Contoh : nilai grade dari 6 mahasiswa Keterangan Terdiri dari 6 elemen Elemen pertama pada index ke-0 elemen terakhir pada index ke-5 Array pada java selalu diawali dengan index ke-0!!!!! Index Elemen

12 Deklarasi Contoh : int grade[] = new int[6]; atau

13 Inisialisasi grade[0] = 5; Contoh : atau : int grade[] = new int[6];
Untuk mendapatkan panjang array : panggil method length()

14 Pengaksesan Elemen x = grade[5];
mengakses elemen grade pada index ke-5 yang akan diisikan ke variabel x. System.out.print(grade[0]); mengakses sekaligus menampilkan elemen grade pada index ke-0. Elemen array yang dapat diakses dimulai dari index 0 sampai elemen.length()-1

15 Contoh Program public class ArraySample {
  public static void main( String[] args ){   int[] ages = new int[100];   for( int i=0; i<ages.length; i++ ){ System.out.print( ages[i] ); }

16 Array (Multi Dimensi)

17 Array Multi Dimensi Digunakan untuk merepresentasikan tabel data.

18 Deklarasi 2D Pendeklarasian array 2 dimensi. Contoh :
int [][]a = new int[3][4]; (terdiri dari 3 baris 4 kolom) Dapat digambarkan sebagai berikut : a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]

19 Penjelasan Baris a[0][0] a[0][1] a[0][2] a[0][3] baris 0

20 Penjelasan Kolom a[0][0] a[0][1] a[0][2] a[0][3]

21 Pengaksesan Elemen Pengaksesan elemen untuk array 2 dimensi hampir sama dengan pengaksesan array 1 dimensi. Yaitu dengan cara menyebutkan index dari elemen yang ingin diakses. Contoh : x = dogs[i][j]; //mengakses elemen dogs pada baris i kolom j. atau System.out.print(dogs[i][j]);

22 Contoh Program Class MultiDimensiArray {
Public static void main(String args[]) // String array 4 baris x 2 kolom String[][] dogs = {{ "terry", "brown" },  { "Kristin", "white" }, { "toby", "gray"}, { "fido", "black"} }; For(int i=0;i<dogs.length;i++) For(int j=0;j<dogs.length[0];j++) System.out.print(dogs[i][j] ); }System.out.println(); }

23 Abstract Data Type Sekumpulan data dan operasi terhadap data tersebut yang definisi-nya tidak bergantung pada implementasi tertentu. (/

24 Interface Spesifikasi Abstract Data Type biasa disebut sebagai interface. Interface menyatakan apa yang dapat dilihat dan digunakan oleh programmer. Dalam Java, hal tersebut dinyatakan sebagai public method. Operasi-operasi yang dapat dilakukan pada abstract data type dituliskan dalam interface dan dinyatakan public.

25 Pemisahan interface dengan implementasi
Pengguna dari sebuah abstract data type hanya perlu memikirkan dan mempelajari interface yang diberikan tanpa perlu mengetahui banyak bagaimana implementasi dilakukan. (prinsip: enkapsulasi) Implementasi dapat saja berubah namun interface tetap. Dengan kata lain, implementasi dari sebuah abstract data type dapat saja berbeda-beda namun selama masih mengikuti interface yang diberikan maka program yang menggunakan abstract data type tersebut tidak akan terpengaruh.

26 Deklarasi Interface Syntax : Contoh : (interface kosong)
public interface [InterfaceName] { //beberapa method tanpa body } public interface Facsimile{ }

27 Contoh Interface public interface Facsimile{ int dotPerInches = 90; boolean dialPhone (String number); void getDocument(int nDoc); boolean sendDocument(int nDoc); void closePhone(); } Interface facsimile memiliki member : 1 konstanta, 4 method abstract.

28 Komponen Pembentuk Interface
Modifier Keyword “interface”. Identifier Merupakan nama interface yang ditentukan oleh programmer. Body interface Berisi method abstract. Atau bisa juga ditambahkan konstanta.

29 Implementasi Interface dapat diimplementasikan oleh sebuah class.
Implementasi interface menggunakan keyword “implements”. Syarat : seluruh method abstract yang ada pada interface harus dideklarasi ulang didalam class yang mengimplementasikannya. Syntax : public class [className] implements [interfaceName] { //beberapa kode disini }

30 Contoh : Implementasi Interface
public class Printer implements Facsimile{ boolean dialPhone (String number){ return true; } void getDocument(int nDoc){ } boolean sendDocument(int nDoc){ void closePhone(){ } } implements Class Printer melakukan implements terhadap Facsimile sehingga didalamnya dideklarasi ulang seluruh method abstract yang dimiliki oleh Facsimile.

31 Multi-implements Sebuah class dapat melakukan implements lebih dari satu interface. Contoh : Class Person implements terhadap 3 interface sekaligus, yaitu : PersonInterface, LivingThing dan WhateverInterface. class Person implements PersonInterface,LivingThing, WhateverInterface { //beberapa kode disini }

32 Multi-implements Multi-implements dapat menyelesaikan permasalahan multiple inheritance yang tidak diperbolehkan terjadi pada extends class. Gambaran multi-implements : Interface 1 Interface 2 Interface n class

33 Hirarki Interface Superinterface
interface yang letaknya diatas interface lain. Subinterface interface yang letaknya dibawah interface lain. Super interface Sub interface

34 Inheritance pada Interface
Interface dapat memiliki hubungan inheritance antar mereka sendiri. Menggunakan keyword “extends”. Contoh : interface PersonInterface merupakan superinterface dari student interface. public interface PersonInterface { . . . } public interface StudentInterface extends PersonInterface {

35 Implements SubInterface
Sebuah class yang mengimplementasikan subinterface wajib mendeklarasi ulang seluruh method yang ada pada subinterface tersebut dan juga method yang ada pada superinterface-nya. Contoh : Karena StudentInterface merupakan subclass dari PersonInterface maka class Mahasiswa harus mendeklarasi ulang semua method abstract yang dimiliki oleh kedua interface tersebut. Class Mahasiswa implements StudentInterface { . . . }

36 Interface & Class Persamaan : Perbedaan :
Berupa type data, sehingga interface dapat digunakan ditempat dimana sebuah class dapat digunakan (berhubungan dengan akses modifier) Perbedaan : Tidak dapat membuat object dari interface Tidak memiliki segala implementasi dari method

37 Interface & Abstract Class
Persamaan : Bertipe abstract Memiliki method abstract Perbedaan : Interface hanya berisi method abstract Variabel yang dideklarasikan didalam interface merupakan constanta Interface dapat diimplemetasikan secara multi-inheritance

38 Rekursif

39 Apa itu Rekursif? Method yang memanggil dirinya sendiri baik secara langsung maupun secara tidak langsung. f(0) = 0; f(x) = 2 f(x-1) + x2 f(1) = 1; f(2) = 6; f(3) = 21; f(4) = 58 fib(n) = fib(n - 1) + fib(n - 2)‏ public static int f (int x) { if (x == 0) return 0; return 2 * f (x - 1) + x * x; }

40 /** Menghitung pangkat sebuah bilangan real (versi rekursif). @param x bilangan yang dipangkatkan (x != 0)‏ @param n pangkatnya */ public static double pangkatRekursif (double x, int n) { if (n == 0) { return 1.0; } else if (n > 0) { return (x * pangkatRekursif (x, n - 1)); } else { return (1 / pangkatRekursif (x, -n)); } /** Menghitung pangkat sebuah bilangan real (versi rekursif). @param x bilangan yang dipangkatkan (x != 0)‏ @param n pangkatnya */ public static double pangkatRekursif (double x, int n) { if (n == 0) { return 1.0; } else if (n > 0) { return (x * pangkatRekursif (x, n - 1)); } else { return (1 / pangkatRekursif (x, -n)); }

41 Berapa nilai pangkat 4-2? pangkatRekursif (4.0, 2)‏
return (4.0 * pangkatRekursif (4.0, 1)); pangkatRekursif (4.0, 1)‏ return (4.0 * pangkatRekursif (4.0, 0)); pangkatRekursif (4.0, 0)‏ return 1.0; Recursive calls 1.0 4.0 16.0 0.0625 Returning values pangkatRekursif (4.0, -2)‏ return (1 / pangkatRekursif (4.0, 2)); pangkatRekursif (4.0, 2)‏ return (4.0 * pangkatRekursif (4.0, 1)); pangkatRekursif (4.0, 1)‏ return (4.0 * pangkatRekursif (4.0, 0)); pangkatRekursif (4.0, 0)‏ return 1.0; Recursive calls 1.0 4.0 16.0 0.0625 Returning values pangkatRekursif (4.0, -2)‏ return (1 / pangkatRekursif (4.0, 2));

42 Algoritme Rekursif Ciri masalah yang dapat diselesaikan secara rekursif adalah masalah itu dapat di-reduksi menjadi satu atau lebih masalah-masalah serupa yang lebih kecil Secara umum, algoritme rekursif selalu mengandung dua macam kasus: kasus induksi: satu atau lebih kasus yang pemecahan masalahnya dilakukan dengan menyelesaikan masalah serupa yang lebih sederhana (yaitu menggunakan recursive calls)‏ kasus dasar atau kasus penyetop (base case): satu atau lebih kasus yang sudah sederhana sehingga pemecahan masalahnya tidak perlu lagi menggunakan recursive-calls. Supaya tidak terjadi rekursi yang tak berhingga, setiap langkah rekursif haruslah mengarah ke kasus penyetop (base case).

43 Aturan Rekursif Punya kasus dasar Rekursif mengarah ke kasus dasar
Kasus yang sangat sederhana yang dapat memproses input tanpa perlu melakukan rekursif (memanggil method) lagi Rekursif mengarah ke kasus dasar Percaya. Pada proses pemanggilan rekursif, asumsikan bahwa pemanggilan rekursif (untuk problem yang lebih kecil) adalah benar. Contoh: pangkatRekursif (x, n)‏ Asumsikan: pangkatRekursif (x, n - 1) menghasilkan nilai yang benar. Nilai tersebut harus diapakan sehingga menghasilkan nilai pangkatRekursif (x, n) yang benar? Jawabannya: dikalikan dengan x Aturan penggabungan: Hindari duplikasi pemanggilan rekursif untuk sub-problem yang sama.

44 Infinite Recursion public static int bad (int n) {
if (n == 0) return 0; return bad (n * 3 - 1) + n - 1; }

45 How it works? Java VM menggunakan internal stack of activation records
Activation record dapat dilihat sebagai kertas yang berisi informasi tentang method nilai parameter variabel lokal program counter (PC)‏

46 How it works? Ketika suatu method G dipanggil, sebuah activation record untuk G dibuat dan di-push ke dalam stack; saat ini G adalah method yang sedang aktif Ketika method G selesai (return), stack di-pop; method dibawah G yang dipanggil.

47 Too Much Recursion public static long s (int n){ if (n == 1) { return 1; } else { return s (n - 1) + n; } Di sebuah system, n >= 9410 tidak dapat dieksekusi

48 Bilangan Fibonacci F0 = 0, F1 = 1, FN = FN-1 + FN-2
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... public static int fib1 (int n)‏ { if (n <= 1) return n; return fib1 (n – 1) + fib1 (n – 2); }

49 Bilangan Fibonacci Dynamic Programming menyelesaikan sub- permasalahan dengan menyimpan hasil sebelumnya. public static int fib2 (int n){ if (n <= 1) return n; int result[] = new int[n + 1]; result[0] = 0; result[1] = 1; for (int ii = 2; ii <= n; ii++) { result[ii] = result[ii - 2] + result[ii - 1]; } return result[n];

50 Bilangan Fibonacci Hanya menyimpan dua hasil sebelumnya saja.
public static int fib3 (int n){ if (n <= 1) return n; int fib1 = 0; int fib2 = 1; int result; for (int ii = 2; ii <= n; ii++) { result = fib2 + fib1; fib1 = fib2; fib2 = result; } return result;

51 Bilangan Fibonacci Implementasi rekursif yang lebih efficient.
Pendekatan Tail Recursive. public static long fib4 (int n){ return fiboHelp(0,1,n); } static long fiboHelp(long x, long y, int n){ if (n==0) return x; else if (n==1) return y; else return fiboHelp(y, x+y, n-1);


Download ppt "Algoritma dan Struktur Data"

Presentasi serupa


Iklan oleh Google