LINQPad In Action : Studi kasus Palindrome

PALINDROME ialah kata, frasa, atau kalimat yang jika dibaca dari depan atau belakang.
Misalnya:

  1. Lutfi –> bukan palindrom karena lutfi tidak sama jika dibaca dari belakang iftul
  2. onno –> merupakan palindrom karena dibaca dari depan atau belakang sama

Pertanyaannya, bagaimana cara mendeteksi apakah kata itu berupa palindrom atau bukan?

SOLUSI

[bahasa manusia] tinggal dibalik saja katanya, jika sama maka palindrom
[algoritma]

  • tentukan index min (0) dan max(panjang string dikurangi 1)
  • ulangi sampai minimum > maksimum
  •  – jika karakter dengan index min tidak sama dengan karakter index max maka bukan palindrom
  • – nilai min ditambah 1 dan max dikurangi 1
  • kata tersebut ada lah palindrom

Continue reading “LINQPad In Action : Studi kasus Palindrome”

Algoritma dan Pemrograman

Definisi Algoritma

Algoritma adalah logika, metode dan tahapan (urutan) sistematis yang digunakan untukmemecahkan suatu permasalahan.
Kamus besar bahasa Indonesia (Balai Pustaka 1988) secara formal mendefinisikan
algoritma sebagai:

Algoritma adalah urutan logis pengambilan putusan untuk pemecahan masalah.
Dari pengertian diatas sudah jelas bahwa algoritma tidak hanya identik dengan ilmu komputer atau teknik informatika, bahkan resep makanan merupakan suatu algoritma juga karena merupakan urutan sitematis untuk memecahkan masalah(membuat makanan)[MUN00]. Dan perlu diingat bahwa algoritma tidak terikat dengan bahasa pemrograman apapun, jadi dengan algoritma kita bisa menggunakan semua bahasa pemrograman yang kita mau. Yang terpenting algoritma harus dinyatakan langkah (dalam bentuk) yang dapat dimengerti oleh programmer lain . Jadi terserah kita mau bikin algoritmanya sebagai cerita atau gambar yang jelas orang lain bisa mengerti maksudnya. Dan sebagai programmer juga harus memiliki keahlian membaca algoritma. Sebagai analogi, Seorang pianis tidak dapat memainkan musik bila ia tidak mengerti not balok. Sama halnya dengan programmer, menurut [GOL88] seharusnya programmer mengerti setiap langkah dalam suatu algoritma, dan mengerjakan operasi yang bersesuaian dengan langkah tersebut.

Algoritma Vs Pemrograman
Kita mungkin sudah sering mendengar kata-kata algoritma dan pemrograman, apalagi bagi para mahasiswa teknik informatika, ilmu komputer, ataupun yang lainnya. Nah, kenapa judulnya “Algoritma Vs Pemrograman” ?? Mungkin dua kata tersebut sudah melekat disanubari kita, tapi jarang sekali yang paham bedanya, jikalau sudah paham apakah sudah diimplementasikan dengan benar?
Kita buat analogi sederhana, andaikan belajar pemrograman kita samakan dengan belajar mengendarai mobil. Maka jika kita belajar bahasa pemrograman Java, C#, atau delphi tak ubahnya seperti belajar mengendarai truk, sedan, atau bus. Jika kita sudah bisa mengendarai satu kendaraan itu pasti tidak akan sulit untuk mengendarai yang lain. Lha jika algoritma bagaimana? Tadi jika pemrograman sama saja dengan belajar mengendarai, tapi algoritma adalah belajar ngebut tapi selamat sampai tujuan. Dari analogi tersebut telah jelas beda Pemrograman dengan algoritma.

Let’s start
Sekarang kita mulai mencoba dari penulisan apa “>variabel, kebanyakan bagi para mahasiswa(TI, ilmu komputer, dll) semester awal penulisan variabel pada program sangat kacau. Misalnya dengan simbol satu karakter (int a, int b, dll) yang tidak menggambarkan apa variabel itu dan apa tipe yang digunakan. Ya mungkin karena baris kode program hanya 20 baris, jadi sangat mudah mengoreksinya, tapi jika sampai 10000 baris atau lebih anda butuh orang 1 RW lebih untuk membantu mengoreksi kode program anda.
Solusinya: misalkan kita akan membuat variabel untuk Luas bangun dengan tipe data integer(bilangan bulat), maka kita sering menulisnya sebagai berikut :
int luas; //hanya menggambarkan variabel itu dibuat untuk menampung nilai luas

Jika kita ganti sebagai berikut :
int iLuas; //terdapat tambahan huruf I yang merepresentasikan tipe data integer
int[] iArrLuas; //Arr merupakan penanda bahwa variabel itu merupakan array
float[] fArrLuas; //Arr merupakan penanda bahwa variabel itu merupakan array dan f adalah penanda jika variabel bertipe float.



