• Tidak ada hasil yang ditemukan

Review. Struktur Data & Algoritme (Data Structures & Algorithms) Objectives. Outline. Stacks & Queues

N/A
N/A
Protected

Academic year: 2021

Membagikan "Review. Struktur Data & Algoritme (Data Structures & Algorithms) Objectives. Outline. Stacks & Queues"

Copied!
8
0
0

Teks penuh

(1)

Struktur Data & Algoritme

(

Data Structures & Algorithms

)

Denny (denny@cs.ui.ac.id)

Suryana Setiawan (setiawan@cs.ui.ac.id)

Fakultas Ilmu Komputer Universitas Indonesia Semester Genap - 2004/2005

Version 2.0 - Internal Use Only

Stacks & Queues

SDA/ST-Q/V2.0/2

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

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 Implementations

(2)

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

SDA/ST-Q/V2.0/6

Stack

„ Semua akses dibatasi pada elemen yang paling akhir

disisipkan

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

„ Operasi-operasi dasar memiliki waktu yang konstan

Stack

push pop, top

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

SDA/ST-Q/V2.0/8

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 buka yang paling terakhir

ditemukan. Jadi, stack akan membantu pemeriksaan

(3)

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.

SDA/ST-Q/V2.0/10

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.

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.

(4)

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

SDA/ST-Q/V2.0/14

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

SDA/ST-Q/V2.0/15

Implementasi Array

„ Stack dapat diimplementasi dengan suatu array dan

suatu integer top yang mencatat indeks dalam array dari top of the stack.

„ Untuk stack kosong maka top berharga -1.

„ Saat terjadi push, lakukan dengan increment counter

top, dan tulis ke dalam posisi top tsb dalam array.

„ Saat terjadi pop, lakukan dengan decrement counter

top. SDA/ST-Q/V2.0/16

Stages

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

(5)

SDA/ST-Q/V2.0/17

Array Doubling

„ Jika stack full (karena semua posisi dalam array

sudah terisi), kita dapat memperbesar array, menggunakan array 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

SDA/ST-Q/V2.0/18

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.

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

Queue

„ Setiap akses dibatasi ke elemen yang paling

terdahulu disisipkan

„ Operasi-operasi dasar: enqueue, dequeue,

getFront.

(6)

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.

SDA/ST-Q/V2.0/22

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 a MUST occur prior to

b, provide a schedule.

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

SDA/ST-Q/V2.0/24

Better Idea

„ Menggunakan Front untuk mencatat index terdepan.

„ Dequeue dilakukan dengan increment Front.

a b c d Front Back

a b c d

(7)

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.

SDA/ST-Q/V2.0/26

Circular Example

„ Kedua index Front dan Back melakukan wraparound

jika melalui akhir array.

b c d Front Back b c d Front Back e f e f g

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:

(8)

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. SDA/ST-Q/V2.0/30

Further Reading

„ Chapter 6, 15 SDA/ST-Q/V2.0/31

What’s Next

„ Application of stack & queue, or

Referensi

Dokumen terkait

Pada gambar 3.2 menjelaskan bagaimana alur sistem dosen mendapatkan hak akses akun oleh administrator, sehingga dosen dapat melakukan login untuk memasukan,

Pada umumnya belt conveyor terdiri dari : kerangka (frame), dua buah pulley yaitu pulley penggerak (driving pulley) pada head end dan pulley pembalik ( take-up pulley) pada

Untuk itu, pada tahun 2018 ini Direktorat Jenderal Anak Usia Dini dan Pendidikan Masyarakat melalui Direktorat Pembinaan Kursus dan Pelatihan menyelenggarakan program

Kode Kegiatan/ Output/ Sub Output/ Paket/ Sub Paket Vol Satuan Pemanfaat Tahun Atribut Kesiapan DED

Daya listrik yang disediakan oleh PLTS sebesar 5000 W untuk pemakaian selama 10 jam, menggunakan panel surya sebanyak 40 panel, daya puncak setiap panel surya 250 WP,

• Lakukan gerak langkah arah mistar dan lakukan tolakan tegak lurus ke atas dengan posisi badan membelakangi mistar, lalu mendarat pada matras menggunakan punggung

Pada Lembaga Pemasyarakatan Kelas IIb Kota Blitar masih menggunakan sistem pendataan narapidana secara manual, seperti mencatat data-data narapidana ke dalam buku

New World Rubber Factory telah menerapkan Peraturan Pemerintah Nomor 46 Tahun 2013 tentang Pajak Penghasilan Atas Penghasilan Dari Usaha Yang Diterima Atau