Tải bản đầy đủ

doitiento hauto final (1)

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM

KHOA TIN HỌC
---  ---

ĐỀ CƯƠNG BÁO CÁO THUẬT TOÁN
ĐỀ TÀI 7:

CHUYỂN BIỂU THỨC DẠNG TRUNG TỐ RA DẠNG
HẬU TỐ TƯƠNG ỨNG
Sinh viên thực hiện: Meunluang Thoy
Lớp SH: 15CNTT2
MSSV: 312023151152
GVHD: Đoàn Duy Bình

Đà Nẵng, tháng 5 năm 2018


LỜI CẢM ƠN


Sau thời gian quá trình học tập bộ môn cấu trúc dữ liệu và thuật toán, em được
nhận đề tài “Chuyển biểu thức dạng trung tốt ra dạng hậu tố tương ứng” để hiểu rõ hơn
về môn học và có thể vận dụng những kiến thức đã được học vào bài toán cụ thể.
Trong quá trình hoàn thành đề tài em xin chân thành cảm ơn thầy “Đoàn Duy
Bình” đã hướng dẫn và định hướng giúp em giải quyết những vấn đề khó khăn khi
thực hiện đề tài này.
Mặc dù đã cố gắng hoàn thành đồ án trong phạm vi và khả năng cho phép nhưng
chắc chắn sẽ không tránh khỏi những thiếu sót và hạn chế. Tôi rất mong nhận được sự
thông cảm, góp ý và tận tình chỉ bảo của quý Thầy Cô và các bạn để đề tài có thể được
hoàn thiện hơn.
Một lần nữa tôi xin chân thành cảm ơn, kính chúc các quý Thầy Cô dồi dào sức
khỏe và thành công!
Sinh viên thực hiện

Meunluang Thoy


MỤC LỤC

Trang

Chương 1.
CƠ SỞ LÝ THUYẾT.......................................................................1
1.1
GIỚI THIỆU VỀ ĐỀ TÀI
1
1.2
MỤC TIÊU VÀ NỘI DUNG CỦA ĐỀ TÀI
1
1.2.1
Mục tiêu đề tài...............................................................................................1
1.2.2
Nội dung thực hiện.........................................................................................1
1.3
Stack
2
1.3.1
Định nghĩa Stack............................................................................................2
1.3.2
Biểu diễn Stack..............................................................................................2


1.3.3
Các hoạt động cơ bản trên stack.....................................................................2
1.4
CẤU TRÚC DỮ LIỆU QUEUE
3
1.4.1
Định nghĩa Queue..........................................................................................3
1.4.2
Biểu diễn Queue.............................................................................................3
1.4.3
Các hoạt động cơ bản trên queue...................................................................4
Chương 2.
PHÁT BIỂU VẤN ĐỀ.....................................................................5
2.1
YÊU CẦU BÀI TOÁN VÀ HƯỚNG GIẢI QUYẾT
5
2.1.1
Yêu cầu bài toán.............................................................................................5
2.1.2
Hướng giải quyết............................................................................................5
2.2
THUẬT TOÁN KÝ PHÁP BA LAN
5
2.2.1
Khái niệm.......................................................................................................5
2.2.2
Giải quyết bài toán bằng thuật toán ký pháp Ba Lan......................................5
Chương 3.
TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ.....................................7
3.1
XÂY DỰNG CHƯƠNG TRÌNH THEO KÝ PHÁP BA LAN
7
3.2
KẾT QUẢ DEMO
7
3.3
ĐÁNH GIÁ ỨNG DỤNG
10
3.3.1
Mục tiêu đạt được........................................................................................10
3.3.2
Hạn chế........................................................................................................10
3.3.3
Định hướng phát triển ứng dụng..................................................................10

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN........................................................11


TÀI LIỆU THAM KHẢO.................................................................................12
1.

CƠ SỞ LÝ THUYẾT

1.1

