Minggu, 26 Desember 2010

Analytic Hierarchy Process (AHP)


Keputusan akan menjadi sulit ketika ada banyak kriteria pilihan dan tiap-tiap kriteria memiliki bobot yang berbeda. Udah gitu, kita masih dibingungkan dengan memilih satu yang terbaik dari beberapa alternatif yang ada. Agar content tidak terasa garing, mari kita bahas bagaimana Parjono memilih cewek?


Parjono adalah pemuda desa yg culun namun cerdas, sehingga bisa masuk ITB. Setelah mendapat Mata Kuliah Sistem Pendukung Keputusan (SPK), dia mempunyai strategi dalam memilih cewek.

Kamis, 23 Desember 2010

Pengenalan OOP

Object oriented programming (OOP) adalah paradigma pemrograman yang dominan saat ini, dan telah menggantikan teknik structured atau procedural programming yang telah dikembangkan sejak awal tahun 70-an. Bahasa pemrograman Java adalah bahasa pemrograman yang secara total menerapkan paradigma pemrograman berorientasi obyek.

Untuk memahami OOP lebih lanjut, penulis akan menganalogikan dengan hal berikut ini. Bagaimana perusahaan manufaktur seperti Toshiba dan Sony VIAO mampu membuat begitu banyak model notebook dan merespon kebutuhan pasar dengan cepat? Jawabannya karena perusahaan tersebut membeli komponen-komponen dari vendor-vendor yang reputasinya baik, lalu merakitnya. Mereka tidak menginvestasikan waktu untuk merancang dan membangun power supply, disk drive, motherboards, dan komponen-komponen lain.

Gambar: UML Class Diagram of  Store Software



Obyek dapat dibuat sendiri atau dibeli dengan pertimbangan efisiensi tenaga dan waktu. Salah satu contohnya, Software CRM (Customer Relationship Management) mungkin perlu membeli komponen untuk mengirim SMS dalam menunjang salah satu fungsinya seperti marketing campaign daripada mereka mengembangkan sendiri untuk alasan efisiensi waktu.

Sabtu, 18 Desember 2010

Quick Sort Algoritma

Quick Sort adalah algoritma pengurutan yang sangat cepat dengan tipe penyelesaian divide and conquer. sehingga cocok untuk mengurutkan data dalam jumlah besar. Proses pengurutan Quick Sort adalah sebagai berikut:


Minggu, 12 Desember 2010

Binary Search

Algoritma binary search adalah jenis algoritma bertipe devide and conquer yang diciptakan untuk mereduksi jumlah perbandingan secara drastis dengan cara menentukan batas daerah solusi lalu menyelesaikan (solve it) secara berulang (recursive) sampai data ditemukan. Syarat wajib bekerjanya algoritma binary search adalah data harus dalam kondisi berurutan agar proses pencarian bisa dilakukan. 

Gambar: Proses pencarian pada Binary search

Selection Sort

Tipe algoritma brute force lainnya dalam pengurutan data adalah selection sort. Dikatakan selection sort karena algoritma ini mencoba memilih satu per satu elemen data dari posisi awal, untuk mencari data paling kecil dengan mencatat posisi index-nya saja, lalu dilakukan pertukaran hanya sekali pada akhir setiap tahapan.

Algoritma Selection Sort dilakukan untuk menyempurnakan kekurangan dari bubble sort yang melakukan pertukaran setiap kali perbandingan memenuhi kriterianya.

Gambar: Hasil running

Linear Search

Salah satu contoh tipe algoritma brute force lainnya adalah linear search (pencarian berurutan), Dikatakan demikian karena algoritma ini menggunakan strategi langsung dengan membandingkan data secara berurutan (lurus) tanpa menggunakan strategi khusus.

Gambar: Linear Search

