1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lecture 10 stacks queues applications tài liệu Kỹ thuật Lập trình

25 554 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 25
Dung lượng 196,87 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chuyển đổi biểu thức dạng Infix sang Postfix 10.2.1.. Chuyển đổi biểu thức dạng Infix sang Prefix 10.3.1.. Chuyển đổi biểu thức dạng Infix sang Postfix 10.2.1.. Chuyển đổi biểu thức dạng

Trang 1

Lecture 10 – Polish Notation

10.1 Reverse Polish Notation (RPN)

10.2 Chuyển đổi biểu thức dạng Infix sang Postfix

10.2.1 Chuyển đổi dạng Infix sang Postfix

10.2.2 Tính giá trị biểu thức dạng Postfix

10.3 Chuyển đổi biểu thức dạng Infix sang Prefix

10.3.1 Chuyển đổi dạng Infix sang Prefix

10.3.2 Tính giá trị biểu thức dạng Prefix

10.4 Một số vấn đề thực hành

Trang 2

Lecture 10 – Polish Notation

10.1 Reverse Polish Notation (RPN)

10.2 Chuyển đổi biểu thức dạng Infix sang Postfix

10.2.1 Chuyển đổi dạng Infix sang Postfix

10.2.2 Tính giá trị biểu thức dạng Postfix

10.3 Chuyển đổi biểu thức dạng Infix sang Prefix

10.3.1 Chuyển đổi dạng Infix sang Prefix

10.3.2 Tính giá trị biểu thức dạng Prefix

10.4 Một số vấn đề thực hành

Trang 3

10.1 Reverse Polish Notation

Ký pháp nghịch đảo Balan (RPN), còn được gọi là Postfix,

do Charles Hamblin đề xuất vào những năm 1950s…

Ký pháp này lấy ý tưởng của Polish notation, được đề xuất vào năm 1920 của nhà toán học người Balan có tên Jan Łukasiewicz (Trong một số tài liệu còn gọi là ký pháp Łukasiewicz).

Dạng Infix Dạng Postfix Dạng Prefix

Trang 4

10.1 Reverse Polish Notation

Trang 5

10.1 Reverse Polish Notation

Tại sao sử dụng RPN?

 RPN cho phép giảm thời gian trong việc tính một biểu thức Người dùng không cần quan tâm đến dấu ngoặc trong bt

 RPN cho phép thấy kết quả ngay sau phép toán

 Với RPN, việc thực hiện trên máy tính tỏ ra hiệu quả hơn!!!

 Với việc cho thấy kết quả ngay, do đó, người sử dụng có thể kiểm tra kết quả dễ hơn, nhanh hơn

 Với cách viết này, việc tính toán dựa trên thứ tự của biểu thức, kết hợp với thứ tự ưu tiên của phép toán

 RPN có tính logic cao vì người dùng đưa biểu thức, sau đó đưa phép tính cần thực hiện

Trang 6

10.1 Reverse Polish Notation

Trang 7

Kết quả của biểu thức bằng?

Biểu thức 6 4 5 + * tương đương với biểu thức dạng Infix: 6 * (4 + 5)

10.1 Reverse Polish Notation

Trang 8

10.1 Reverse Polish Notation

Cho biểu thức dạng Infix: (4 + 5) / (6 + 7) Làm thế nào để chuyển đổi từ dạng Infix sang RPN?

Trang 9

Lecture 10 – Polish Notation

10.1 Reverse Polish Notation (RPN)

10.2 Chuyển đổi biểu thức dạng Infix sang Postfix

10.2.1 Chuyển đổi dạng Infix sang Postfix

10.2.2 Tính giá trị biểu thức dạng Postfix

10.3 Chuyển đổi biểu thức dạng Infix sang Prefix

10.3.1 Chuyển đổi dạng Infix sang Prefix

10.3.2 Tính giá trị biểu thức dạng Prefix

10.4 Một số vấn đề thực hành

Trang 10

10.2.1 Chuyển đổi dạng Infix sang Postfix

Thuật toán 1: chuyển đổi biểu thức từ Infix sang Postfix:

Bước 1: Đọc một thành phần của biểu thức E (dạng Infix biểu diễn bằng xâu,

đọc từ trái qua phải) Giả sử thành phần đọc được là x

1.1 Nếu x là toán hạng thì viết nó vào bên phải biểu thức E1 (xâu lưu kết quả

của Postfix)