Cara penulisan diatas adalah contoh penulisan dengan style saya agar memudahkan debugging(mencari serangga/bug atau kesalahan yang bikin program saya error). Anda bisa menggantinya dengan style anda sendiri yang memudahkan anda. Misalkan iLuas diganti menjadi i_luas atau intLuas.
Setelah variabel kita menuju ke komputasi program, dengan sedikit manipulasi rumus kita bisa memperoleh proses perhitungan yang jauh lebih cepat. Saya ambil kasus kombinasi,

rumusnya adalah seperti ini C(n,r)= n! / (n-r)!r!

misalkan kita menghitung C(5,2), secara konvensional kita langsung menghitungnya seperti ini
C(5,4) = 5 x 4 x 3 x 2 x 1 / (3 x 2 x 1 x 2 x 1) =10→memerlukan 11 perhitungan
namun jika kita mengganti rumusnya menjadi C(n,r) = (n-r+1)*…*n / r! perhitungannya

menjadi C(5,4) = 4×5 / 1×2 =10→ memerlukan 5 perhitungan.

Dari contoh diatas mungkin hanya sedikit sekali selisihnya, namun jika jumlah perhitungan diatas mencapat ratusan ribu dan nilai kombinasinya juga besar maka akan sangat berpengaruh.
Saya ambil contoh kasus polinomial berderajat n, saya memakai derajat 5 saja,

f(x) =ax5+bx4+cx3+dx2+ex+f    →pada perhitungan biasa terdapat 15 perkalian dan 5 penjumlahan.

Nah, apakah apakah “>masih bisa dioptimasi lagi? Dulu awalnya saya ragu apakah itu bisa disederhanakan lagi? Pasti memfaktorkannya sulit. Ternyata tidak begitu susah, saya hanya bisa geleng-geleng kepala saja saat dijelaskan Pak Wayan waktu kuliah Algoritma dan Struktur Data 2. Bagaimana bentuk fungsi yang teroptimasi? Bentuknya sebagai berikut:

f(x) =(( (((ax+b)x+c)x+d)x+e)x+f) → hanya terdapat 5 perkalian dan 5 penjumlahan

Gampang kan!! → kata2nya Pak Wayan yang sering saya dengar waktu kuliah.
Sekian dulu sedikit ilmu yang saya dapat waktu kuliah Algoritma, semoga bermanfaat…
Referensi:
Catatan kuliah
[GOL88] Goldshlager, Les & Lister, Anfrew. Computer Science. A Modern Introduction.
Edisi kedua. Prentice hall. 1998
[MUN00] Munir, Rinaldi. Algoritma & Pemrograman Dalam Bahasa Pascal dan C Buku 1.
Edisi Kedua. Informatika. Bandung. 2000

Terima kasih Pak Wayan atas bimbingannya di kelas.

Abstract Data Type

Abstract Data Type

