Kamis, 18 Juni 2009

Struktur Data

STRUKTUR DATA

Struktur Data adalah cara penyimpanan dan pengorganisasian data-data pada memori komputer maupun file pada media penyimpanan secara efektif hingga dapat digunakan secara efisien, termasuk operasi- operasi di dalamnya.

Di dalam struktur data kita berhubungan dengan 2 aktivitas:

• Mendeskripsikan kumpulan obyek data yang sah sesuai dengan tipe data yang ada
• Menunjukkan mekanisme kerja operasi-operasinya

• Contoh: integer (-32768 s/d 32767) dan jenis operasi yang diperbolehkan adalah +, -, *, /, mod, ceil, floor, <, >, != dsb.
• Struktur data = obyek data + [operasi manipulasi]


- Dengan pemilihan struktur data yang baik, maka problem yang kompleks dapat diselesaikan dengan algoritma yang dapat digunakan secara efisien, operasi-operasi penting dapat dieksekusi dengan sumber daya yang lebih kecil, memori lebih kecil, dan waktu eksekusi yang lebih cepat.

- Ciri algoritma yang baik menurut Donald E.Knuth:

o Input: ada minimal 0 input atau lebih

o Ouput: ada minimal 1 output atau lebih

o Definite: ada kejelasan apa yang dilakukan

o Efective: langkah yang dikerjakan harus efektif

o Terminate: langkah harus dapat berhenti (stop) secara jelas


- Tidak semua struktur data baik dan sesuai. Contoh untuk problem data bank, problem pengurutan dan pencarian data berbeda.

DEFINISI ARRAY
- Array adalah suatu tipe data terstuktur yang berupa sejumlah data sejenis (bertipe data sama) yang jumlahnya bisa statis ataupu dinamis dan diberi suatu nama tertentu.
- Elemen-elemen array tersusun secara berderet dan sekuensial di dalam memori sehingga memiliki alamat yang besebelahan/berdampingan.
- Array dapat berupa array 1 dimensi, 2 dimensi, bahkan n-dimensi.
- Elemen-elemen array bertipe data sama tapi bisa bernilai sama atau berbeda-beda.
PENGERTIAN STACK
- Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman
- Bersifat LIFO (Last In First Out)
- Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack
- Contohnya, karena kita menumpuk Compo di posisi terakhir, maka Compo akan menjadi elemen teratas dalam tumpukan. Sebaliknya, karena kita menumpuk Televisi pada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika kita mengambil elemen dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu Compo juga.

POINTER

- Pointer adalah suatu variabel penunjuk, berisi nilai yang menunjuk alamat suatu lokasi memori tertentu.
- Jadi pointer tidak berisi nilai data, melainkan berisi suatu alamat memori.

- Lokasi memori tersebut bisa diwakili sebuah variabel atau juga berupa alamat memori secara langsung.

LINKED LIST

- Dikembangkan tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa Information Processing Language (IPL). IPL dibuat untuk mengembangkan program artificial intelligence, seperti pembuatan Chess Solver. Victor Yngve di Massachusetts Institute of Technology (MIT) juga menggunakan linked list pada natural language processing dan machine transitions pada bahasa pemrograman COMMIT.
- Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung- menyambung, dinamis dan terbatas.
- Linked List sering disebut juga Senarai Berantai
- Linked List saling terhubung dengan bantuan variabel pointer
- Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.
PENGERTIAN TREE

• Kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang membentuk layakya struktur sebuah pohon.
• Struktur pohon adalah suatu cara merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-node dari atas ke bawah.
• Suatu struktur data yang tidak linier yang menggambarkan hubungan yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya.

Minggu, 14 Juni 2009

teori komputasi

Komputasi adalah kegiatan mendapatkan penyelesaian atau solusi atas persoalan yang dinyatakan dalam model matematis. Secara matematis pada umumnya model mengambil bentuk

f(x) = y,

dengan x = himpunan informasi yang tersembunyi dalam model, berupa besaran-besaran yang nilainya harus ditetapkan agar persoalan nyata dapat dipecahkan, y = himpunan data yang tersedia, berupa besaran-besaran yang nilainya telah diketahui, dan f(.) = operator matematis model tersebut. Secara singkat dalam komputasi diberikan f(.) serta nilai numeris y, lakukanlah aktivitas untuk memperoleh nilai numeris x, agar f(x) = y dipenuhi.

Secara matematis, x diperoleh melalui operasi invers atas y. Konkritnya,

x = f-1(y),

dengan f-1 operator matematis untuk melaksanakan operasi invers yang dimaksudkan. Masalah utama: dalam praktek tidak banyak operator f dengan f-1 diketahui atau langsung dapat ditetapkan dengan mudah. Oleh karena itu proses komputasi sering harus melalui jalan yang tak langsung.