GIỚI THIỆU VỀ ĐỀ TÀI
Trong khoa học máy tính, cấu trúc dữ liệu là một cách lưu dữ liệu trong máy tính
sao cho nó có thể được sử dụng một cách hiệu quả.
Trong thiết kế nhiều loại chương trình, việc chọn cấu trúc dữ liệu là vấn đề quan
trọng. Kinh nghiệm trong việc xây dựng các hệ thống lớn cho thấy khó khăn của việc
triển khai chương trình, chất lượng và hiệu năng của kết quả cuối cùng phụ thuộc rất
nhiều.
Mỗi loại cấu trúc dữ liệu phù hợp với một vài loại ứng dụng khác nhau, một số
cấu trúc dữ liệu dành cho những công việc đặc biệt. Ví dụ, các B-tree đặc biệt phù hợp
trong việc thiết kế cơ sở dữ liệu.vào việc chọn cấu trúc dữ liệu tốt nhất. Sau khi cấu
trúc dữ liệu được chọn, người ta thường dễ nhận thấy thuật toán cần sử dụng. Đôi khi
trình tự công việc diễn ra theo thứ tự ngược lại: cấu trúc dữ liệu được chọn do những
bài toán quan trọng nhất định có thuật toán chạy tốt nhất với một số cấu trúc dữ liệu cụ
thể. Trong cả hai trường hợp, việc lựa chọn cấu trúc dữ liệu là rất quan trọng.
Chính vì tầm quan trọng đó nên đối với một người lập trình viên việc nắm rõ
những kiến thức môn học này giống như người dược sỹ cần phải nắm rõ công dụng
của các dược liệu. Là một sinh viên thuộc chuyên nghành khoa tin học, được các thầy
cô cung cấp các kiến thức về cấu trúc dữ liệu và thuật toán, chúng em được tiếp tục áp
dụng những kiến thức đó vào thực tế bài toán , để thấy rõ hơn tầm quan trọng của nó,
đó chính là mục đích của việc thực hiện đề tài :”Chuyển biểu thức dạng trung tố ra
dạng hậu tố tương ứng”
1.2
MỤC TIÊU VÀ NỘI DUNG CỦA ĐỀ TÀI
1.2.1 Mục tiêu đề 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.
1.2.2 Nội dung thực hiện
1. Tìm hiểu Stack.
1. Tìm hiểu Queue.
Sinh viên thực hiện:Meunluang Thoy

Giáo viên hướng dẫn: Đoàn Duy Bình


2. 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.
1.3
Stack
1.3.1 Định nghĩa 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. Đặt tên là ngăn
xếp bởi vì nó hoạt động như một ngăn xếp trong đời sống thực, ví dụ như một cỗ bài
hay một chồng đĩa, …
Trong đời sống thực, ngăn xếp chỉ cho phép các hoạt động tại vị trí trên cùng của
ngăn xếp. Ví dụ, chúng ta chỉ có thể đặt hoặc thêm một lá bài hay một cái đĩa vào trên
cùng của ngăn xếp. Do đó, cấu trúc dữ liệu trừu tượng ngăn xếp chỉ cho phép các thao
tác dữ liệu tại vị trí trên cùng. Tại bất cứ thời điểm nào, chúng ta chỉ có thể truy cập
phần tử trên cùng của ngăn xếp.
Đặc điểm này làm cho ngăn xếp trở thành cấu trúc dữ liệu dạng LIFO. LIFO là
viết tắt của Last-In-First-Out. Ở đây, phần tử được đặt vào (được chèn, được thêm vào)
cuối cùng sẽ được truy cập đầu tiên. Trong thuật ngữ ngăn xếp, hoạt động chèn được
gọi là hoạt động PUSH và hoạt động xóa được gọi là hoạt động POP.
1.3.2 Biểu diễn Stack
Một ngăn xếp có thể được triển khai theo phương thức của Mảng (Array), Cấu
trúc (Struct), Con trỏ (Pointer) và Danh sách liên kết (Linked List). Ngăn xếp có thể là
ở dạng kích cỡ cố định hoặc ngăn xếp có thể thay đổi kích cỡ. Phần dưới chúng ta sẽ
triển khai ngăn xếp bởi sử dụng các mảng với việc triển khai các ngăn xếp cố định.

1.3.3

Hình 1: Biểu diễn stack
Các hoạt động cơ bản trên stack

3