Pada contoh di atas terlihat, terdapat 15 data dan dilakukan pencarian terhadap kosakata "access". Jika linear search dimulai dari kiri, maka posisi berawal dari elemen ke-1 dan membandingkannya sampai ketemu. Kompleksitas dari algoritma ini sebanyak n pebandingan untuk kasus terburuk (data tidak ditemukan atau berada di posisi terakhir). Bila rata-rata posisi data ada ditengah, maka kompleksitas menjadi 1/2 n. 

Bubble Sort

Salah satu contoh tipe algoritma brute force adalah bubble sort (pengurutan gelembung). Dikatakan demikian karena algoritma ini menggunakan strategi langsung dengan membandingkan semua posisi dan melakukan pertukaran.

Gambar: Tahapan pengurutan data pada  bubble sort

Jumat, 10 Desember 2010

Linear Congruential Generator

Gambar: Hasil running LCG
Salah satu Pembangkit bilangan acak Semu atau Pseudo Random Number Generator (PRNG) sebagai dasar yang cukup baik untuk dipelajari adalah Linear Congruential Generator (LCG) dengan rumus:

Xn = (a * Xn – 1 + b) mod m

Dimana:
  • Xn = bilangan acak ke-n dari deretnya
  • Xn – 1 = bilangan acak sebelumnya
  • a = faktor pengali
  • b = increment
  • m = modulus pembagi

Pembangkit Bilangan Acak

Bilangan acak (random) adalah bilangan yang tidak dapat diprediksi kemunculannya. Bilangan acak sering kali digunakan pada kriptografi. Beberapa penerapannya antara lain:
  1. Pembangkit kunci panjang yang berukuran sama dengan plaintext-nya (One Time Pad) pada algoritma kunci-simetris berbasis stream cipher.
  2. Pembangkit initialization vector (IV) pada algoritma kunci-simetri.
  3. Pembangkit parameter kunci pada algoritma kunci-publik. 

Minggu, 05 Desember 2010

Enkripsi dengan XOR

Seiring dengan hadirnya komputer yang memperkenalkan sistem bilangan bit biner dan byte dalam penyimpanan dan pemrosesan data, Bitwise operator XOR (Exlusive OR) digunakan sebagai operasi dasar yang paling banyak digunakan dalam enkripsi berbasis byte. Operator XOR akan menghasilkan bit 1 bila kedua operand (A dan B) berbeda dan  menghasilkan bit 0 bila kedua operator sama (A dan B), bernilai 0 semua atau 1 semua. Lihat tabel kebenaran di atas.

Sabtu, 04 Desember 2010

Algoritma

Algoritma adalah langkah-langkah komputasi yang mentransformasikan data masukan menjadi keluaran.


Algoritma dapat ditulis dengan notasi:
  1. Flow chart atau Bagan alir
  2. Pseudo-code (gabungan antara bahasa alami dengan bahasa pemrograman)
  3. Kalimat-kalimat deskriptif
Algoritma yang paling baik adalah Algoritma yang benar dan mangkus (efficient). Algoritma yang mangkus artinya algoritma yang membutuhkan waktu (time) yang pendek dan ruang memori (space) untuk komputasi yang minimum, dalam menyelesaikan suatu masalah.

Jumat, 03 Desember 2010

Enkripsi dengan SHIFT

Selain menggunakan operator XOR, kita bisa menggunakan bitwise operator pergeseran bit dengan Shift Left dan Shift Right untuk melakukan enkripsi berbasis bit dan byte. Pada bahasa C, C++ dan Java, operator Shift Left adalah tanda << dan operator Shift Right adalah tanda >>. 
 
 

Senin, 22 November 2010

Bilangan Fibonacci

 

Deret bilangan ini disusun oleh Leoanardo Fibonacci pada tahun 1175 - 1245 M. Para ilmuwan pada jaman dahulu mengatakan bahwa angka-angka dalam Fibonacci adalah salah satu bukti adanya Tuhan (disebut juga angka Tuhan).

