18
Struktur Data dan Algoritma SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 Ganjil Minggu 6 Suryana Setiawan Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatika

Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

Embed Size (px)

Citation preview

Page 1: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

Struktur Data dan Algoritma

SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Suryana Setiawan

Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatika

Page 2: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 2SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Definisi Problem

• Diberikan suatu ekspresi aritmatika denganoperator “+”, “-” , “*”, “/”, “^”, dan tandakurung “(“ dan “)”,

• Contoh: “1 – 2 – 4^5 * 3 * 6 / 7^2^2”

• bagaimana algoritma untukmengkomputasinya?

Page 3: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 3SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Terminologi

• Ekspresi infiks: setiap operasi aritmatikadituliskan dalam format “operand1 operator operand2”

– Contoh “1 + 2” adalah menjumlahkan 1 dan 2.

• Ekspresi posfiks: setiap operasi aritmatikadituliskan dalam format “operand1 operand2 operator”

– Misalnya ekspesi infiks di atas dituliskan sebagaiekspresi posfiks “1 2 +”

Page 4: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 4SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Bentuk Kompleks

• Bentuk kompleks ekspresi adalah jika operand adalah ekspresi aritmatika juga (secararekursif)

– Contoh:Ekspresi infiks kompleks “1 * 2 + 3” adalah “X + 3” dengan X adalah “1 * 2”

– ekspresi posfiks kompleks “1 2 * 3 +” adalah “X 3 +” dengan X adalah “1 2 *”

Page 5: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 5SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Ekspresi Infiks & Masalah Interpretasi

• Perhatikan:

– “A – B – C”

– “A – B * C”

– “A / B * C”

– “A ^ B ^ C”

– “A – B * C ^ D”

• Bagaimana urutannya?

• Perlu didefinisikan kaidah pengurutanoperator.

Page 6: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 6SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Kaidah Urutan

• Kaidah urutan operasi “kalkulator toko” darikiri ke kanan apapun operatornya.

• Dalam ekspresi aritmatika yang lebih umum,

– terdapat hirarki dari operator : yang lebih tinggidikerjakan terlebih dahulu

– penggunaan tanda kurung untuk “mengatur” urutan jika dikehendaki operator yang lebihrendah untuk dikerjakan terlebih dahulu.

Page 7: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 7SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Hirarki Operator

• Paling tinggi tanda pangkat (“^”), dalamderetan berturutan tanda-tanda tsb, dikerjakan dari kanan ke kiri, misalnya “2^3^3”

• Berikutnya tanda kali (“*”) dan bagi (“/”) dalam deretan berturutan tanda-tanda tsb, dikerjakan dari kiri ke kanan, misalnya “2/3*4”

• Terendah tambah (”+”) dan kurang (“–”), dalam deretan berturutan tanda-tanda tsb, dikerjakan dari kiri ke kanan, misalnya “2-3+4”

Page 8: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 8SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Left / Right Associative Operator

• Tanda pangkat disebut right associative operator, karena bila sama harus menungguterkanan dulu untuk dikomputasi sebelum iadikomputasi

• Tanda “*”, “/”, “+”, “–” adalah left associative karena tidak perlu menunggu ke kanan.

Page 9: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 9SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Ekspresi Posfiks

• Ekspresi yang kurang readable untuk matamanusia dibandingkan ekspresi infiks

• Terdapat kepastian urutan operasi sehinggatidak diperlukan kaidah-kaidah seperti padaekspresi infiks termasuk tanda kurung.

• Contoh

– infiks “a + b / c”, posfiks “a b c / +”

– Infiks “(a + b) / c”, posfiks “a b + c /”

– Infiks “(a + b) / (c + e * f)”, posfiks “a b + c e f * + /”

Page 10: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 10SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Masalah komputasi Ekspresi

• Dengan adanya kaidah hirarki maka komputasinaif ekspresi infiks tidak bisa dilakukan secaraO(n).

• Komputasi secara O(n) dapat dilakukan

1. Pada infiks secara rekursif atau

2. Pada postfix dengan postfix machine, yaitualgoritma dengan bantuan stack.

No 1. tidak menjadi pokok bahasan kita, no 2. sebagai kasus penggunaan stack.

Page 11: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 11SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Algoritma Postfix Machine

1) Baca input T

2) WHILE input T bukan operator, push(T), bacainput T.

3) Dengan input T adalah operator– Op1 = Pop()

– op2 = pop()

– Eksekusi operasi “op2 T op1” dan hasilnya Z, push(Z).

4) IF masih ada input T, Ulangi langkah (1), ELSE (jika input habis) hasil=pop()

Page 12: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 12SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Contoh

• Ekspresi Infiks:

“1 – 2 – 4^5 * 3 * 6 / 7^2^2”

• Ekspresi postfiks:

“1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -”

start

1

1

2

1

2

-1

-

4

-1

4

5

4

-1

5

1024

-1

^

3

1024

-1

3

3072

-1

*

6

3072

-1

6

18432

-1

*

7

18432

-1

7

Page 13: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 13SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Contoh

• Ekspresi Infiks:

“1 – 2 – 4^5 * 3 * 6 / 7^2^2”

• Ekspresi postfiks:

“1 2 – 4 5 ^ 3 * 6 * 7 2 2 ^ ^ / -”

7

18432

-1

7

2

7

18432

-1

2

2

2

7

18432

-1

2

4

7

18432

-1

^

2041

18432

-1

^

7

-1

/

-8

-

Hasil = -8

Page 14: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 14SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Kesimpulan

• Postfix machine adalah algoritma yang bekerjasecara O(n)

• Masukannya berupa ekspresi postfiks

• Keluarannya adalah hasil komputasi

• Pertanyaan:

– Bagaimana caranya mengkonversi infiks menjadipostfiks?

– Adakah algoritma yang O(n)?

Page 15: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 15SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Algoritma konversi Infiks ke Postfiks

1) Baca input X– X operand, outputkan X– X kurung tutup,

lakukan berulangZ=pop() dan outputkan Z jika Z operator

hingga Z adalah kurung buka– X operator, lakukan hingga Top_of_stack adalah operator

yang < X jika X left-associative atau Top_of_stack adalahoperator yang <= X jika X right-associative , secaraberulang:

Z=pop() dan outputkan Z– push (X)

2) IF masih ada input, ulangi langkah (1)ELSE //input habissecara berulang, Z=pop() dan outputkan Z

Page 16: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 16SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Contoh

• Ekspresi Infiks:

“1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6 ) * 7”

start 1out1

2out 2

^

^

^

3 out 3

^

^

^

^

^

3 out 3

–out ^^–

(

(

(

4 out 4

+

(

+

Page 17: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 17SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Contoh

• Ekspresi Infiks:

“1 – 2 ^ 3 ^ 3 – ( 4 + 5 * 6 ) * 7”

+

(

+

+

(

5 out 5

*

+

(

*

*

+

(

6 out 6

) out *+

*

*

*

7 out 7

out *

out –

Ekpresi postfiks output: “1 2 3 3 ^ ^ – 4 5 6 * + 7 * –”

Page 18: Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatikaaren.cs.ui.ac.id/sda/resources/sda2010/09_stackandqueue2.pdf · •Ekspresi infiks: setiap operasi aritmatika dituliskan dalam

10/14/2010 18SUR Fasilkom UI - IKI20100/ IKI80110P 2010/2011 – Ganjil – Minggu 6

Kesimpulan

• Komputasi infiks dengan dua tahap

– Konversi infiks menjadi posfiks O(n)

– Komputasi posfiks O(n)

adalah komputasi O(n).

• karena bantuan stack pada masing-masingtahapan.