Các hoạt động cơ bản trên ngăn xếp có thể liên quan tới việc khởi tạo ngăn xếp,
sử dụng nó và sau đó xóa nó. Ngoài các hoạt động cơ bản này, một ngăn xếp có hai
hoạt động nguyên sơ liên quan tới khái niệm, đó là:
Hoạt động push(): lưu giữ một phần tử trên ngăn xếp.
Hoạt động pop(): xóa một phần tử từ ngăn xếp.
Khi dữ liệu đã được PUSH lên trên ngăn xếp:
Để sử dụng ngăn xếp một cách hiệu quả, chúng ta cũng cần kiểm tra trạng thái
của ngăn xếp. Để phục vụ cho mục đích này, dưới đây là một số tính năng hỗ trợ khác
của ngăn xếp:
Hoạt động peek(): lấy phần tử dữ liệu ở trên cùng của ngăn xếp, mà không xóa
phần tử này.
Hoạt động isFull(): kiểm tra xem ngăn xếp đã đầy hay chưa.
Hoạt động isEmpty(): kiểm tra xem ngăn xếp là trống hay không.
Tại mọi thời điểm, chúng ta duy trì một con trỏ tới phần tử dữ liệu vừa được
PUSH cuối cùng vào trên ngăn xếp. Vì con trỏ này luôn biểu diễn vị trí trên cùng của
ngăn xếp vì thế được đặt tên là top. Con trỏ top cung cấp cho chúng ta giá trị của phần
tử trên cùng của ngăn xếp mà không cần phải thực hiện hoạt động xóa ở trên (hoạt
động pop).
1.4
CẤU TRÚC DỮ LIỆU QUEUE
1.4.1 Định nghĩa 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).
Khác với ngăn xếp, hàng đợi là mở ở cả hai đầu. Một đầu luôn luôn được sử
dụng để chèn dữ liệu vào (hay còn gọi là sắp vào hàng) và đầu kia được sử dụng để
xóa dữ liệu (rời hàng). Cấu trúc dữ liệu hàng đợi tuân theo phương pháp First-In-FirstOut, tức là dữ liệu được nhập vào đầu tiên sẽ được truy cập đầu tiên.
Trong đời sống thực chúng ta có rất nhiều ví dụ về hàng đợi, chẳng hạn như hàng
xe ô tô trên đường một chiều (đặc biệt là khi tắc xe), trong đó xe nào vào đầu tiên sẽ
thoát ra đầu tiên. Một vài ví dụ khác là xếp hàng học sinh, xếp hàng mua vé, …
1.4.2 Biểu diễn Queue
Tương tự như cấu trúc dữ liệu ngăn xếp, thì cấu trúc dữ liệu hàng đợi cũng có thể
được triển khai bởi sử dụng Mảng (Array), Danh sách liên kết (Linked List), Con trỏ
(Pointer) và Cấu trúc (Struct). Để đơn giản, phần tiếp theo chúng ta sẽ tìm hiểu tiếp về
hàng đợi được triển khai bởi sử dụng mảng một chiều.
Sinh viên thực hiện:Meunluang Thoy

Giáo viên hướng dẫn: Đoàn Duy Bình


Hình 1.Queue

1.4.3

Các hoạt động cơ bản trên queue
Các hoạt động trên cấu trúc dữ liệu hàng đợi có thể liên quan tới việc khởi tạo
hàng đợi, sử dụng dữ liệu trên hàng đợi và sau đó là xóa dữ liệu khỏi bộ nhớ. Danh
sách dưới đây là một số hoạt động cơ bản có thể thực hiện trên cấu trúc dữ liệu hàng
đợi:
Hoạt động enqueue(): thêm (hay lưu trữ) một phần tử vào trong hàng đợi.
Hoạt động dequeue(): xóa một phần tử từ hàng đợi.
Để sử dụng hàng đợi một cách hiệu quả, chúng ta cũng cần kiểm tra trạng thái
của hàng đợi. Để phục vụ cho mục đích này, dưới đây là một số tính năng hỗ trợ khác
của hàng đợi:
Phương thức peek(): lấy phần tử ở đầu hàng đợi, mà không xóa phần tử này.
Phương thức isFull(): kiểm tra xem hàng đợi là đầy hay không.
Phương thức isEmpty(): kiểm tra xem hàng đợi là trống hay hay không.
Trong cấu trúc dữ liệu hàng đợi, chúng ta luôn luôn: (1) dequeue (xóa) dữ liệu
được trỏ bởi con trỏ front và (2) enqueue (nhập) dữ liệu vào trong hàng đợi bởi sự giúp
đỡ của con trỏ rear.

5


2.

2.1
2.1.1

PHÁT BIỂU VẤN ĐỀ

YÊU CẦU BÀI TOÁN VÀ HƯỚNG GIẢI QUYẾT
Yêu cầu bài toán

Đề tài yêu cầu đổi một biểu thức dạng trung tố ra hậu tố tương ứng. Kiểu biểu
thức “a+b” thành biểu thức “ab+”.
2.1.2