Salah satu fenomena alam yang berhubungan dengan angka-angka Fibonacci adalah jumlah helai pada bunga, bila diamati, ternyata mengikuti deret fibonacci. contohnya:
  • jumlah helai bunga 3 : bunga lili, iris, jumlah helai bunga 5 : buttercup 
  • jumlah helai bunga 13 : ragwort, corn marigold, cineraria (bunga kuning di atas = 13 helai)
  • jumlah helai bunga 21 : aster, black-eyed susan, chicory, jumlah bunga 34 : plantain, pyrethrum

Sebenarnya, masih banyak lagi fenomena alam yang berhubungan dengan angka fibonacci, tetapi penulis ingin menjelaskan urutan angka pada deret finonacci. 


Deret bilangan fibonacci adalah deret nilai_saat_ini = nilai_sebelumnya + nilai_sebelumnya_lagi.

Minggu, 21 November 2010

3. Delete Node pada Linked List

Delete Node at First position


Menghapus node diawal sangatlah mudah karena anda tidak perlu melakukan traverse/penelusuran. Perhatikan kode program C++ berikut ini beserta komentarnya.

node *temp;    // deklarasikan variable pointer bertipe node
temp = head;   // pointer temp menunjuk ke alamat yg sama dengan yang ditunjuk head.
// ini bukan merupakan duplikasi, ibarat satu orang dengan nama Arisandi Hutama, bisa
// mempunyai 2 nama panggilan yang berbeda, di rumah dipanggil Ari, di kampus dipanggil Sandi
// yang keduanya (head dan temp), menunjuk ke obyek yang sama. 


Kamis, 18 November 2010

Konversi Biner ke Desimal


Perlu diketahui, tiap posisi bit sebelah kiri selalu berukuran 2 kali lipat dari bit sebelah kanannya. Bit paling kanan adalah paling rendah (LSB=Low Significant Bit), yang paling kiri adalah paling tinggi. Ibarat kalo desimal, paling kanan adalah satuan (paling rendah) dan paling kiri adalah paling tinggi (bisa ribuan, jutaan tergantung jumlah digit).

Rabu, 03 November 2010

2. Insert Node dan Traverse LL

 a) Insert Node at First position


Untuk memasukan node di posisi awal, kita harus terlebih dahulu membuat node baru, lalu menyambungnya dengan linked list yang sudah ada. Terakhir, ubah pointer head ke node yg baru dibuat.

cout << "MASUKAN DATA :"; // cetak ke layar
cin >> angka; // baca data dari keyboard

node *temp;               // deklarasi var pointer yang menunjuk ke node.
temp = (node*)malloc(sizeof(node)); // ciptakan node baru kosong
temp->data = angka;  // isi data
temp->next = head;    // sambung alamat berikutnya ke arah alamat yg ditunjuk head
head = temp;              // ubah alamat pointer head untuk menunjuk temp.
temp = NULL;           // ubah pointer temp ke null agar tidak menunjuk kemanapun.

Kamis, 28 Oktober 2010

Konversi Desimal ke Biner

Metode konversi ini sebenarnya mirip saat kita dilatih oleh guru SD cara membagi suatu bilangan. Namun metodenya sedikit dimodifikasi, yaitu bilangan desimal dibagi 2 dan seterusnya sampai hasil bagi terakhir < 2 (angka 1, warna biru tebal di paling bawah).

Sabtu, 23 Oktober 2010

Kelipatan Persekutuan Terkecil (KPK)

Dalam matematika, Kelipatan Persekutuan Terkecil (KPK) dari adalah bilangan bulat positif terkecil yang dapat membagi habis kedua bilangan yang dimaksud.

Metode sederhana
Carilah KPK dari 12 dan 20 ?
  • Kelipatan dari 12 = 12, 24, 36, 48, 60, 72, 84, ...
  • Kelipatan dari 20 = 20, 40, 60, 80, 100, 120, 140, ...
KPK dari 12 dan 20 adalah 60 karena 60 adalah bilangan terkecil yang dapat membagi habis 12 dan 20

