Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
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
Nội dung
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 8/28/14 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 8/28/14 10.1 Reverse Polish Notation Ký pháp nghịch đảo Balan (RPN), gọi Postfix, Charles Hamblin đề xuất vào năm 1950s… Ký pháp lấy ý tưởng Polish notation, đề xuất vào năm 1920 nhà tốn học người Balan có tên Jan Łukasiewicz (Trong số tài liệu gọi ký pháp Łukasiewicz) Dạng Infix Dạng Postfix Dạng Prefix A-B/(C+D) ABCD+/- –A/B+CD 8/28/14 10.1 Reverse Polish Notation Ký pháp Postfix: Ký pháp Postfix đặt toán tử sau tốn hạng Ví dụ: E F/ có nghĩa E/F A B C * + có nghĩa A + B * C Ký pháp Prefix: Ký pháp Prefix đặt toán tử trước toán hạng Ví dụ: /E F có nghĩa E/F + A * B C có nghĩa A + B * C 8/28/14 10.1 Reverse Polish Notation Tại sử dụng RPN? RPN cho phép giảm thời gian việc tính biểu thức Người dùng khơng cần quan tâm đến dấu ngoặc bt RPN cho phép thấy kết sau phép toán Với RPN, việc thực máy tính tỏ hiệu hơn!!! Với việc cho thấy kết ngay, đó, người sử dụng kiểm tra kết dễ hơn, nhanh Với cách viết này, việc tính tốn dựa thứ tự biểu thức, kết hợp với thứ tự ưu tiên phép toán RPN có tính logic cao người dùng đưa biểu thức, sau đưa phép tính cần thực 8/28/14 10.1 Reverse Polish Notation Một vài ví dụ: VD1: Xem xét biểu thức đại số dạng Infix sau: 1+2*3=? Kết hay 9? Trả lời: kết phép * có độ ưu tiên cao + VD2: (1+2) * 3? Trả lời: Kết Rõ ràng, với dạng ký pháp này, người dùng dễ nhầm lẫn tính tốn!!! 8/28/14 10.1 Reverse Polish Notation Xem xét ký pháp RPN sau: 45+6* Kết biểu thức bao nhiêu? Xem xét biểu thức dạng Postfix: 45+* Kết biểu thức bằng? 45+→4+5=9 45+→4+5=9 * → * = 54 * → * = 54 Các bước thực hiện: Các bước thực hiện: 45+6* 645+* 96* 69* 54 54 Biểu thức + * tương tự biểu thức dạng Infix (4+5)*6 Biểu thức + * tương đương với biểu thức dạng Infix: * (4 + 5) 8/28/14 10.1 Reverse Polish Notation Cho biểu thức dạng Infix: (4 + 5) / (6 + 7) Làm để chuyển đổi từ dạng Infix sang RPN? 45+67+/ Cho biểu thức dạng Infix: ((4+5)*(2+3)+6)/(8+7) Cần gõ phím lần? 21 Kết phép biến đổi sang RPN? 45+23+*6+87+/ với dạng RPN, cần gõ phím 13 lần 8/28/14 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 8/28/14 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 thành phần biểu thức E (dạng Infix biểu diễn xâu, đọc từ trái qua phải) Giả sử thành phần đọc x 1.1 Nếu x tốn hạng viết vào bên phải biểu thức E1 (xâu lưu kết Postfix) 1.2 Nếu x dấu ‘(’ đẩy vào Stack 1.3 Nếu x phép tốn +, -, *, / 1.3.1 Xét phần tử y đỉnh Stack 1.3.2 Nếu Pri(y)>=Pri(x) phép tốn loại y khỏi Stack viết y vào bên phải E1 quay lại bước 1.3.1 1.3.3 Nếu Pri(y)