Hướng giải quyết

Đối với yêu cầu bài toán này ta sử dụng thuật toán Ký pháp Ba Lan
(Prefix/Postfix) để giải quyết yêu cầu của đề tài.
2.2
THUẬT TOÁN KÝ PHÁP BA LAN
2.2.1 Khái niệm
Ký pháp Ba Lan được nhà toán học Jan Lukasiewicz đề xuất vào năm 1920. Đây
là thuật toán biểu diễn biểu thức bằng cách đặt các toán tử lên phía trước (ví dụ như a
+ b sẽ thành + a b). Đây được gọi là Biểu thức tiền tố (Prefix). Khác hẳn với biểu thức
thông thường ta được học (Biểu thức trung tố – infix), Prefix loại bỏ hoàn toàn các dấu
ngoặc ( ), giảm bớt được độ phiền nhiễu của thứ tự các phép toán.
Trái ngược lại với Prefix là Biểu thức hậu tố (Postfix). Nếu Prefix biểu diễn toán
tử phía trước các toán hạng, thì Postfix sẽ biểu diễn đằng sau (a + b thành a b +).
Postfix được nhà khoa học máy tính Charles Hamblin phát minh vào năm 1950, trước
đó sử dụng tên gọi là RPN (Reverse Polish Notation).
2.2.2 Giải quyết bài toán bằng thuật toán ký pháp Ba Lan
Cách trình bày biểu thức theo cách thông thường tuy tự nhiên với con người
nhưng lại khá “khó chịu” đối với máy tính vì nó không thể hiện một cách tường minh
quá trình tính toán để đưa ra giá trị của biểu thức. Để đơn giản hóa quá trình tính toán
này, ta phải biến đổi lại biểu thức thông thường về dạng hậu tố - postfix (cách gọi ngắn
của thuật ngữ ký pháp nghịch đảo Ba Lan). Để phân biệt hai dạng biểu diễn biểu thức,
ta gọi cách biểu diễn biểu thức theo cách thông thường là trung tố - infix (vì toán tử
nằm ở giữa hai toán hạng).
Ký pháp nghịch đảo Ba Lan được phát minh vào khoảng giữa thập kỷ 1950 bởi
Charles Hamblin - một triết học gia và khoa học gia máy tính người Úc - dựa theo
công trình về ký pháp Ba Lan của nhà Toán học người Ba Lan Jan Łukasiewicz.
Hamblin trình bày nghiên cứu của mình tại một hội nghị khoa học vào tháng 6 năm
1957 và chính thức công bố vào năm 1962.

Sinh viên thực hiện:Meunluang Thoy

Giáo viên hướng dẫn: Đoàn Duy Bình


Từ cái tên hậu tố các bạn cũng đoán ra phần nào là theo cách biểu diễn này, các
toán tử sẽ được đặt sau các toán hạng. Cụ thể là biểu thức trung tố: 4+5 sẽ được biểu
diễn lại thành 4 5 +.
Quá trình tính toán giá trị của biểu thức hậu tố khá tự nhiên đối với máy tính. Ý
tưởng là đọc biểu thức từ trái sang phải, nếu gặp một toán hạng (con số hoặc biến) thì
push toán hạng này vào ngăn xếp; nếu gặp toán tử, lấy hai toán hạng ra khỏi ngăn xếp
(stack), tính kết quả, đẩy kết quả trở lại ngăn xếp. Khi quá trình kết thúc thì con số
cuối cùng còn lại trong ngăn xếp chính là giá trị của biểu thức đó.
Ví dụ: biểu thức trung tố :
5 + ((1 + 2) * 4) + 3
được biểu diễn lại dưới dạng hậu tố là (ta sẽ bàn về thuật toán chuyển đổi từ
trung tố sang hậu tố sau):
512+4*+3+
Chuyển đổi từ trung tố sang 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:
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:
o 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ả.
o Push o1 vào ngăn xếp
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ả.

7


3.

3.1

TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ

XÂY DỰNG CHƯƠNG TRÌNH THEO KÝ PHÁP BA LAN
Xây dựng hàm kiểm tra trong chuỗi, phần tử nào là số

bool KiemTraChuSo(char C)
{
if(C >= '0' && C <= '9') return true;
if(C >= 'a' && C <= 'z') return true;
if(C >= 'A' && C <= 'Z') return true;
return false;
}