Algoritma KPK metode sederhana:
  1. Baca 2 data dari keyboard bil1 dan bil2
  2. Jika bil1 < 2 atau bil2 < 2, ulang ke baris ke-1
  3. Jika bil1 = bil2, ulang ke baris ke-1
  4. Inisialisasi kpkbil1 = bil1 dan kpkbil2 = 2
  5. Jika kpkbil1 = kpkbil2 maka lompat ke baris ke-7
  6. Jika kpkbil1 > kpkbil2 maka kpkbil2 = kpkbil2 + bil2, jika tidak maka kpkbil1 = kpkbil1 + bil1.
  7. ulang ke baris ke-5
  8. Cetak bilangan KPK = kpkbil1
  9. Selesai
Kode bahasa C++ KPK metode sederhana

Jumat, 22 Oktober 2010

Faktor Persekutuan Terbesar (FPB)

Dalam matematika, Faktor Persekutuan Terbesar (FPB) adalah bilangan bulat positif terbesar yang dapat membagi habis kedua bilangan.

Metode Sederhana

Carilah FPB dari bilangan 12 dan 20 ?

Faktor dari 12 = 1, 2, 3, 4, 6 dan 12
Faktor dari 20 = 1, 2, 4, 5, 10 dan 20

FPB dari 12 dan 20 adalah 4, maksudnya tidak ada bilangan yang lebih besar dari 4 yang dapat membagi habis bilangan 12 dan 20.

Metode faktorial
Carilah FPB dari bilangan 147 dan 189

1. Buat pohon faktor dari kedua bilangan tersebut

Selasa, 19 Oktober 2010

1. Membuat Node Baru Linked List

Pada contoh linked list di blog, hanya dijelaskan single link listed. Ini diberikan agar anda memiliki dasar yang kuat sebelum mencoba membuat Circular linked list, Double linked list maupun Double linked list berpointer ganda (head dan tail). Untuk membuat linked list pertama kali, anda perlu mendeklarasikan tipe data struct atau class yang berisi 2 atribut yaitu data dan next (alamat node selanjutnya). Pada contoh ini, saya menggunakan tipe struct standard yang didukung bahasa C, sedangkan tipe struct dan class hanya didukung C++. Class adalah blue print dari suatu object dalam istilah OOP (Object Oriented Programming).

typedef struct node                                               
{                                                              
      int data; // menyimpan data bertipe integer
      node *next;  // pointer reference bertipe node yang akan menunjuk node selanjutnya
};     

Representasi proses pembuatan node pertama pada single linked list, ditunjukan pada gambar dan kode program C-nya sbb:


Minggu, 10 Oktober 2010

Konversi Biner ke Hexadesimal


Konversi ini adalah konversi yang paling mudah dipahami, karena setiap kumpulan bit-bit dikelompokan dalam 4 bit dimulai dari posisi paling kanan atau LSB (Low Significant Bit), contoh:

1010-1000 = A8 karena 1010=A, 1000=8


Bila jumlah digit bilangan biner tidak habis dibagi 4, tambahkan angka 0 didepannya sampai genap dikelompokan 4 bit - 4 bit. 

Rabu, 22 September 2010

Bilangan Prima

Bilangan prima adalah bilangan bilangan bulat positif  yang hanya bisa dibagi 1 dan bilangan itu sendiri. Contohnya : 2, 3, 5, 7, 11, 13, 17, dan seterusnya. Bilangan prima dimulai dari 2 karena angka 1 bukan bilangan prima.


Petunjuk penting !
Untuk mengecek suatu bilangan termasuk prima atau bukan, contoh 27. Maka 27 harus dicoba dibagi dengan 2, 3, 4, 5, 6, sampai setengah dari angka 27 yaitu 13 (pembulatan). Jika pada tiap-tiap pengujian terdapat sisa bagi, maka 27 bukan bilangan prima. Hal tersebukan karena bilangan 27 habis dibagi 3 = 9 (sisa bagi 0).