1.2 Nếu x là dấu ‘(’ thì đẩy nó vào Stack.

1.3 Nếu x là một trong các phép toán +, -, *, / thì

1.3.1 Xét phần tử y ở đỉnh Stack.

1.3.2 Nếu Pri(y)>=Pri(x) là một phép toán thì loại y ra khỏi Stack và viết y

vào bên phải của E1 và quay lại bước 1.3.1

Trang 11

10.2.1 Chuyển đổi dạng Infix sang Postfix

1.4 Nếu x là dấu ‘)’ thì

1.4.1 Xét phần tử y ở đầu của Stack.

1.4.2 y là phép toán thì loại y ra khỏi Stack, viết y vào bên phải E1

và quay trở lại 1.4.1

1.4.3 Nếu y là dấu ‘(’ loại y ra khỏi Stack.

Bước 2: Lập lại bước 1 cho đến khi toàn bộ biểu thức E được đọc qua

Bước 3: Loại phần tử ở đỉnh Stack và viết nó vào bên phải E1 Lặp lại bước này cho đến khi Stack rỗng.

Bước 4: Tính giá trị của biểu thức dưới dạng hậu tố

Chú ý: Hàm

Pri(‘$’)<Pri(‘(‘)<Pri(‘+‘)=Pri(‘-‘)<Pri(‘*‘)=<Pri(‘/‘)

$ ký hiệu đỉnh của Stack

Trang 12

10.2.1 Chuyển đổi dạng Infix sang Postfix

Trang 13

abc+*de/-Lecture 10 – Polish Notation

10.1 Reverse Polish Notation (RPN)

10.2 Chuyển đổi biểu thức dạng Infix sang Postfix

10.2.1 Chuyển đổi dạng Infix sang Postfix

10.2.2 Tính giá trị biểu thức dạng Postfix

10.3 Chuyển đổi biểu thức dạng Infix sang Prefix

10.3.1 Chuyển đổi dạng Infix sang Prefix

10.3.2 Tính giá trị biểu thức dạng Prefix

10.4 Một số vấn đề thực hành

Trang 14

10.2.2 Tính gtbt dạng Postfix

Thuật toán 2 : tính giá trị biểu thức dạng Postfix:

Bước 1: Đọc lần lượt các phần tử của biểu thức E1 (từ trái qua phải)

 Nếu gặp toán hạng thì đẩy nó vào Stack

 Nếu gặp phép toán thì lấy hai phần tử liên tiếp trong Stack thực hiện phép toán, kết quả được đẩy vào trong Stack

Bước 2: Lập lại bước 1 cho đến khi hết tất cả các phần tử trong biểu thức E1 lúc đó đỉnh của Stack chứa giá trị của biểu thức cần tính

Bước 3: Kết thúc.

Trang 15

10.2.2 Tính gtbt dạng Postfix

Xét biểu thức dạng RPN:

4 5 + 2 3 + * 6 + 8 7 + /

51 8 7

4 4

5

4 5

9 9

2

9 2 3

9 2 3

9 5

9 5

45 45

6

45 6

51 51

8

51 8 7

51 15

51 15

Trang 16

Lecture 10 – Polish Notation

10.1 Reverse Polish Notation (RPN)

10.2 Chuyển đổi biểu thức dạng Infix sang Postfix

10.2.1 Chuyển đổi dạng Infix sang Postfix

10.2.2 Tính giá trị biểu thức dạng Postfix

10.3 Chuyển đổi biểu thức dạng Infix sang Prefix

10.3.1 Chuyển đổi dạng Infix sang Prefix

10.3.2 Tính giá trị biểu thức dạng Prefix

10.4 Một số vấn đề thực hành

Trang 17

10.3.1 Chuyển đổi dạng Infix sang Prefix

Thuật toán 3 chuyển đổi biểu thức từ Infix sang Prefix:

Ý tưởng: Sử dụng queue, stack và stackkq.

Bước 1: Đọc một thành phần của biểu thức E (dạng Infix biểu diễn

bằng xâu, đọc từ phải qua trái) Giả sử thành phần đọc được là x

1.1 Nếu x là toán hạng thì đưa nó vào queue

1.2 Nếu x là dấu ‘)’ thì đẩy nó vào stack

1.3 Nếu x là một trong các phép toán +, -, *, / thì

1.3.1 Kiểm tra xem stack có rỗng không? Nếu rỗng, đẩy vào stack, nếu không rỗng, sang bước 1.3.2

1.3.2 Lấy phần tử y ở đỉnh stack

Trang 18

10.3.1 Chuyển đổi dạng Infix sang Prefix

1.3.3 Nếu Pri(y)>=Pri(x), đưa tất cả các phần tử trong queue

vào stackkq, đưa y vào stackkq, đưa x vào stack

1.3.4 Nếu Pri(y)<Pri(x) thì đẩy x vào stack

1.4 Nếu x là dấu ‘(’ thì

1.4.1 Đưa tất cả các phần tử trong queue vào stackkq,

1.4.2 Xét phần tử y ở đầu của stack

1.4.3 y là phép toán thì loại y ra khỏi stack, đưa y vào stackkq, quay về bước 1.4.2

1.4.3 Nếu y là dấu ‘)’ loại y ra khỏi stack

Bước 2: Lập lại bước 1 cho đến khi toàn bộ biểu thức E được duyệt

Trang 19

10.3.1 Chuyển đổi dạng Infix sang Prefix

Bước 3: Đưa tất cả các phần tử trong queue vào stackkq, tất cả phần tử trong stackstackkq

Bước 4: Lấy từng phần tử trong stackkq ra, đó là kết quả dạng

Prefix

Bước 5: Tính giá trị của biểu thức dưới dạng tiền tố.

Chú ý:

Pri(‘(‘)=Pri(‘)‘) <Pri(‘+‘)=Pri(‘-‘)<Pri(‘*‘)=<Pri(‘/‘)

Trang 20

10.3.1 Chuyển đổi dạng Infix sang Prefix

Cho biểu thức: E=a*b+c/d

Kết quả: +*ab/cd

Trang 21

Lecture 10 – Polish Notation

10.1 Reverse Polish Notation (RPN)

10.2 Chuyển đổi biểu thức dạng Infix sang Postfix

10.2.1 Chuyển đổi dạng Infix sang Postfix

10.2.2 Tính giá trị biểu thức dạng Postfix

10.3 Chuyển đổi biểu thức dạng Infix sang Prefix

10.3.1 Chuyển đổi dạng Infix sang Prefix

10.3.2 Tính giá trị biểu thức dạng Prefix

10.4 Một số vấn đề thực hành

Trang 22

10.3.2 Tính gtbt dạng Prefix

Thuật toán 4 Tính giá trị biểu thức dạng Prefix:

Bước 1: Đọc lần lượt các phần tử của biểu thức E1 (từ phải qua trái)

thực hiện phép toán, kết quả được đẩy vào trong stack

Bước 2: Lập lại bước 1 cho đến khi hết tất cả các phần tử trong biểu thức E1 Lúc đó đỉnh của stack chứa giá trị của biểu thức cần tính

Bước 3 Kết thúc.

Trang 23

10.3.2 Tính gtbt dạng Prefix

Ví dụ về tính biểu thức dạng Prefix:

/+7 8 + 6 * + 3 2 + 5 4

51 8 7

4 4

5

4 5

9 9 2

9 2 3

9 2 3

9 5

9 5

45 45

6

45 6

51 51

8

51 8 7

51 15

51 15

Trang 24

Lecture 10 – Polish Notation

10.1 Reverse Polish Notation (RPN)

10.2 Chuyển đổi biểu thức dạng Infix sang Postfix

10.2.1 Chuyển đổi dạng Infix sang Postfix

10.2.2 Tính giá trị biểu thức dạng Postfix

10.3 Chuyển đổi biểu thức dạng Infix sang Prefix

10.3.1 Chuyển đổi dạng Infix sang Prefix

10.3.2 Tính giá trị biểu thức dạng Prefix

10.4 Một số vấn đề thực hành

Trang 25

10.4 Một số vấn đề thực hành

Một số vấn đề liên quan:

1 Chuyển đổi từ Postfix sang Infix

2 Chuyển đổi từ Postfix sang Prefix

3 Chuyển đổi từ Prefix sang Postfix

4 Trường hợp toán hạng không phải là một số!!!

Một vài bài tập nâng cao:

1.Viết chương trình cho phép nhập vào một hàm dạng đa thức dưới dạng chuỗi Nhập giá trị x và in ra giá trị của hàm

2.Viết chương trình cho phép nhập vào một số dạng hàm cơ bản

và vẽ đồ thị hàm

3.Viết chương trình cho phép nhập vào công thức tính toán có

sử dụng một số phép toán như log, khai căn,…

Ngày đăng: 28/08/2014, 21:58

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm