Category Archives: Semester 3

“Greedy Methods”


Greedy = Serakah;

Secara arti, greedy methods berarti seperti memilih langsung sesuai perkiraannya dan ingin cepat tanpa mempertimbangkan hasilnya terlebih dahulu. Greedy methods merupakan solusi yang lumayan baik dalam menyelesaikan masalah, tapi bukan solusi yang terbaik.

Teknik yang popular dalam Problem Solving : 

– Greedy Method

(Memilih secara cepat sesuai perkiraannya tanpa mempertimbangkan hasilnya lebih dulu)

– Dynamic Programming

(Memilih alternatif; Contoh : rute dari Jakarta ke Surabaya bisa melalui akses darat atau udara)

– Data Compression

(Data yang besar dicompress menjadi yang lebih kecil lagi)

– Backtracking

(Jika jalan / langkahnya sudah tidak memungkinkan maka akan pindah ke jalan / langkah yang lebih memungkinkan)

– Branch and Bound

(Algoritma umum untuk menemukan solusi optimal dari berbagai variasi masalah)

 

Knapsack Problem in Greedy Method

– Fractional Knapsack Problem >> Dapat diatasi dengan GM

(Value tertinggi dalam satuan dicari dan jumlah pengambilan bisa desimal)

 

– 0/1 Knapsack Problem >> Tidak dapat diatasi dengan GM

(Mencari semua kemungkinan value dengan tabel untuk mendapat value tertinggi)

 

– Bounded Knapsack Problem >> Dapat diatasi dengan GM

(Data harus berbeda-beda untuk mendapatkan value tertinggi)

 

– Unbounded Knapsack Problem >> Dapat diatasi dengan GM

(Data bisa sama untuk mendapatkan value tertinggi)

“Cohesion & Coupling”


Notes : Penjelasan di bawah ini hanya sebagian garis besar tentang Cohesion & Coupling. Untuk penjelasan selengkapnya akan di-update mendatang 😀 

Cohesion / Kohesi : Keeratan hubungan elemen-elemen di dalam suatu modul

Cohesion Level : 

*Cohesion Attribute* 

Coincidental (Low Cohesion)

Logical

Temporal

Procedural

Communicational

Sequential

Functional (High Cohesion)

*Resultant Module Strength*

Coincidental (Weakest)

Logical

Temporal

Procedural

Communicational

Sequential

Functional (Strongest)

Coupling : Keeratan hubungan antar modul / tingkat saling kebergantungan di antara dua modul

Coupling Level : 

*Coupling Attribute*

Common (Tight Coupling / Worst)

External

Control

Stamp

Data (Loose Coupling / Best)

*Resultant Module Strength*

Common (Poorest)

External

Control

Stamp

Data (Best)

 

“Array, Vector, and ArrayList”


ARRAY

Array merupakan bagian dari struktur data dengan sekumpulan tipe data yang sama dan dinyatakan dengan nama yang sama juga. Array diakses melalui index dan dideklarasikan menggunakan [ ]. Deklarasi array tidak mengalokasikan memori. Array dapat digunakan setelah membuat array-nya terlebih dahulu. Index array dimulai dari 0 (arr[0]).

Contoh Deklarasi Array : 

double[] myList = new double[10];

atau

double[] myList;

myList = new double[10];

 

VECTOR

Vector adalah sebuah class yang diturunkan dari interface Collection, yaitu sebuah interface yang digunakan untuk pengolahan data yang bersifat seperti array dinamis. 

Arti dari array dinamis sendiri adalah array yang ukurannya dapat membesar secara dinamis ketika data yang dimasukkan melebihi daya tampung (overloaded). Setiap metode di dalam vector diberi keyword synchronized.

Contoh Deklarasi Vektor :

Vector<Kelas> variable = new Vector <Kelas>();

 

ARRAY LIST

ArrayList adalah sebuah class yang sama dengan Vector dan memiliki fungsi yang hampir sama dengan Vector, namun perbedaannya terletak pada metode yang dimiliki oleh ArrayList. Arraylist bersifat dinamis dan bisa digunakan jika kita membutuhkan array dengan batas maksimum yang tak terbatas dengan mengimplementasikannya menggunakan object.

Contoh Deklarasi ArrayList : 

ArrayList<Kelas> variable = new ArrayList<Kelas>();

 

Persamaan antara Array, ArrayList, dan Vector :

– ArrayList hampir mirip dengan Array biasa, tetapi ArrayList memiliki daya tampung yang bisa bertambah secara dinamis tanpa memiliki batas.

– Sedangkan Vector adalah implementasi dari Array dinamis yang hampir sama dengan ArrayList.

 

Perbedaan antara Array dan Arraylist :

– Daya tampung yang dimiliki Array hanya mampu menampung dari yang sudah di deklarasi

– Untuk ArrayList tidak mempunyai batas tampung seperti Array karena bentuknya yang dinamis sehingga daya tampungnya bisa membesar secara dinamis.

 

Perbedaan antara ArrayList dan Vector :

– Nama metode dari keduanya yang berbeda untuk melakukan tugas yang sama.

– ArrayList tidak thread safe sedangkan Vector sudah thread safe.

– Di dalam Vector semua metode diberi keyword synchronized sedangkan dalam ArrayList tidak ada seperti itu.

