• Tidak ada hasil yang ditemukan

Struktur Data & Algoritme (Data Structures & Algorithms)

N/A
N/A
Protected

Academic year: 2021

Membagikan "Struktur Data & Algoritme (Data Structures & Algorithms)"

Copied!
16
0
0

Teks penuh

(1)

Struktur Data & Algoritme

(

Data Structures & Algorithms

)

Denny ([email protected])

Suryana Setiawan ([email protected]) Fakultas Ilmu Komputer Universitas Indonesia Semester Genap - 2004/2005

Version 2.0 - Internal Use Only

Stacks & Queues

Review

„ Abstract data type (ADT)

„ Kumpulan obyek dan metoda operasi yang

mempresentasikan sifat-sifat abstrak bagi "user" dengan menyembunyikan bagaimana semua itu direpresentasikan dalam representasi data level yang lebih rendah

(2)

SDA/ST-Q/V2.0/3

Objectives

„ Memahami cara kerja dan kegunaan Stack & Queue

„ Dapat mengimplementasi stack dan queue

Outline

„ ADT Stacks

„ Basic operations

„ Examples of use

„ Implementations

•Array-based and linked list-based

„ ADT Queues

„ Basic operations

(3)

SDA/ST-Q/V2.0/5

Struktur data linear

„ kumpulan komponen-komponen yang tersusun membentuk satu garis linear

„ Stack: struktur data linear dimana penambahan atau pengurangan komponen dilakukan di satu ujung saja.

„ Queue: struktur data linear dimana penambahan komponen dilakukan di satu ujung, sementara

pengurangan dilakukan di ujung lain (yang satu lagi).

„ Kedua struktur tersebut merupakan struktur data abstrak dimana implementasi pada tingkat lebih rendah dapat menggunakan struktur sequential (array) atau struktur berkait (linear linked-list).

Stack

„ Semua akses dibatasi pada elemen yang paling akhir disisipkan

„ Operasi-operasi dasar: push, pop, top.

„ Operasi-operasi dasar memiliki waktu yang konstan

(4)

SDA/ST-Q/V2.0/7

Contoh-contoh di dunia luar komputer

„ Stack of papers

„ Stack of bills

„ Stack of plates

„ Waktu O ( 1 ) per operasi stack. (Dengan kata lain, waktu konstan per operasi, tidak bergantung berapa banyak item yang tersimpan dalam stack).

Aplikasi-aplikasi

„ Stack dapat digunakan untuk memeriksa pasangan tanda kurung (Balanced Symbol),

pasangan-pasangan seperti {}, (), [].

„ Misalnya: {()} boleh, dan {(}) tidak boleh (tidak dapat dilakukan dengan penghitungan simbol secara sederhana).

„ Saat mendapatkan tanda kurung tutup, ia harus

merupakan pasangan kurung bukayang paling terakhir ditemukan. Jadi, stack akan membantu pemeriksaan

(5)

SDA/ST-Q/V2.0/9

Balanced Symbol Algorithm

„ Buat stack baru yang kosong.

„ Secara berulang baca token-token; jika token mrpk

„ Kurung buka, push token ke dalam stack

„ Kurung tutup, maka

If stack kosong, then beri pesan error;

otherwise pop stack dan periksa apakah simbol yang dipop dari stack merupakan pasangannya (jika tidak beri pesan error)

„ Di akhir file, jika stack tidak kosong, beri pesan salah.

Contoh

„ Input: {()}