Teknik komputasi adalah perangkat ilmu tentang alat (biasanya sebuah komputer), metode (yang disebut algoritma) dan teori (bukti matematis bahwa komputasi memberi hasil yang benar) yang diperlukan untuk melaksanakan komputasi tersebut. Sementara itu dalam melakukan kegiatan komputasi untuk menyelesaikan suatu persoalan, seorang teknisi harus memperhatikan interaksi dari alat (komputer yang digunakan), metode (yaitu program yang dimiliki), dan sifat unik dari soal yang dihadapi, sebab dalam praktek soal-soal memiliki tingkat kesulitan yang berbeda-beda: ada soal yang relatif sangat gampang, ada yang sulit, tetapi juga ada soal yang sangat sulit.

Pertama tentang alat. Alat komputasi paling kuno adalah kertas, potlot dan karet penghapus. Alat komputasi yang lebih maju adalah kertas, potlot, karet penghapus dan mistar hitung, Selanjutnya mistar hitung diganti dengan kalkulator (elektronis), yang dapat dibawa di dalam saku. Alat komputasi yang modern adalah komputer, yang biasanya merupakan peralatan elektronis dengan berbagai kemampuan tertentu: (1) dapat melakukan operasi penyimpanan, karena dalam komputer ada memori; (2) dapat melakukan operasi-operasi tertentu atas yang disimpan dalam memori; (3) dapat menyajikan kembali isi memori itu dalam media penampil menurut format yang dikehendaki oleh pemakai.

Itu adalah rumusan singkat tentang apa yang disebut komputer. Beberapa hal masih harus ditambahkan agar sebuah gambaran yang utuh diperoleh. Dalam bidang komputer dikenal tiga serangkai data - program - informasi. Dalam bahasa sehari-hari data adalah fakta tersurat (dalam bentuk catatan atau tulisan) tentang suatu obyek. Dalam dunia komputer data adalah segala sesuatu yang dapat disimpan dalam memori menurut format tertentu, dan informasi adalah segala sesuatu yang ditampilkan oleh komputer dalam sebuah media penampil tersebut diatas, biasanya sebagai hasil dari sebuah proses komputasi. Bagi teknisi yang berhadapan langsung dengan persoalan yang nyata, data menghadirkan fakta tersurat yang secara spesifik ada pada persoalan itu, dan yang secara khas terpancar sebagai isyarat sebagaimana diterima (ditangkap) oleh teknisi yang sedang menangani persoalan tersebut. Dalam konteks itu informasi adalah fakta tersirat yang muncul dalam benak teknisi itu sesudah mencermati dan mengolahnya dengan tertib, berdasarkan model yang diyakini sebagai hal yang benar ada dalam keseluruhan persoalan tersebut.

Program adalah deretan operasi yang sengaja ditulis untuk sebuah proses komputasi. Program adalah resep tentang bagaimana komputasi itu harus dilaksanakan. Sebagai sebuah fakta tentang obyek komputasi, program disimpan dalam memori komputer untuk dijalankan. -- Menjalankan komputer adalah membuat komputer melaksanakan tiap operasi yang terdapat dalam program, satu demi satu, dari operasi pertama, kedua, ..., dan seterusnya sampai dengan operasi yang terakhir. Maka operasi sama dengan instruksi dan himpunan instruksi yang dimiliki atau dikenal oleh komputer merupakan bahasa komputer , karena dengan bahasa itu manusia dapat berkomunikasi dan menyampaikan kehendaknya kepada komputer.

Informasi adalah fakta tersirat (dalam bentuk catatan atau tulisan) tentang obyek yang dibicarakan. Disini (sekali lagi) sengaja digunakan istilah "tersirat" (dan dipertentangkan dengan kata "tersurat") untuk menegaskan bahwa informasi adalah fakta tersembunyi dibalik himpunan fakta yang sudah dicatat, dan baru diketemukan sesudah diolah atau dicerna. Maka informasi identik dengan data. Perbedaan pokok adalah dalam hubungannya dengan pemakai data/informasi tersebut. Data adalah mentah, karena hasih harus dicerna lagi, informasi bersifat matang karena langsung dapat digunakan (misalnya untuk pengambilan keputusan).

Dikaitkan dengan usaha untuk menyelesaikan persoalan dalam y = f(x) tersebut diatas, dapat dikatakan bahwa y adalah data, x adalah informasi yang diinginkan dan f-1(.) adalah program yang mengimplementasikan operasi invers atas fungsi f(.).

Pada kesempatan ini patut disinggung apakah sebenarnya kehebatan komputer itu? Karena kemampuan melakukan sebuah instruksi difahami sebagai kemampuan untuk melakukan sebuah operasi atas memori, apa hebatnya? Kehebatan komputer pada akhirnya hanya terletak dalam kemampuannya untuk membedakan apakah yang tersimpan dalam alamat atau adres A dalam memori adalah data untuk dioperasikan atau instruksi untuk dilaksanakan. Kehebatan komputer (sebagaimana sering dilaporkan di berbagai media massa) hanya merupakan pencerminan dari kemampuan manusia untuk mengkomunikasikan keinginannya dalam wujud program untuk dilaksanakan oleh komputer tersebut.

Selanjutnya tentang metode dan teori dibalik metode itu. Untuk ini ada baiknya jika dikaji saja dua kasus sebagai bahan untuk pembahasan yang lebih umum. Tinjaulah lebih dahulu kasus persamaan kuadrat