– Dalam ArrayList eksekusinya mengalami kemacetan, sedangkan untuk Vector eksekusi nya tidak mengalami kemacetan.

“Abstract Class & Interface”


Abstract Class : Merupakan class yang khusus dibuat untuk keperluan inheritance. Tujuan dari pembuatan abstract class adalah untuk membuat definisi umum bagi class-class yang akan menjadi turunan dari abstract class tersebut.

Abstract Class tidak bisa diinstansiasi dan Abstract method tidak mempunyai implementasi, sehingga penulisannya hanya dilakukan dengan menyertakan semikolon, bukan blok method {} seperti biasanya. Abstract method ini bisa digunakan oleh class turunannya dengan melakukan override.

Interface : Berfungsi sebagai antarmuka yang membentuk komunikasi dengan kode lain. Misalnya membentuk hubungan antara sebuah object dengan object yang lain atau hubungan antara object sebagai penyedia dengan kode penggunanya.

 Perbedaan Abstract Class & Interface 

Perbedaan
Abstract Class   Interface
Sebuah class hanya mampu menurunkan satu abstract class Sebuah class mampu menurunkan beberapa interface
Bisa berisi abstract dan non-abstract method Hanya boleh berisi abstract method
Method boleh bersifat static  Method tidak boleh bersifat static 
Method boleh bersifat final Method tidak boleh bersifat final
Hanya bisa meng-extend satu abstract class lainnya Bisa meng-extend satu interface atau lebih
Bisa mendeklarasikan constant dan instance variable. Hanya bisa mendeklarasikan constant.  Secara implisit, variabel yang dideklarasikan di interface bersifat public, static dan final. 
Modifier harus ditulis sendiri  Modifier tidak perlu ditulis karena secara implisit modifier untuk method di interface adalah public dan abstract.
Mempunyai contructor Tidak mempunyai constructor
Boleh mempunyai metode yang sudah diimplementasikan Tidak boleh mempunyai metode yang sudah diimplementasikan 
Sebuah abstract class dapat memiliki field dan constant yang telah didefinisikan Tidak ada field yang bisa didefinisikan dalam interface

Contoh Abstract Class 

 

public class Point extends Shape {

static int x, y;

public Point() {

x = 0;

y = 0;

}

public double area() {

return 0;

}

public double perimeter() {

return 0;

}

public static void print() {

System.out.println(“point: ” + x + “,” + y);

}

public static void main(String args[]) {

Point p = new Point();

p.print();

}

}

Contoh Interface 

 

public class Point implements Shape {

static int x, y;

public Point() {

x = 0;

y = 0;

}

public double area() {

return 0;

}

public double volume() {

return 0;

}

public static void print() {

System.out.println(“point: ” + x + “,” + y);

}

public static void main(String args[]) {

Point p = new Point();

p.print();

}

}

“Struktur Pemilihan / Selection”


Pada post ini, saya akan membahas 4 variasi dari struktur kontrol selection : 

1. Simple Selection (Simple IF Statement)

Simple selection terjadi jika harus memilih diantara dua alternatif yang ada, tergantung dari hasil kondisi apakah True atau false.
Keyword yang digunakan adalah : IF, THEN, ELSE, dan ENDIF.
Contoh :

IF saldo < $300 THEN

    bunga = 0.05

ELSE

    bunga = 0.1

ENDIF 

2. Simple Selection tanpa cabang

Simple selection ini terjadi jika sebuah statement hanya bisa dikerjakan bila kondisinya adalah TRUE.
Contoh:

IF Saldo > $300 THEN

    bunga = saldo * 0.1

ENDIF 

3. Combined Selection 

Combined Selection terjadi jika kondisi yang harus diperiksa lebih dari satu. Kondisi tersebut dapat dihubungkan dengan menggunakan AND atau OR. 
Contoh:

IF saldo > 300 AND kode = 1 THEN

     bunga = saldo * 0.1

ELSE

     bunga = saldo * 0.05

ENDIF

Note : Statement “bunga = saldo * 0.1”, akan bisa dikerjakan jika kedua kondisi yaitu saldo > 300 dan Kode = 1 bernilai TRUE.
Hal ini dikarenakan penghubung yang digunakan adalah AND.
Jika memakai OR, maka hanya membutukan salah satu kondisi yang bernilai TRUE dan Statement “bunga = saldo * 0,1” bisa dikerjakan.

4. Nested Selection 

Nested selection terjadi jika di dalam IF terdapat statement IF yang lain. Ada dua jenis nested selection :

– Linear Nested IF statement : Terjadi jika satu kondisi di cek untuk beberapa nilai.

Contoh:

IF record_code=‘A’ THEN

increment counter_A

ELSE

IF record_code=‘B’ THEN

increment counter_B

ELSE

IF record_code=‘C’ THEN

increment counter _C

ELSE

increment error_counter

ENDIF

ENDIF

ENDIF

– Non-Linear Nested IF statement : Terjadi jika beberapa kondisi harus diperiksa sebelum suatu statement dikerjakan.

Contoh : 

IF student_attendance=part_time THEN

IF student_gender=female THEN

IF student_age >21 THEN

add 1 to mature_fem_pt_students

ELSE

add 1 to young_fem_pt_students

ENDIF

ELSE

add 1 to male_pt_students

ENDIF

ELSE

add 1 to full_time_students

ENDIF

%d bloggers like this: