1 / 51

Algoritma dan Struktur Data

Algoritma dan Struktur Data. Materi. Algoritma Struktur Data Abstract Data Type Rekursif. Siklus Hidup Perangkat Lunak. Algoritma. Urutan langkah logis untuk menyelesaikan suatu masalah yang dituangkan secara tertulis berdasarkan alur pemikiran seseorang. Contoh Kasus.

Download Presentation

Algoritma dan Struktur Data

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Start Input n Hitung sisa bagi antara bilangan dengan 2 Apakah Sisa = 0 Tidak Ya Cetak Genap Cetak Ganjil End Flowchart

  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!!!!! 0 1 2 3 4 5 Index Elemen

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

  13. Inisialisasi • Contoh : int grade[] = {5,8,9,7,6,7}; atau : int grade[] = new int[6]; grade[0] = 5; grade[1] = 8; grade[2] = 9; grade[3] = 7; grade[4] = 6; grade[5] = 7; • 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( inti=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] baris0 a[1][0] a[1][1] a[1][2] a[1][3] baris1 a[2][0] a[2][1] a[2][2] a[2][3] baris2

  20. Penjelasan Kolom 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] Kolom 0 Kolom 1 Kolom 2 Kolom 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. (/www.nist.gov/dads/)

  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 • Interface facsimile memiliki member : 1 konstanta, 4 method abstract. public interface Facsimile{ intdotPerInches = 90; booleandialPhone (String number); void getDocument(intnDoc); booleansendDocument(intnDoc); void closePhone(); }

  28. Komponen Pembentuk Interface • Modifier • Keyword “interface”. • Identifier Merupakannama interface yang ditentukanoleh programmer. • Body interface Berisi method abstract. Ataubisajugaditambahkankonstanta.

  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] { //beberapakodedisini }

  30. Contoh : Implementasi Interface public class Printer implements Facsimile{ booleandialPhone (String number){ return true; } void getDocument(intnDoc){ } booleansendDocument(intnDoc){ return true; } void closePhone(){ } } • 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 : • 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)); } } /** Menghitungpangkatsebuahbilangan real (versirekursif). @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? 0.0625 0.0625 pangkatRekursif (4.0, -2)‏ return (1 / pangkatRekursif (4.0, 2)); pangkatRekursif (4.0, -2)‏ return (1 / pangkatRekursif (4.0, 2)); 16.0 16.0 pangkatRekursif (4.0, 2)‏ return (4.0 * pangkatRekursif (4.0, 1)); pangkatRekursif (4.0, 2)‏ return (4.0 * pangkatRekursif (4.0, 1)); Returning values Returning values Recursive calls Recursive calls 4.0 4.0 pangkatRekursif (4.0, 1)‏ return (4.0 * pangkatRekursif (4.0, 0)); pangkatRekursif (4.0, 1)‏ return (4.0 * pangkatRekursif (4.0, 0)); 1.0 1.0 pangkatRekursif (4.0, 0)‏ return 1.0; pangkatRekursif (4.0, 0)‏ return 1.0;

  42. Algoritme Rekursif Ciri masalah yang dapat diselesaikan secara rekursif adalah masalah itu dapat di-reduksi menjadi satu atau lebih masalah-masalah serupayanglebih 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 dasarataukasus 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 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 Di sebuah system, n >= 9410 tidak dapat dieksekusi public static long s (int n){ if (n == 1) { return 1; } else { return s (n - 1) + n; } }

  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; }

More Related