Jumat, 26 November 2010

Hill Climbing Search

    Hill Climbing termasuk dalam metode Uninformed Search, ia menggunakan metode mencari nilai yang lebih baik dari sebelumnya, cara ini biasanya diterapkan pada tree.

Silahkan di lihat gambarnya.



     Dari gambar di atas dapat kita simpulkan cara kerjanya, pertama kita tentukan dulu aturan(list) mana yang terbaik dan terburuknya. Gambar ini menentukan M-D-B-N-L-O sebagai prioritasnya.
     Selanjutnya ketika kita memulai pencarian(dari root = S(start)), kita akan menentukan langkah selanjutnya dengan patokan aturan tersebut, hingga kita menemukan G(goal)nya.
     Solusi ini jelas tidak akan optimal untuk mencari suatu solusi, tapi kita dapat "mengakali" nya dengan cara memperbanyak climbernya(startnya dari beberapa tempat), dengan memperbanyak climber kita dapat meningkatkan kemungkinan mendapatkan solusi terbaik.

Read More...

Kamis, 25 November 2010

Depth First Search

Termasuk dalam metode Uninformed Search, berlawanan cara dengan metode Breadth First Search yang saya bahas sebelumnya.

Ini gambar animasinya.



Metode ini akan mencari dulu di satu sisi, hingga kedalaman yang paling jauh, lalu akan melakukan backtrack.

Keuntungan :
  1. Tidak menghabiskan banyak memory, karena tidak perlu menyimpan apapun.

Kerugian :
  1. Kalau data banyak, data yang di cari dekat dengan root, dan tidak 1 arah dengan perjalanan pertama ke kedalaman paling jauh. Jelas akan menghabiskan banyak waktu.
Read More...

Breadth First Search

    Metode pencarian ini merpakan metode Uninformed Search, metode ini mencari nilai terbaik dengan cara melihat per baris.

Silahkan melihat gambar berikut agar lebih jelas.



Dapat di lihat bahwa setiap akan turun, akan memeriksa anaknya, lalu di simpan.

Cara penyimpanan :
a
bc     (node anak dari root)
cde   (node c + node anak dari b)
defg  (node anak dari b + node anak dari c)
dfgh  (dst....*hingga ketemu goalnya.)

Keuntungan :
  1. Tidak akan menemui jalan buntu
  2. Jika terdapat banyak solusi, metode ini dapat menemukan dan membandingkan untuk mendapatkan hasil yang terbaik

Kerugian :
  1. Memory yang di butuhkan sangat banyak, karena metode ini akan mengingat semua node anak nya.

Read More...

Rabu, 24 November 2010

Segmented Sieve of Eratosthenes

    Segmented Sieve of Eratosthenes adalah pengembangan dari Sieve of Eratosthenes, bila bilangan prima yang di cari tidak di mulai dari angka 0.
    Contohnya "Tuliskan bilangan Prima dari 999900000 sampai 1000000000" coba bayangkan kompleksitas nya kalau harus mulai dari 0. XD.


Ini source code upgrade an Sieve of Eratosthenes" saya :D

#include <iostream>
#include <math.h>

typedef long long LL;

using namespace std;

LL N,M;
bool Prima[1000000000];

int main()
{
    cout<<"Masukan angka minimal bilangan prima = ";cin>>N;
    cout<<"Masukan angka maximal bilangan prima = ";cin>>M;
    for(LL i=N;i<M;i++)
        Prima[i] = true;
    cout<<"Bilangan Prima dari "<<N<<" - "<<M<<" adalah : ";
    Prima[0] = false;
    Prima[1] = false;

    for(LL i=2;i<sqrt(M);i++)
        for(LL j=N;j<M;j++)
            if(Prima[j] && ((j/i)*i == j))
            {
                j += i;
                while(j < M)
                {
                    if(Prima[j])
                        Prima[j] = false;
                    j += i;
                }
            }
    for(int i=N;i<M;i++)
        if(Prima[i])
            cout<<i<<endl;
    return 0;
}
Read More...

Buble Sort

    Buble adalah metode pengurutan paling simpel (menurut saya), mengecek apakah ada yang lebih besar atau tidak, lalu di tukar, tapi dengan kasus terburuk kompleksitasnya mencapai O(N2).

Ini ada contoh source code C++ saya


#include <iostream>

using namespace std;

int main()
{
    int data[100],n;
    cout<<"Berapa banyak data = ";cin>>n;
    cout<<"Masukan data yang akan di sorting = ";
    for(int i=0;i<n;i++)
        cin>>data[i];
    for(int i=0;i<n;i++)
        for(int j=i;j<n;j++)
            if(data[i] > data[j])
                swap(data[i],data[j]);
    for(int i=0;i<n;i++)
        cout<<data[i]<<' ';
    return 0;
}
Read More...

