Algoritma dan Struktur Data

Slides:



Advertisements
Presentasi serupa
Pemrograman Berorientasi Objek (Project)
Advertisements

Membuat class sendiri.
1 Ruli Manurung & Ade AzuratFasilkom UI - IKI /2008 – Ganjil – Minggu 4 Dasar-dasar Rekursif.
Java array.
Desain dan Analisis Algoritma
Struktur Data & Algoritma Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) ‏ 1 Fasilkom UI SUR – HMM – AAFasilkom UI - IKI20100/ IKI80110P.
Modul 1- Review Java.
Pemrograman Terstruktur
SLIDE OTOMATIS PINDAH DALAM WAKTU 4-5 MENIT. A:kiriB:kanan Deklarasikan sebuah variabel dengan nama ‘isi’ yang mempunyai type array of double dengan ukuran.
Method.
Inheritance Ery Setiyawan Jullev A.
ABSTRACT CLASS & INTERFACE
INTERFACE & ABSTRACT CLASS
Encapsulation, Inheritance, polymorphism, dan interface
Variabel, Method & Constructor Oleh : Nur Hayatin, S.ST Teknik Informatika – UMM 2011.
INHERITANCE, POLYMORPHISM, DAN INTERFACE
Pewarisan, Polimorfisme, dan Interface
Algoritma dan Struktur Data
Pemrograman Berorientasi Obyek dengan JAVA Interface
Diberikan pada Kuliah Sela Teknik Informatika - Universitas Muhammadiyah Malang Tahun 2011.
Object Oriented Programming with JAVA 2011/2012
Object Oriented Programming with JAVA 2011/2012
INTERFACE & ABSTRACT CLASS Object Oriented Programming with JAVA 2011/2012.
Method, Array dan String
Structure Data - Array Pertemuan 7 Matakuliah: T0456 / Algoritma dan Metode Object Oriented Programming Tahun: 2007.
Inheritance, polymorphism, dan interface
INHERITANCE (Oleh : Nur Hayatin, S.ST)
Struktur kontrol.
Algoritma &Pemrograman 1
Algoritma & Pemrograman 1
Pertemuan 6 PEWARISAN AND POLYMORPHISM
Pada Bab sebelumnya, kita telah mendiskusikan bagaimana cara pendeklarasian berbagai macam variabel dengan menggunakan tipe data primitif. Dalam pendeklarasian.
Pemrograman Berorientasi Obyek
Java array.
Array Oleh Shoffin Nahwa Utama M.T Disampaikan pada mata kuliah Struktur Data.
Algoritma dan Struktur Data
Pengantar Struktur Data Pertemuan 1 Season 1
Pernyataan Pertemuan 3 Season 1
JAVA ARRAY.
Access Modifier.
Array Pada Bab sebelumnya, kita telah mendiskusikan bagaimana cara pendeklarasian berbagai macam variabel dengan menggunakan tipe data primitif. Dalam.
PEMROGRAMAN TERSTRUKTUR
ARRAY Adalah variabel yang menyimpan data-data yang mempunyai tipe data yang sama. Di java array di mulai dari index ke-0 sampai ke-n.
Java array.
Algoritma & pemrograman 1B
Pertemuan 5 Tipe Data, Operator, Tata Bahasa
Array Pada Bab sebelumnya, kita telah mendiskusikan bagaimana cara pendeklarasian berbagai macam variabel dengan menggunakan tipe data primitif. Dalam.
Pemrograman Berorientasi Obyek
ARRAY Siti Mukaromah,S.Kom.
Java array.
REKURSIF Learning Outcomes Pada akhir pertemuan ini, mahasiswa mampu:
Siti Mukaromah,S.Kom,MCP
MODIFIER JAVA.
Algoritma & Pemrograman 1
Java array.
MEMBUAT CLASS SENDIRI 2.
Linear Data Structures (Array)
Method (Metode).
S. Indriani Lestariningati, M.T
Java array.
STRUKTUR DATA (10) recursive function
Dhefi Cahyadi, S. Kom ARRAY / LARIK Lanjutan Dhefi Cahyadi, S. Kom
Interface pada Java Untuk memahami lebih mudah, interface sekumpulan dari method-method yang dibuat tapi belum ada operasi di dalam tubuh method tersebut,
Analisa algoritma rekursif
Java array.
Java array.
Pemrograman Berorientasi Objek
Algoritma dan struktur data
Pemrograman Berorientasi Objek
Pada Bab sebelumnya, kita telah mendiskusikan bagaimana cara pendeklarasian berbagai macam variabel dengan menggunakan tipe data primitif. Dalam pendeklarasian.
Transcript presentasi:

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.

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

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

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.

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

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

Inisialisasi grade[0] = 5; Contoh : atau : int grade[] = new int[6]; 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

Penjelasan Kolom a[0][0] a[0][1] a[0][2] a[0][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 : Contoh : (interface kosong) public interface [InterfaceName] { //beberapa method tanpa body } 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 Modifier Keyword “interface”. Identifier Merupakan nama interface yang ditentukan oleh programmer. 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){ void closePhone(){ } } implements 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 terhadap 3 interface sekaligus, yaitu : PersonInterface, LivingThing dan WhateverInterface. class Person implements PersonInterface,LivingThing, WhateverInterface { //beberapa kode disini }

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 : 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 { . . . }

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

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

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

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 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.

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