• Tidak ada hasil yang ditemukan

Struktur Data & Algoritme Review

N/A
N/A
Protected

Academic year: 2023

Membagikan "Struktur Data & Algoritme Review"

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

„ Examples of use

(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

push pop, top

(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 ‘}’.

„ End of file; stack kosong, jadi input benar.

(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.

„ Operasi-operasi dengan waktu konstan

(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 pairs (a,b) indicating that event aMUST occur prior to

(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

„ MenggunakanFrontuntuk mencatat index terdepan.

„ Dequeue dilakukan dengan increment Front.

a b c d

(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 FrontdanBackmelakukan 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:

„ get node at the front

(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

„ Chapter 6, 15

(16)

SDA/ST-Q/V2.0/31

What’s Next

„ Application of stack & queue, or

„ Tree

Referensi

Dokumen terkait

Answer Options Response Percent Response Count Top of SI joint common iliac bifurcation 57.6% 423 Middle of SI joint top of external/internal iliacs 28.8% 212 Bottom of SI joint

Time budget calculations based on 20 scans Altmann 1974 at 5 min apart, of one to seven birds present over a 1.5 h period 21:00 - 22:55 local apparent time, interrupted by 20 min when