Html Code Converter

    Ketika pertama kali "mempaste" kan source code ke blog, ada sesuatu yang aneh, apa yah ??? pas saya lihat - lihat dengan jelas, ternyata semua html code nya di convert otomatis...XD
    Setelah cari - cari referensi untuk memasang code converter sendiri di blog, akhirnya ketemu juga :D, jadi ga perlu cari - cari web buat convert.

Ini dia....



Read More...

Merge Sort

    Merge sort merupakan salah satu metode sorting yang paling stabil, kompleksitas nya juga O(n log n) untuk kasus terburuk dan terbaik sekalipun.

    Merge sort menggunakan metode Divide and Conquer untuk menyelesaikan penyusunannya, jadi data akan di pecah - pecah menjadi sangat kecil dan di selesaikan satu per satu.


Ini ada suatu gambar yang saya dapatkan dari wikipedia, cukup untuk membuat kita mudah mengerti maksud dari sorting ini.


Sudah bisa mengerti gambar ini ??
Lalu bagaimana mengimplementasikan dalam sebuah program ?

Silahkan cek source code yang saya buat dengan C++

#include <iostream>

using namespace std;

int data[100];

void mergeSort(int awal, int mid, int akhir)
{
    cout<<endl;
    int temp[100], tempAwal = awal, tempMid = mid, i = 0;
    while(tempAwal < mid && tempMid < akhir)
    {
        if(data[tempAwal] < data[tempMid])
            temp[i] = data[tempAwal],tempAwal++;
        else
            temp[i] = data[tempMid],tempMid++;
        i++;
    }
    while(tempAwal < mid)  //kalau masih ada yang sisa
        temp[i] = data[tempAwal],tempAwal++,i++;
    while(tempMid < akhir)
        temp[i] = data[tempMid],tempMid++,i++;
    for(int j=0,k=awal;j<i,k<akhir;j++,k++)  //mengembalikan ke array semula, tapi 
        cout<<data[k]<<' '<<temp[j]<<endl, data[k] = temp[j]; //sudah urut
}

void merge(int awal, int akhir) //membagi data secara rekursif
{
    if(akhir-awal != 1)
    {
        int mid = (awal+akhir)/2;
        merge(awal, mid);
        merge(mid, akhir);
        mergeSort(awal, mid, akhir);
    }
}

int main()
{
    int n;
    cout<<"Masukan banya data = ";cin>>n;
    cout<<"Masukan data yang akan di susun = ";
    for(int i=0;i<n;i++)
        cin>>data[i];
    merge(0,n);
    for(int i=0;i<n;i++)
        cout<<data[i]<<' ';
    return 0;
}
Read More...

Selasa, 23 November 2010

Daftar Algoritma

    Algoritma adalah dasar dari pemrograman, jika anda sudah cukup mahir di algoritma, untuk "berekspresi" di berbagai bahasa pemrograman sangatlah mudah...
    Ini ada daftar algoritma yang saya dapatkan dari wikipedia.



Sebisa mungkin saya akan men-translate-kan dan menringkasnya menjadi mudah di mengerti, karena saya lihat tutorial tentang algoritma berbahasa indonesia masih sangat sedikit sekali. :D
Read More...

Senin, 22 November 2010

Sieve Of Eratosthenes

    Sieve of Erastosthenes adalah suatu Number Theoritic Algorithm khusus untuk mencari bilangan prima.
    Algoritma ini merupakan yang tercepat di bidangnya, karena menggunakan list data untuk menyimpan bilangan prima yang sudah di temukan dan menghapus bilangan kelipatan prima tersebut.


Contoh : 3 adalah bilangan prima, kelipatan 3 pasti bukan bilangan prima, jangan tanya kenapa !! :D


dah ngerti kan ???
ini ada contoh source code yang saya buat :D
#include <iostream>
#include <math.h>

typedef long long LL;

using namespace std;

LL N;
bool Prima[1000000000];

int main()
{
    cout<<"Masukan angka maximal bilangan prima yang anda inginkan = ";cin>>N;
    for(LL i=0;i<N;i++)   // semua di set true dulu.
        Prima[i] = true;
    Prima[0] = false;
    Prima[1] = false;
    cout<<"Bilangan Prima dari 1 - "<<N<<" adalah : "<<endl;

    for(LL i=2*2;i<N;i+=2) //bilangan prima pasti bukan bilangan genap,
        Prima[i] = false;  //kecuali 2. Jadi kelpatan 2 di buang dulu.

    for(LL i=3;i<sqrt(N);i+=2)  //disini langsung mencari bilangan ganjil saja.
        if(Prima[i])
            for(LL j=i*i;j<N;j+=i)
                Prima[j] = false;
    for(LL i=2;i<N;i++)
        if(Prima[i])
            cout<<i<<endl;
    return 0;
}
Read More...