Contoh lain 17, dicoba untuk dibagi dengan 2, 3, 4, 5, sampai setengah dari 17 yaitu 8, ternyata seluruh hasil pengujian ada sisa bagi, sehingga 17 adalah bilangan prima.

Minggu, 19 September 2010

Linked List

Linked List adalah suatu struktur data yang terdiri dari node/elemen sejenis yang saling berhubungan satu sama lain, secara berurutan, dimana tiap node berisi 2 jenis atribut, yaitu data dan alamat untuk menunjuk node selanjutnya.




Perbedaan antara struktur data Array dan Linked List
Array
  • Jumlah elemen sudah ditentukan saat elemen dibuat sebelum tiap-tiap elemen diisi.
  • Keuntungannya adalah kecepatan akses array sangat cepat karena dapat mengakses elemen tertentu dengan menyebutkan index-nya langsung. Selain itu pemrogramannya sangat mudah.
  • Kerugiannya adalah pemborosan ruang memory seandainya hanya sedikit elemen yang diisi/terpakai,selain itu bila ingin elemen telah penuh, maka array tidak bisa menambah elemen baru. Kita harus membuat array baru atau mendefinisikan ulang ukuran array dengan konsekuensi, elemen-elemen yang sudah terisi akan terhapus seluruhnya.

Sabtu, 18 September 2010

Sistem Bilangan Digital

Kalian mungkin sudah terbiasa dengan bilangan sistem desimal, yang sudah dipelajari sejak TK, dimana kombinasi setiap digit hanya ada sepuluh macam, yaitu dari 0 sampai 9, atau lebih sering disebut bilangan basis 10. Ketika anda memasuki kuliah, khususnya teknik elektro, teknik komputer (computer engineering), teknik informatika (computer science), maka akan sering menjumpai sistem bilangan binary, hexadecimal selain decimal yang sudah anda pelajari.

Sistem bilangan binary (0 dan 1 saja) digunakan karena komputer adalah peralatan elektronik, dan untuk memproses data, komputer menggunakan sinyal elektrik dimana biner 1 diwakili oleh tegangan positif dan biner 0 diwakili tekanan negatif.




Selasa, 14 September 2010

Validasi Tanggal

Program validasi tanggal adalah sebuah program yang menentukan apakah tanggal yang dimasukkan oleh pengguna benar atau salah. Pengguna harus memasukkan angka untuk tanggal, bulan serta 4 digit tahun sebagai nilai-nilai yang terpisah. 


Sabtu, 21 Agustus 2010

Palindrom


Palindrom adalah sebuah program komputer yang dapat menentukan apakah sebuah kata atau frase memiliki ejaan yang sama, baik di baca secara maju maupun mundur.


Kamis, 19 Agustus 2010

Variabel Pointer


Sebelum membuat linked list dalam bahasa C atau C++, anda harus memahami konsep pointer. Apakah itu pointer? Pointer adalah suatu variabel yang berisi alamat memory dari variabel lain. Konsep pointer secara sempurna didukung oleh bahasa pemrograman C/C++.

Perhatikan gambar di atas, ketika ketika berbicara variabel maka ada 3 hal yang perlu anda pahami:

Syntax Java, Bagian 1

Gambar: Bahasa Java dengan editor Netbean

Braces
Kurung Kurawal { } digunakan mengelompokan beberapa statement ke dalam suatu blok program.
  • Definisi class
  • Definisi method
  • Struktur pengulangan dengan for, while, do .. while
  • Struktur percabangan dengan if, switch
  • Struktur penanganan error, try .. catch .. finally

while (! kata.equal("keluar)) {
   System.out.println(kata);
   saveDB(kata); 
   kata = sc.readLine();
}  

Selain itu, digunakan untuk inisialisasi nilai bersamaan dengan deklarasi pada variabel array.
int[] i = {1, 2, 3};