Slide 1 by Mtm8hZ5h

VIEWS: 0 PAGES: 51

									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
• Buatlah algoritma untuk menentukan apakah
  suatu bilangan merupakan bilangan genap
  atau bilangan ganjil.
Flowchart
    Start



   Input n




  Hitung sisa
 bagi antara
  bilangan
  dengan 2



                Tidak
   Apakah

    Sisa = 0

  Ya

       Cetak            Cetak
       Genap            Ganjil



       End
                  Pseudocode
1.   Masukkan bilangan
2.   Bagi bilangan dengan 2
3.   Cek sisa bagi
4.   Jika sisa=0 cetak “bilangan genap”
5.   Jika sisa tidak 0 cetak “bilangan ganjil”
                         Latihan
1. 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.
                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.
  Array

(1-Dimensi)
                                  Definisi
• Sebuah tipe data yang mampu meyimpan data/variabel
  dengan nama dan tipe yang sama.
• Contoh : nilai grade dari 6 mahasiswa
                       0      1     2      3     4      5          Index
                                                                       Elemen




• 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!!!!!
                     Deklarasi

• Contoh :
  int grade[] = new int[6];
  atau
   int []grade = new int[6];
                         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()
            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
             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] );
                    }
          }
}
   Array

(Multi Dimensi)
         Array Multi Dimensi
• Digunakan untuk merepresentasikan tabel
  data.
                 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]
          Penjelasan Baris

a[0][0] a[0][1] a[0][2] a[0][3]   baris 0
a[1][0] a[1][1] a[1][2] a[1][3]   baris 1
a[2][0] a[2][1] a[2][2] a[2][3]   baris 2
     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
            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]);
               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();
                  }

      }
}
          Abstract Data Type
• Sekumpulan data dan operasi terhadap data
  tersebut yang definisi-nya tidak bergantung
  pada implementasi tertentu.
  (/www.nist.gov/dads/)
                  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.
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.
             Deklarasi Interface
• Syntax :
       public interface [InterfaceName] {

             //beberapa method tanpa body

       }

• Contoh : (interface kosong)
   public interface Facsimile{

   }
                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.
  Komponen Pembentuk Interface
1. Modifier
2. Keyword “interface”.
3. Identifier
   Merupakan nama interface yang ditentukan oleh
   programmer.
4. Body interface
   Berisi method abstract. Atau bisa juga ditambahkan
   konstanta.
                 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
     }
  Contoh : Implementasi Interface
       public class Printer implements Facsimile{

           boolean dialPhone (String number){
              return true; }
           void getDocument(int nDoc){ }
           boolean sendDocument(int nDoc){
              return true; }
           void closePhone(){ }

       }


• Class Printer melakukan implements terhadap Facsimile
  sehingga didalamnya dideklarasi ulang seluruh method
  abstract yang dimiliki oleh Facsimile.
                Multi-implements
• Sebuah class dapat melakukan implements
  lebih dari satu interface.
• Contoh :
   class Person implements PersonInterface,LivingThing,
                         WhateverInterface {

       //beberapa kode disini
   }



 Class Person implements terhadap 3 interface sekaligus, yaitu :
 PersonInterface, LivingThing dan WhateverInterface.
                  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
             Hirarki Interface
• Superinterface
  interface yang letaknya diatas interface lain.
• Subinterface
  interface yang letaknya dibawah interface lain.

                 Super interface



                         Sub interface
       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
{
     . . .
}
        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 :
  Class Mahasiswa implements StudentInterface {
       . . .
  }

• Karena StudentInterface merupakan subclass dari
  PersonInterface maka class Mahasiswa harus mendeklarasi
  ulang semua method abstract yang dimiliki oleh kedua
  interface tersebut.
             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
      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
Rekursif
                   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;
                             }
/**
    /**
    Menghitung pangkat sebuah bilangan real
        Menghitung pangkat sebuah bilangan real
    (versi rekursif).
        (versi rekursif).
    @param x bilangan yang dipangkatkan (x != 0)‫‏‬
        @param x bilangan yang dipangkatkan (x != 0)‫‏‬
    @param n pangkatnya
        @param n pangkatnya
*/
    */
public static
    public static double pangkatRekursif (double x, int n)
double pangkatRekursif (double x, int n)
    {
{
        if (n == 0) {
    if (n == 0) {
             return 1.0;
        return 1.0;
        } else if (n > 0) {
    } else if (n > 0) {
             return (x * pangkatRekursif (x, n - 1));
        return (x * pangkatRekursif (x, n - 1));
        } else {
    } else {
             return (1 / pangkatRekursif (x, -n));
        return (1 / pangkatRekursif (x, -n));
        }
    }
    }
}
                    Berapa nilai pangkat 4-2?
                                                         0.0625

                  pangkatRekursif (4.0, -2)‫‏‬
                    return (1 / pangkatRekursif (4.0, 2));




                                                                    Returning values
                                                             16.0
Recursive calls




                  pangkatRekursif (4.0, 2)‫‏‬
                    return (4.0 * pangkatRekursif (4.0, 1));

                                                             4.0
                  pangkatRekursif (4.0, 1)‫‏‬
                    return (4.0 * pangkatRekursif (4.0, 0));

                                                             1.0
                  pangkatRekursif (4.0, 0)‫‏‬
                    return 1.0;
             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).
                Aturan Rekursif
1. Punya kasus dasar
   – Kasus yang sangat sederhana yang dapat memproses input
     tanpa perlu melakukan rekursif (memanggil method) lagi
2. Rekursif mengarah ke kasus dasar
3. 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
4. Aturan penggabungan: Hindari duplikasi pemanggilan
   rekursif untuk sub-problem yang sama.
        Infinite Recursion

public static int bad (int n)
{
    if (n == 0) return 0;
    return bad (n * 3 - 1) + n - 1;
}
              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)‫‏‬
              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.
         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
             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);
   }
            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];
     }
               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;
     }
               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);
  }

								
To top