Senin, 25 Oktober 2010

Palindrom

Palindrom adalah sebuah kata yang jika di baca dari huruf paling belakang ke depan akan sama dengan bila di baca dari depan ke belakang.

contohnya :

1. asdsa adalah palindrom
2. asdasd bukanlah palindrom

maka source code nya adalah seperti berikut


#include <iostream>
#include <string>

using namespace std;

bool cekPalindrom(string pal)
{
string cek;
for(int i=0,j=pal.length()-1;i<pal.length();i++,j--)
cek[j] = pal[i];
for(int i=0;i<pal.length();i++)
if(cek[i] != pal[i])
return false;
return true;
}

int main()
{
string pal;
cout<<"Masukan Kata yang akan di cek = ";cin>>pal;
if(cekPalindrom(pal))
cout<<"Kata "<<pal<<" adalah Palindrom.";
else
cout<<"Kata "<<pal<<" bukan Palindrom.";
return 0;
}


Read More...

Minggu, 24 Oktober 2010

SRM 485 div 2

Oke gw akan membahas tentang soal Single Round Match (SRM) kemarin, tapi yang divisi 2 tipe 250.
Soal nya bisa di lihat di sini.
SRM 485 div 2 250 coba di baca dulu.
Inti dari soal itu adalah carilah angka terbesar dengan angka '9' terbanyak.

#include <iostream>

using namespace std;


class MicrowaveSelling {
public :
    int mostAttractivePrice(int min, int max)
    {
        int nine=0,max9=0,temp=0,j;
        for(int i=min;i<=max;i++)
        {
            nine = 0; j=i;
            while(true)
            {
                //menghitung berapa banyaknya angka 9
                if(j%10 == 9) nine++,j/=10;
                else break;
            }
            if(nine >= max9) max9 = nine, temp = i;
        }
        return temp;
    }
} test;

int main()
{
    cout << test.mostAttractivePrice(460,680) << endl;
    return 0;
}

yang bikin sulit di percaya adalah....
seorang mahasiswa Universitas Tokyo dengan nickname ah_xiaodao menyelesaikan soal ini dalam waktu 41 detik.....
mungkin lain waktu saya juga bisa menyelesaikan dengan waktu segitu....amin.
Read More...

Menyusun segitiga bintang dengan C++

Tugas ini biasa nya di berikan kepada anak informatika semester 1, jadi saya bantu yah....

previewnya seperti ini...

n=3
*
**
***

n=5
*
**
***
****
*****



kita mulai dari algoritmanya yah....

1. mulai
2. input n
3. looping i=1 to n
4. looping lagi dari j=0 to i
5. cetak '*' sebanyak j
6. ganti baris
7. lanjutkan j
8. lanjutkan i
9. selesai.

#include <iostream>

using namespace std;

int main()
{
    int n;
    cout<<"Masukan tinggi bintang = ";cin>>n;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j <= i; j++)
            cout<<'*';
        cout<<endl;
    }
return 0;
}

semoga bermanfaat :D

Read More...

Selasa, 19 Oktober 2010

TopCoder

TopCoder adalah suatu situs perlombaan, bersistem rangking dan lombanya adalah coding.
Soal - soalnya sangat menantang, ada yang soal turnamen antar negara, lomba antar universitas(luar negeri) dan yang pasti sulit + membingungkan juga.

Semoga anak - anak Indonesia banyak yang bermain di TopCoder daripada main game online yang notabene merugikan.

di www.topcoder.com
So, Ayo Gabung di TopCoder !!
Read More...

Rabu, 13 Oktober 2010

3 Idiots

Kemaren gw habis lihat 3 idiot...

Walau film ini udah lama banget di putar di bioskop - bioskop dan di TV Nasional(Maybe...) akhirnya gw dapet kesempatan buat nonton film itu, film itu sendiri dah mengendap lama di hardisk gw (sampai bad sector kali :D).


3 Idiots menceritakan tentang 3 orang anak muda india yang sedang kuliah di universitas nomor 1 di tempatnya (ICE kalau ga salah :D)...

Gw benar - benar rekomendasiin film ini untuk pelajar/mahasiswa (harus nonton), sarat dengan makna kehidupan, kerasnya dunia pendidikan di india, kita mestinya bersyukur di Indonesia sendiri masih ringan - ringan saja persaingannya.

