Kí pháp Ba lan (tiếng Anh: Polish notation) là một cách viết một biểu thức đại số rất thuận lợi cho việc thực hiện các phép toán. Đặc điểm cơ bản của cách viết này là không cần dùng đến các dấu ngoặc và luôn thực hiện từ trái sang phải.
Mục lục |
Kí pháp Ba Lan do nhà logic toán Jan Łukasiewicz đề xuất khoảng năm 1920. Jan Łukasiewicz là một nhà toán học người Ba Lan. Ông sinh ra ở Lwów, Galicia (nay là Lviv, Ukraina). Lĩnh vực nghiên cứu chính của ông là logic toán.
Một phép toán hai ngôi trên tập hợp X là một ánh xạ f: X×X →X cho (a,b)
f(a,b)
A. Ánh xạ f khi đó thường được ký hiệu bởi *, được gọi là toán tử, các phần tử a, b được gọi là các hạng tử (còn gọi là toán hạng).
Khi viết biểu thức biểu diên phép toán đó ta có thể đặt ký hiệu toán tử ở trước, sau hoặc giữa các toán hạng (là biến hoặc hằng). Thông thường trong các biểu thức đại và số học, ta viết kí hiệu phép toán giữa hai hạng tử. Ví dụ : a +b, a * b, ... Khi một biểu thức có nhiều phép toán, ta dùng các cặp dấu ngoặc "(", ")" và thứ tự ưu tiên các phép toán để chỉ rõ thứ tự thực hiện các phép toán. (Các phép toán đều quy về phép toán 2 ngôi.)
Ta cũng có thể viết hai hạng tử trước và kí hiệu toán tử sau. Chẳng hạn:
Cũng có thể viết toán tử trước, hai toán hạng sau. Chẳng hạn:
Dùng cây biểu diễn biểu thức có thể thấy rõ trình tự tính toán biểu thức.
Ví dụ:
Được thực hiện theo sơ đồ biểu diễn bởi cây nhi phân sau
-
/ \
* ^
/ \ / \
a + d 5
/ \
b c
Ta mô tả quá trình đọc, ghi nhận giá trị và thực hiện phép tính, giống như quá trình duyệt cây biểu thức theo thứ tự giữa như sau:
Để đơn giản ta giả sử các phép toán đều là hai ngôi. Khi đó cây biểu thức là cây nhị phân đầy đủ. Quy tắc thực hiện phép toán trên cây như sau:
- -
/ \ / \
* ^ + ^
/ \ / \ / \ / \
a + d 5 * c d 5
/ \ / \
b c a b
Theo cách này, mỗi khi duyệt một đỉnh
Khi duyệt theo thứ tự sau, việc thực hiện phép tính tiến hành theo quy tắc:
Mỗi khi thăm một đỉnh thì:
Với dãy (1) nếu không dùng đến dấu ngoặc, có thể có hai cây biểu thức khác nhau cho cùng một dãy đỉnh khi duyệt thứ tự giữa. Còn với dãy (2) cùng với lưu ý rằng các biến và hằng luôn được biểu diễn bằng các lá, các toán tử luôn biểu diễn bởi các nút trong, từ mỗi dãy dạng (2) ta luôn dựng lại được cây biểu thức duy nhất theo giải thuật sau: Khi độ dài dãy lớn hơn 1, duyệt từ bên trái sang, nếu gặp một phần tử là toán tử, thì lấy hai phần tử đứng trước nó ra khỏi dãy chuyển thành hai con của phần tử ấy (theo đúng thứ tự). Vì thế biểu thức viết bởi dãy (2) là hoàn toàn xác định.
(x+y)*z
Việc tính giá trị một biểu thức viết dưới dạng phép toán sau rất thuận tiện như trên, tuy nhiên, theo thói quen thông thường, việc nhập biểu thức đó vào lại không dễ, người ta thường nhập vào một công thức dưới dạng thông thường (phép toán giữa) rồi dùng chương trình chuyển đổi nó sang dạng phép toán sau. Chúng ta hãy xét biểu thức trong ví dụ trên
Kí hiệu biểu thức ghi dưới dạng phép toán sau là P. Trong quá trình chuyển đổi ta dùng một stack S để lưu các phần tử trong P chưa sử dụng đến. Khi đọc từ trái sang phải biểu thức Q la lần lượt có:
| Bài này còn sơ khai. Mời bạn góp sức viết thêm để bài được hoàn thiện hơn. Xem phần trợ giúp về cách sửa bài. |