„ Push ‘{’

„ Push ‘(’; lalu stack berisikan ‘{’, ‘(’

„ Pop; popped item adalah ‘(’ yang adalah pasangan

dari ‘)’. Stack sekarang berisikan ‘{’.

„ Pop; popped item adalah ‘{’ yang adalah pasangan

dari ‘}’.

(6)

SDA/ST-Q/V2.0/11

Performance

„ Running time adalah O (N), yang mana N adalah jumlah data (jumlah token).

„ Algoritma memproses input secara sikuensial, tidak perlu backtrack (mundur).

Pemanggilan Stack

„ Matching symbol serupa dengan method call dan method return, karena saat terjadi suatu method return, ia kembali ke method aktif yang paling akhir.

„ Call stack dapat digunakan untuk menangani hal ini.

„ Abstract idea: ketika suatu method call terjadi, simpan current state dalam stack. Saat return, kembalikan state dengan melakukan pop stack.

(7)

SDA/ST-Q/V2.0/13

Activation Records

„ Actual implementation is slightly different (note that text describes the abstract implementation).

„ The top of stack can store the current method environment.

„ When method is called, the new environment is pushed onto stack.

„ On return, old environment is restored by pop

Applikasi Lainnya

„ Penghapusan Recursion dapat dilakukan memanfaatkan stack

„ Operator precedence parsing (di kuliah berikutnya: TBA)

„ Pembalikan urutan (Reversing) dapat dengan mudah dilakukan dengan bantuan stack

(8)

SDA/ST-Q/V2.0/15

Implementasi Array

„ Stack dapat diimplementasi dengan suatu array dan suatu integer topyang mencatat indeks dalam array daritop of the stack.

„ Untukstack kosongmakatopberharga-1.

„ Saat terjadipush, lakukan denganincrementcounter

top, dantuliske dalam posisitoptsb dalam array.

„ Saat terjadipop, lakukan dengandecrementcounter

top.

Stages

top(-1) A top(0) A B top(1) Push A Push B

(9)

SDA/ST-Q/V2.0/17

Array Doubling

„ Jika stack full(karena semua posisi dalam array sudah terisi), kita dapat memperbesar array, menggunakanarray doubling.

„ Kita mengalokasi yang array baru dengan ukuran dua kali lipat semula, dan menyalin isi array yang lama ke yang baru:

Object [] oldArray = array;

array = new Object [oldArray.length * 2 ]; for (int j = 0; j < oldArray.length; j++)

array[j] = oldArray[j];

„ Amortization technique

Running Time

„ Tanpa adanya array doubling, setiap operasi memiliki waktu konstan, dan tidak bergantung pada jumlah item di dalam stack.

„ Dengan adanya array doubling, satu operasi push dapat (namun jarang) menjadi O(N). Namun, pada dasarnya adalah O(1) karena setiap array doubling yang memerlukan N assignments didahului oleh N/2 kali push yang non-doubling.

(10)

SDA/ST-Q/V2.0/19

Implementasi Linked-List

„ item pertama dalam list = top of stack

„ push:

„ create suatu node baru

„ Sisipkan sebagai elemen pertamadalam list

„ pop:

„ Memajukan top ke item kedua dalam list

d c b a

topOfStack

Queue

„ Setiap akses dibatasi ke elemen yang paling terdahulu disisipkan

„ Operasi-operasi dasar: enqueue, dequeue, getFront.

(11)

SDA/ST-Q/V2.0/21

Examples

„ Line for 21 tickets

„ Line printer queue

„ Queue is a British word for line.

„ Waktu operasi yang O(1) karena mirip dengan stack.

Applikasi-aplikasi

„ Queues berguna untuk menyimpan pekerjaan yang tertunda.

„ Kita kelak akan melihat beberapa contoh

penggunaannya dalam kuliah-kuliah selanjutnya:

„ Shortest paths problem (minimize the number of

connecting flights between two arbitrary airports)

„ Topological ordering: given a sequence of events, and

(12)

SDA/ST-Q/V2.0/23

Queues: Simple Idea

„ Simpan item-iten dalam suatu array dengan item terdepan pada index nol and item terbelakang pada index Back.

„ Enqueue dengan mudah: increment Back.

„ Dequeue tidak efisien: setiap elemen harus digeserkan ke depan.

„ Akibatnya: waktu Dequeue akan menjadi O( N ).

Better Idea

„ Menggunakan Front untuk mencatat index terdepan.

„ Dequeue dilakukan dengan increment Front.

(13)

SDA/ST-Q/V2.0/25

Circular Implementation

„ Implementasi sebelumnya adalah O(1) per operasi.

„ Tapi, setelah elemen di-enqueue pada posisi

Array.length-1, array sekarang penuh, sekalipun queue secara lojik hampir kosong.

„ Solusi: gunakan wraparound untuk menggunakan kembali sel-sel di awal array yang sudah kosong akibat dequeue. Jadi setelah increment, jika index keluar darI array maka kembali ke 0.

Circular Example

„ Kedua index Front dan Back melakukan wraparound jika melalui akhir array.

(14)

SDA/ST-Q/V2.0/27

Implementasi Java

„ Mostly straightforward; maintain

„ Front

„ Rear

„ Current number of items in queue

„ Bagian yang masih tricky adalah array doubling jika jumlah item dalam queue melebihi ukuran array.

Linked-List Application

„ front → … → … → back

„ enqueue:

„ create a new node

„ if empty, front = back

„ else attach it as the new back

„ dequeue:

(15)

SDA/ST-Q/V2.0/29

Summary

„ Kedua versi, baik array maupun linked-list berjalan dengan O(1)

„ Linked-list memiliki overhead akibat diperlukannya reference pada setiap node

„ Khususnya untuk Queues, implementasi array lebih sulit dilakukan

„ Doubling space dalam implementasi array

memerlukan space sekurangnya 3 kali jumlah item data.

Further Reading

(16)

SDA/ST-Q/V2.0/31

What’s Next

„ Application of stack & queue, or

Referensi

Dokumen terkait

Langkah operasi pop pada stack yang menggunakan array adalah terlebih dahulu memeriksa apakah stack sedang keadaan kosong, jika tidak kosong maka data diambil pada posisi

Bila stack penuh tidak dapat dikenakan operasi penambahan data (push), dan bila stack kosong maka operasi pengambilan data (pop) tidak dapat dilakukan.. Untuk

 Implementasi Stack dengan menggunakan array pada prinsipnya hanya mengubah nilai awal stack menjadi 0 karena indeks array dimulai dengan 0 → top = -1 jika stack kosong.  Operasi

▫ Tambah satu (increment) nilai top of stack lebih dahulu setiap kali ada penambahan ke dalam array data Stack. ▫ Isikan data baru ke stack berdasarkan indeks top of stack yang

n terjadi apabila suatu class mempunyai suatu method yang nama dan signature-nya sama dengan nama dan signature dari suatu method dari superclass ybs. n Method dalam class turunan

„ Cairan: dalam suatu jaringan pipa yang mengalirkan minyak, berapa kapasitas debit (volume yang mengalir per satuan waktu) minyak melalui jaringan tersebut. „ Lalu lintas: dalam

„ Mengukur jumlah sumber daya timedan space yang diperlukan oleh sebuah algoritme „ Waktu yang diperlukan running time oleh sebuah algoritme cenderung tergantungpada jumlah input

„ The flipping will be possibly followed by other flipping as well as the rotation „ When the insertion position reached and the new red node inserted, the next possibly operation is