Satu hal yang dapat gw petik dari film itu adalah kata - kata si "Aamir Khan" yang berkata "All is well, all is well" untuk menenangkan hatinya yang sedang tertekan.

Gw sendiri kasih rating 9/10 deh...jadi nonton yah..:D
Read More...

Sabtu, 09 Oktober 2010

AWT dan SWING

Siapa yang ga tau kehebatan java ?


Dengan slogan "Write Once, Run Everywhere", dokumentasi API yang baik (rapi dan lengkap) , Java menjadi idola di bidang pemrograman mulai dari yang skala kecil sampai enterprise.

Walau berat banget jalaninnya, apalagi kalau pake IDE Netbeans, tapi jujur Java merupakan bahasa yang gw sukai ketika membuat aplikasi berbasis GUI.

Di Java kita pasti akan sering berurusan dengan AWT dan SWING, apa sih bedanya ??



AWT adalah tampilan dasar dari setiap OS yang kamu gunakan.
Jadi setiap kita mendeklarasikan button, textfield akan sama persis dengan apa yang ada di OS kamu.
Yang jadi kendala adalah, bila terjadi bug di salah satu OS, bug tersebut akan menjadi sebuah bug yang lain lagi di OS yang lain, benar - benar ga bisa di bayangkan seberapa repotnya.

Saat itu slogan Java di plesetkan menjadi "Write Once, Debug Everywhere".

Maka hadirlah SWING yang menawarkan tampilan yang lebih bagus, ia tidak berdasarkan pada OS yang di diaminya.

Yang perlu di garis bawahi adalah SWING bukanlah pengganti AWT, karena SWING sendiri tidak bisa berdiri sendiri, ia tetap membutuhkan class - class seperti Event Handling dari AWT.

Sayangnya SWING menjadi lebih lambat dari AWT karena ia menggunakan metode "Paint".
Read More...

Delphi For Dummies

Beberapa hal penting yang perlu di perhatikan ketika kamu belajar Delphi....

Karena delphi berbasis GUI, maka ketika membuat program anda akan lebih butuh belajar syntax daripada belajar algoritmanya...