Xây dựng hàm kiểm tra trong chuỗi, phần tử nào là dấu
bool KiemTraDau(char C)
{
return C == '+' || C == '-' || C == '*' || C == '/' || C == '$';
}

Xây dựng hàm so sánh dâu nào có giá tri lớn hơn
int GetOperatorWeight(char op)
{
int weight = -1;
switch(op)
{
case '+':
case '-':

Sinh viên thực hiện:Meunluang Thoy

Giáo viên hướng dẫn: Đoàn Duy Bình


weight = 1;
break;
case '*':
case '/':
weight = 2;
break;
default:break;
}
return weight;
}

Xây dựng hàm so sánh dấu 1 với dấu 2
int SoSanhDau(char op1, char op2)
{
int op1Weight = GetOperatorWeight(op1);
int op2Weight = GetOperatorWeight(op2);
if(op1Weight == op2Weight)
{
if(IsRightAssociative(op1)) return false;
else return true;
}
return op1Weight > op2Weight ? true: false;
}

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:
- 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ố).
9


- 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:
o 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ả.
o Push o1 vào ngăn xếp
- 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ả.
string TrungToSangHauTo(string expression)
{
stack myStack;
string postfix = ""; // Initialize postfix as empty string.
cout <<< setw(15) << "Postfix" << endl;
for(int i = 0;i< expression.length();i++) {
if(expression[i] == ' ' || expression[i] == ',') continue;
else if(KiemTraDau(expression[i]))
{
while(!myStack.empty()
&&
myStack.top()
SoSanhDau(myStack.top(), expression[i]))

!=

'('

&&

{
postfix+= myStack.top();
myStack.pop();
}
myStack.push(expression[i]);
}
Sinh viên thực hiện:Meunluang Thoy

Giáo viên hướng dẫn: Đoàn Duy Bình


// Else if character is an operand
else if(KiemTraChuSo(expression[i]))
{
postfix +=expression[i];
}

else if (expression[i] == '(')
{
myStack.push(expression[i]);
}

else if(expression[i] == ')')
{
while(!myStack.empty() && myStack.top() != '(') {
postfix += myStack.top();
myStack.pop();
}
myStack.pop();
}
cout <print_stack(myStack) << setw(15) << postfix << endl;
}

while(!myStack.empty()) {
postfix += myStack.top();
myStack.pop();
}

return postfix;
}

Hàm hiện thị tất cả trong một stack
11


string print_stack(stack c) {
string stack_ = "";
while (!c.empty()) {
stack_ += c.top();
c.pop();
}
reverse(stack_.begin(), stack_.end());
return stack_;
}

3.2

KẾT QUẢ DEMO

Sinh viên thực hiện:Meunluang Thoy

Giáo viên hướng dẫn: Đoàn Duy Bình


KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Qua quá trình nghiên cứu và thực hiện đề tài, luận văn đã đạt được một số kết
quả như sau:
1. Về mặt lý thuyết
Đã tìm hiểu và nắm được stack , queue.
Hiểu được phương pháp đổi trung tố ra hậu tố sử dụng thuật toán ký tự Ba Lan.
2. Về mặt thực hành
Biết cách lên kế hoạch chi tiết để thực hiện một dự án hoàn thành đúng tiến độ.
Khả năng tự học, tự nghiên cứu tài liệu để xây dựng một ứng dụng trên Android
khi hiểu biết về nó không được nhiều.
Hiểu được các phần tổ chức dữ liệu trong android, cấu trúc file json.
3. Hướng phát triển
Tuy nhiên, với kiến thức có hạn, trong quá trình làm luận văn còn nhiều thiếu
xót.Hy vọng trong thời gian tới có thể phát triển ứng dụng một cách tốt hơn, nhiều tính
năng mới hơn.

13


TÀI LIỆU THAM KHẢO

[1]

Kí pháp Ba Lan Wikipedia. [Online].
https://vi.wikipedia.org/wiki/K%C3%AD_ph%C3%A1p_Ba_Lan

[2]

Thảo luận hướng dẫn thuật toán Ba Lan. [Online].
https://trachanhso.net/thuat-toan-ky-phap-ba-lan

[3]

Xây dựng code từ thuật toán. [Online].
https://daynhauhoc.com/t/giup-do-ky-phap-balan-dao-trung-to-hauto/7680

[4]

Giáo trình môn học cấu trúc dữ liệu và thuật toán - Thầy ….

Sinh viên thực hiện:Meunluang Thoy

Giáo viên hướng dẫn: Đoàn Duy Bình



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×