a x2 + b x + c = a (x - x1) (x - x2) = 0.

Persamaan ini memiliki akar yang dapat ditetapkan dengan rumus

x12 = .

Rumus ini bersifat ekxplisit, karena dengan koefisien a, b dan c diberikan nilainya, nilai x1 dan x2 langsung dapat ditetapkan dengan menggunakan rumus tersebut. Untuk a = 1, b = 7, dan c = 12, dengan mudah diperoleh x1 = 3 dan x4 = 4. Akan tetapi untuk a = 1, b = - 320 dan c = 16, didapatkan

x1 = = = 319.9

x2 = = = 0.1.

Hitungan ini mengandaikan ketelitian aritmatika sampai dengan sangka pertama dibelakang tanda desimal. Pada hal hasil akhir yang benar adalah x1 = 319.950 dan x2 = 0.0500078. Disini metode memberi x1 yang sangat bagus, tetapi memberi nilai x2 yang sangat jelek (kesalahannya hampir 100%).

Tidak sulit untuk menemukan mengapa diperoleh hasil yang jelek untuk x2. Angka 320 dan 319.8 hampir sama besar, sehingga jika hitungan tidak cermat dapat terjadi keadaan saling menghapus, yang berakibat fatal.

Dari segi teori, rumus untuk menghitung akar adalah benar, dan itu dapat dibuktikan dengan melakukan substitusi langsung. Tetapi dari segi metode komputasi, rumus tidak menjamin hasil yang benar. Untuk kasus ini metode hitungan yang benar adalah dengan memakai

x1 = , x2 = ,

dengan tda(b) adalah tanda dari b. Rumus ini secara matematis ekuivalen dengan rumus dimuka. Dengan rumus baru ini diperoleh hasil yang lebih baik untuk x2, yaitu

x2 = = 0.05002.

Sekarang ditinjau kasus kedua, yaitu mencari nilai akar kuadrat dari bilangan 10. Konkritnya, berapakah x = = ? Periksalah proses komputasi berikut ini, yang dibuat berdasarkan metode yang diajarkan di pra-universitas

Teori Komputasi, Catatan ke-1

Review Grammar Chomsky dan Mesin-Mesin Pengenalnya

Tipe

Grammar

Nama

Ciri Produksi

(a ® b)

Mesin Pengenal

tipe ke-0

Unrestricted

Grammar (UG)

a Î (VÈV)

b Î (VÈV)*

Turing Machine (TM)

atau Mesin Turing

tipe ke-1

Context Sensitive

Grammar (CSG)

a Î (VÈV)

b Î (VÈV)*

½a½ £½b½

Linear Bounded Automaton (LBA)

(Varian dari Nondeterministik TM)

tipe ke-2

Context Free

Grammar (CFG)

a Î V

b Î (VÈV)*

Pusdown Automaton (PDA)

tipe ke-3

Regular Grammar

(RG)

a Î V,

b : salah satu dari :

b Î { V, VV}

b Î { V, VV}

Finite Automaton (FA)

Beberapa Contoh Grammar dan Bahasa Yang Dihasilkannya

· Grammar Regular

G(V, V, S, Q), dimana :

V = {S, B, C}, V = {a, b}, S = S, Q = {S ® aS½aB, B ® bC, C ® aC½a}

Grammar G akan membangkitkan bahasa L(G) = {a b a½n, m ³ 1}

Bahasa L ini ekuivalen dengan ekspresi regular r = a b a = aa*baa*

· Grammar Context Free

G(V, V, S, Q), dimana :

V = {S, A}, V = {a, b}, S = S, Q = {S ® aAa, A ® aAa½b}

Grammar G akan menghasilkan bahasa L(G) = { a b a½n ³ 1}

· Grammar Context Sensitive

G(V, V, S, Q), dimana :

V = {S, B, C}, V = {a, b, c}, S = S,

Q = {S ® aSBC½abC, bB ® bb, bC ® bc, CB ® BC, cC ® cc}

Grammar G akan menghasilkan bahasa L(G) = {a b c½n ³ 1}

· Grammar Unrestricted

G(V, V, S, Q), dimana :

V = {S, A, B, C, D, E}, V = {a}, S = S

Q = {S ® ACaB, Ca ® aaC, CB ® DB½E, aD ® Da, AD ® AC, aE ® Ea, AE ® e}

Grammar G akan menghasilkan bahasa L (G) = {a½i = 2n, n ³ 1}

Mesin Penerima Bahasa

· Finite Automata, penerima bahasa regular

FA : M(Q, V, q, d, q), dimana :

Q = himpunan stata, V = himpunan simbol input, q = stata awal,

d : Q ´ V ® Q = fungsi transisi, q = stata penerima

Untuk L(G) = {a b a½n, m ³ 1} Û r = a b a, FA yang bersesuaian adalah :

a a








FA : q q q q

a b b

Jelaslah :

Q = {q, q, q, q},

d

a

b

V = {a, b},

q

q

f

q = q,

q

q

q

q = q,

q

q

f

d terdefinisi melalui tabel simbol berikut :

q

q

f