Abstract Data Type (ADT) adalah kumpulan dari elemen-elemen data yang disajikan
dengan satu set operasi yang digambarkan pada elemen-elemen data tersebut.(JENI)
Apa itu struktur data?
  1. Cara menyimpan data didalam komputer sehingga dapat digunakan secara efisien.(Wikipedia)
  2. Merupakan organisasi informasi, biasanya di memory, untuk efisiensi algoritma yang lebih baik. (http://www.nist.gov/dads)
  3. Representasi data yang diberikan dan operasi yang diperbolehkan pada data untuk mendapatkan efisiensi.(Weiss)
    Dari 3 definisi diatas setidaknya kita sudah mempunyai gambaran tentang struktur data, ga tau gambarnya kayak apa??
    Daripada saya ikut binun mikirin gambarnya struktur data, kita cari tau aja mengapa koq kita membutuhkannya/mempelajarinya. Tepi sebelum lanjut ada jawaban dari beberapa mahasiswa yang sedang mengampu mata kuliah ini. Sebut saja bunga, fulan, dan mawar.Mereka berkata.
    Bunga: “terpaksa mas“,
    Fulan : „dah kadung ngambil mata kuliahnya..“
    Mawar: “karena dosennya Pak ***** mas…”

    Karena jawaban mereka kurang meyakinkan, jadi saya ambil dari buku aja alasanya, yaitu sebagai berikut:
    • Untuk efisiensi.
    • Membantu dalam mendapatkan komponen yang bisa digunakan berkali-kali.
    • Dalam paradigma object-oriented digunakan untuk mendukung enkapsulasi, penyembunyian informasi(information-hiding) dan abstraksi.
    • Terdapat banyak tipe dari struktur data diantaranya : list, stack, queue, dll. Masing-masing memiliki performa yang berbeda pada situasi tertentu. Programmer yang baik tau kapan harus menggunakan struktur data tersebut pada situasi yang tepat.
    Hubungan Algoritma dan Struktur Data
    Program adalah kumpulan instruksi komputer, sedangkan metode dan tahapan sistematis dalam program adalah algoritma. Program ini ditulis dengan menggunakan bahasa pemrograman. Jadi bisa kita sebut bahwa program adalah suatu implementasi bahasa pemrograman. Beberapa pakar memberi formula bahwa:
    program = struktur data + algoritma
    Bagaimanapun juga struktur data dan algoritma berhubungan sangat erat pada sebuah program. Algoritma yang baik tanpa pemilihan struktur data yang tepat akan membuat program menjadi kurang baik, demikian juga sebaliknya.




    Struktur data sebagai wadah
    Kan tadi masih binun tentang struktur data ya?? Karena saya ini ga pinter pemrograman seperti anda-anda jadi saya pake ilustrasi aja. Anggap aja sekumpulan satu atau lebih data adalah kue/biskuit dan struktur data adalah toples/tempat kue.
    Topleskue

    Jadi Struktur data bisa dikatakan sebagai wadah (container) dari sekumpulan data. Kalo memakai analogi diatas, dalam toples tersebut kita bisa melakukan beberapa perlakuan sebagai berikut.

    • Menambahkan kue kedalam toples. (add)
    • Mengeluarkan kue dari dalam toples. (remove)
    • Mencari kue yang spesifik dalam toples. (find)
    • Mengosongkan toples dan mengecek apakah toples kosong.
      Nah tinggal mengganti kata kue dengan data dan toples dengan struktur data kan sama aja perlakuannya.
      Jika dalam bahasa jawa ngoko maka bisa ditulis seperti ini, Thing merupakan tipe data yang digunakan.
      type interface

      Biar kita lebih mengenal jenis-jenis struktur data ayo tak ajak kenalan ma mereka, mereka baik-baik kok. Pertama-tama kita kenalan sama yang namanya LIST.
      LIST
      list-ball

      List adalah koleksi item yang pada setiap item memiliki posisi.
      Kita bisa mengakses semua item dari list dari indeksnya, sebagai contoh yang paling sering kita gunakan yaitu arrayUntuk operasi yang bisa digunakan pada list yaitu sebagai berikut:
      list-interface

      STACK
      stack

      Stack → struktur data tumpukan. julukannya adalah LIFO(Last In First Out).
      Dalam stack operasi yang umum digunakan yaitu pop, push, dan top.
      Pop merupakan pengambilan pengambilan item yang terakhir dimasukkan kedalam stack atau item paling atas (top).
      Push merupakan penambahan item diatas item yang teratas atau setelah yang terakhir masuk.
      Contohnya ya tumpukan koran, majalah, dan lain-lain. Operasi stackmemerlukan waktu yang konstan sehingga cepat operasinya.
      Berikut adalah antarmuka stack dalam bahasa jawa.
      stack interface

      QUEUE
      antrian ball

      Queue/antrian pada prinsipnya sama seperti antrian yang ada didunia yang saya tinggali tapi bukan di negara saya, jadi yang pertama ngantri ya dia yang keluar dari antrian dulu. Dan meskipun yang antri berjuta-juta atau bermilyar data, anda ga perlu khawatir data anda akan mati karena terinjak-injak atau pingsan karena antrian dalam pemrograman ga seperti yang ada di negara kita ni.
      Berbeda dengan stack, pada stack item yang paling terakhir masuk adalah yang kluar dulu, tapi pada antrian item yang ada di depan (paling duluan masuk antrian) adalah yang paling kluar dulu.
      Pada antrian juga memerlukan waktu yang konstan sehingga pemrosesannya cepat.
      Berikut adalah antarmuka queue dalam pendekatan bahasa jawa.
      interface-antrian

      Nah, tiga aja dulu yang q kenalin, ntar yang laennya bisa kenalan sendiri. Kan 3 tipe struktur data diatas yang bakal sering ditemui, makanya biar ga sungkan lagi kalo ketemu.
      Sekian dulu, smoga bermanfaat.
      Referensi :
      Manurung, Ruli . Diktat Kuliah Algoritma dan Struktur Data, Fasilkom UI. 2007
      Siswantoro, Hari. Diktat Kuliah Algoritma dan Struktur Data. Jurusan Teknik Elektro UJS. 2006

      “Dialog-dialog ga penting yang ada dalam tulisan ini hanyalah fiktif belaka, hanya sebagai selingan. Jika ada kesamaan nama tokoh, peristiwa atau kejadian itu hanyalah kebetulan.”

      Waspadalah…waspadalah…Ingat kepandaian itu bisa diraih tidak hanya karena ada niat pelakunya, tetapi juga karena ada kesempatan untuk belajar.