Belajar delphi gampang - gampang susah juga (gw ga pernah maen GUI sih --")


Ternyata, delphi ini di bangun dengan menggunakan bahasa PASCAL.
Itu baru gw sadari karena syntaxnya mirip banget sama pascal.

Kelebihan Bahasa Delphi adalah :
1. easy to learn karena di GUI
2. punya Object Inspector (untuk properties sebuah item)
3. backgroundnya tembus pandang, keren banget.

Kekurangannya :
1. GUI dengan delphi terkesan jadul(jaman dulu) banget
2. delphi tidak case sensitive, itu cukup membuat bingung (bagi saya)

overall delphi cukup powerfull kalau di bandingin sama yang tidak berbasis GUI (ya iya lah... :D)

nb : saya nulis ini masih 2 x nyobain delphi(berarti dummie juga donk) hehehe....

*** = menurut saya yah, tapi itu belum saya tes sendiri ketika menulis ini, ntar saya edit lagi kalau saya udah menemukan kelebihan lainnya.
Read More...

Jumat, 08 Oktober 2010

I'm Come Back !!!

Waduh.....
udah lama banget ga posting, gara - gara kesibukan yang ada (cari alesan).....heheh...:D

mulai saat ini gw bakal rajin posting...suer ! ^^v
mungkin tiap 1 minggu sekali tapi gw bakal pantau blog ini terus...

kemaren gw baru mulai coba - coba ngedit tampilan blog ini (abis dapet ilmu dikit waktu kuliah) hehehe....

gw juga bakal mengkategorikan semuanya sesuai dengan beberapa macam jalur di IT, contohnya programming, networking...mungkin nanti bakal saya tambahin lagi desain grafis (klo ga keburu + ga males :D)..

so, ikutin terus yah blog gw....Tq..!! :-h

Read More...

Sabtu, 20 Februari 2010

Komentar, Identifier dan Tipe data

KOMENTAR
Dalam sebuah program yang besar kebanyakan orang yang bukan pembuat program tersebut akan bingung dengan maksud dari syntax yang ada....maka sebaiknya programer membuat sebuah komentar di dekat/samping syntax tersebut dengan memakai tanda "//" untuk komentar 1 baris atau "/* dengan */" untuk komentar yang panjang.
Contoh :
// ini adalah program untuk menambahkan value

dan

/* ini adalah program untuk
menambahkan
value */.


IDENTIFIER
Adalah suatu pengidentifikasi yang berfungsi untuk menampung sebuah nilai yang di gunakan dalam suatu program.
syarat-syaratnya :
  • harus berawalan karakter huruf, selanjutnya terserah
  • tidak boleh menggunakan karakter-karakter ( @, ?, !, $, #, dll)
  • tidak boleh menggunakan kata kunci( cout, cin, int, dll)
  • sebaiknya berhubungan dengan penggunaan
- KONSTANTA
merupakan jenis identifier yang bersifat konstan/tetap. Bila di dalam program penggunaannya adalah agar nilai suatu konstanta itu tidak dapat di ubah.

-Menggunakan Prepocessor Directive #define
Contoh :
#define phi 3.14

-Menggunakan Keyword const
Contoh :
const float phi = 3.14;

- VARIABEL
tipe_data nama_variabel;

--Global--> Var. yang dapat di akses oleh seluruh lingkungan dalam program
--Lokal--> Var. yang hanya dapat di akses di tempat tertentu dalam program
--Static--> Var. yang menempati memori komputer secara permanen
--register--> Var. yang hanya di simpan di register CPU.

TIPE_DATA
Berfungsi untuk mempresentasikan jenis dari sebuah nilai yang terdapat dalam program.
Macam-macamnya :

- DASAR
  • Tipe Bilangan Bulat
  1. tiny int ( 1 byte )
  2. short int ( 2 byte )
  3. int ( 4 byte )
  4. long int ( 8 byte )
terdapat juga keyword unsigned, untuk membuat tipe data tersebut tidak terdapat nilai negatifnya.
Contoh :
unsigned tiny int nama_var;

  • Tipe Bilangan Desimal
  1. float ( 6 digit presisi )
  2. double ( 10 digit presisi )
  3. long double ( 10 digit presisi )

  • Tipe Logika
  1. true (1)
  2. false (0)

  • Tipe Karakter
  1. char ( 1 byte )
- BENTUKAN

  • Array
  • String
  • Struktur
  • Enumerasi
Ga pengen serius eh malah uda nulis sepanjang gini....@_@a
Read More...

About Me

Nama saya Harry Budianto, seorang mahasiswa yang sekarang baru semester 2 (masih libur semester 1).


Saya membuat Blog ini karena
1. Terinspirasi seorang teman yang sudah mempunyai blog (keren banget)
2. Ingin berbagi ilmu dengan orang lain yang lebih menguasai tentang apa yang saya bahas, dan untuk memperkenalkan kepada orang-orang yang belum mengetahui atau tidak menguasainya (klo isa lebih banyak yang ngajarin aq :p)
3. Masa anak infor ga punya blog....
4. Yo pokok e pengen ae....:D

Masa kecil saya, saya habiskan di kota Jombang TKK, SDK, SMPK Petra Jombang lalu berlanjut ke SMAN 2 Jombang nothing special.
Saya sekarang sedang menempuh pendidikan di UNTAG(Universitas Tujuh Belas Agustus) Surabaya dan mengambil jurusan Teknik Informatika(malu klo ga punya blog...hahaha....).

Saya sebenanya ga seberapa bisa algoritma atau programming.....baru mulai belajar pas masuk semester 1.....kayak nya terlambat banget...pasti kalah start sama yang uda ada pelajarannya di SMA....tapi mending terlambat daripada nggak sama sekali...nothing to lose ae lah.....

Jadi klo ada kesalahan harap di beritahu dan maklumi, coz saya juga masih belajar ^^v
Read More...

Pengenalan C++

Pada mulanya bahasa komputer digunakan untuk membantu dalam melakukan perhitungan - perhitungan telemetri. Ketika itu bahasa yang di gunakan masih primitif sekali karena hanya mengenal angka 1 dan 0(bahasa mesin). Lalu setelah berkembangnya jaman terciptalah bahasa yang sekarang sering kali kita pakai yaitu Bahasa C++.


Adapun urutannya :

- Bahasa Tingkat Tinggi
Ada, Modula-2, Pascal, Cobol, Fortran, BASIC

- Bahasa Tingkat Menengah
Java, C++, C, FORTH

- Bahasa Tingkat Rendah
Macro-Assembler, Assembler

ditulis berurutan dengan maksud, misal : bahasa C lebih sulit dipahami daripada C++, sedang Bahasa FORTH lebih susah daripada C.

Secara syntax Bahasa C dan C++ banyak kesamaan, karena C++ adalah upgrade-an dari Bahasa C. Yang membuatnya keduanya berbeda adalah C++ adalah berbasis OOP (Object Oeriented Programming) yang disuatu saat nanti mungkin juga akan di jelaskan di Blog ini (tapi ga tau kapan...ho3...).
Read More...