TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
ĐỀ CƯƠNG BÁO CÁO THUẬT TOÁN
ĐỀ TÀI:
CHUYỂN BIỂU THỨC DẠNG TRUNG TỐ RA DẠNG HẬU
TỐ TƯƠNG ỨNG
GVHD: Đoàn Duy Bình
SVTH: Meunluang Thoy
Lớp: 15CNTT2
MSSV: 312023151152
NỘI
DUNG
LÝ DO CHỌN ĐỀ TÀI
• Củng cố nâng cao kiến thức về giải thuật và thuật toán.
• Vận dụng được các kiến thức đã học để áp dụng vào một bài toán cụ thể.
• Hiểu rõ hơn các thuật toán, phương pháp thực hiện trong quá trình thực
hiện đề tài.
• Tìm hiểu Stack.
• Tìm hiểu Queue.
• Tìm hiểu ký pháp Ba Lan xây dựng thuật toán đổi biểu thức trung tố ra
hậu tố tương ứng.
STACK
• Một ngăn xếp là một cấu trúc dữ liệu trừu tượng
(Abstract Data Type – viết tắt là ADT), hầu như
được sử dụng trong hầu hết mọi ngôn ngữ lập
trình.Hệ thống dữ liệu các bài kiểm tra được tổ
chức đơn giản, tiết kiệm bộ nhớ.
• Ngăn xếp là cấu trúc dữ liệu dạng LIFO.
QUEUE
• Hàng đợi (Queue) là một cấu trúc dữ liệu trừu
tượng, là một cái gì đó tương tự như hàng đợi
trong đời sống hàng ngày (xếp hàng).
• Cấu trúc dữ liệu hàng đợi tuân theo phương pháp
First-In-First-Out, tức là dữ liệu được nhập vào
đầu tiên sẽ được truy cập đầu tiên.
CHUYỂN BIỂU THỨC
TRUNG TỐ RA HẬU TỐ
• Thuật toán chuyển đổi này được phát minh bởi vị giáo sư người
Đức nổi tiếng Edsger Dijkstra (cũng là tác giả của thuật toán tìm
đường đi ngắn nhất được đặt theo tên ông và semaphore, một kỹ
thuật để đồng bộ các tiến trình trong lập trình đa nhiệm). Thuật
toán này cũng dựa theo cơ chế ngăn xếp. Ý tưởng chung của
thuật toán cũng là duyệt biểu thức từ trái sang phải.
CHUYỂN BIỂU THỨC
TRUNG TỐ RA HẬU TỐ
• Nếu gặp một toán hạng (con số hoặc biến) thì ghi nó vào chuỗi kết quả
(chuỗi kết quả là biểu thức trung tố).
• Nếu gặp dấu mở ngoặc, đưa nó vào stack.
• Nếu gặp một toán tử (gọi là o1 ), thực hiện hai bước sau:
+Chừng nào còn có một toán tử o2 ở đỉnh ngăn xếp VÀ độ ưu tiên của
o1 nhỏ hơn hay bằng độ ưu tiên của o2 thì lấy o2 ra khỏi ngăn xếp và
ghi vào kết quả.
+Push o1 vào ngăn xếp
CHUYỂN BIỂU THỨC
TRUNG TỐ RA HẬU TỐ
• Nếu gặp dấu đóng ngoặc thì cứ lấy các toán tử trong ngăn xếp ra và ghi
vào kết quả cho đến khi lấy được dấu mở ngoặc ra khỏi ngăn xếp.
• Khi đã duyệt hết biểu thức trung tố, lần lượt lấy tất cả toán hạng (nếu
có) từ ngăn xếp ra và ghi vào chuỗi kết quả.
VD: Chúng ta sẽ chuyển biểu thức A*B+C*((D-E)+F)/G từ dạng Infix
sang dạng Postfix
CHUYỂN BIỂU THỨC
TRUNG TỐ RA HẬU TỐ
CHUYỂN BIỂU THỨC
TRUNG TỐ RA HẬU TỐ
CHUYỂN BIỂU THỨC
TRUNG TỐ RA HẬU TỐ
KẾT QUẢ ĐẠT ĐƯỢC
Cám ơn quý thầy cô và các
bạn đã lắng nghe!