Tải bản đầy đủ (.docx) (4 trang)

Viết giải thuật tính trung bình cộng của các số không âm trong một dãy n số nguyên và đánh giá độ phức tạp của thuật toán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (64.51 KB, 4 trang )

Họ và tên: Nguyễn Hữu Đô
Lớp: 71DCHT21
Mã SV: 71DCHT22034
Đề 15:
Câu 1:
Viết giải thuật tính trung bình cộng của các số không âm trong một dãy n số nguyên
và đánh giá độ phức tạp của thuật toán.
Câu 2:
Xây dựng giải thuật sử dụng cấu trúc Stack để chuyển biểu thức dưới dạng trung tố
sang hậu tố. Ứng dụng giải thuật trên để minh họa biểu thức sau:
M= (86/2 + 14) - (2+5 * 8)
Bài làm:
Câu 1:
Giải thuật:
1.Void float TbcKhongAm(int a[], int n) =>0(1)

{
2. float tb, tong=0; =>0(1)
3. int dem=0; =>0(1)
4. for(int i=0;i<n;i++) => n lần
{

ADQT vòng for => O(n
* 1) =O(n)

5. if(a[i]>=0) =>0(1)
{
6. tong +=a[i]; =>0(1)

ADQT tổng max =>
O(max(1,1,1) =O(1)



7. dem++; =>0(1)
}
}
8.return tong/dem; =>0(1)
}

Từ 1,2,3,4,8 ADQT tổng max => Độ phức tạp của giải thuật T(n)= O(n)


Câu 2:
Giải thuật:
Nếu gặp 1 toán hạng (con số hoặc biến) thì nó ghi vào kết quả
− Nếu gặp dấu mở ngoặc thì đưa nó vào stack.
− Nếu gặp 1 tốn tử (ví dụ là t1) thì thực hiện 2 bước sau:
Bước 1: Nếu stack không rỗng, Chừng nào ở đỉnh stack là tốn tử và tốn tử
đó có độ ưu tiên lớn hơn hoặc bằng toán tử hiện tại thì lấy tốn tử đó ra khỏi
stack và cho ra kết quả.
Bước 2: Nếu stack rỗng hoặc toán tử t2 ở đỉnh stack có độ ưu tiên thấp hơn t1
thì ghi (push) t1 vào ngăn xếp
− Nếu gặp dấu đóng ngoặc thì cứ lấy các tất cả các tốn tử trong ngăn xếp ra và
ghi vào kết quả cho đến khi đỉnh ngăn xếp là dấu mở ngoặc .
- Loại dấu mở ngoặc 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ả (nếu có) từ ngăn xếp và
ghi vào chuỗi kết quả
Void trungtosanghau()
{
//doc ki tu x cua bt tu trai sang phai
if (x = ‘(“) push (‘(‘)
If (x = toán hạng) ghi vào kq

If (x = toán tử)// giả sử t1
{
If (stack! =rỗng)
{
while (đưt(t2)>=đưt(t1)
}
}
{


//t2 ở đỉnh stack
Pop(t2);
Ghi t2 vào kq
Push (t1)
}
If (stack =rỗng || dưt(t2)Push (t1)
If (x=‘)‘)
While (stack =‘(’)
{
Pop hết stack ghi vào kq
}
- xóa dấu mở ngoặc
If (bt=rỗng) lẫy hết stack ra và ghi vào kq
Chuyển biểu thức trung tố sang hậu tố: M= (86/2 + 14) - (2+5 * 8)
Đọc
(
86
/
2

+
14
)
(
2
+
5
*

Thao Tác
Ghi (Stack
Ghi 86 vào kết quả
Ghi / Stack
Ghi 2 vào kết quả
T1 = “/” > T2 = “+”, Pop /
rồi Push / vào kết quả
Ghi 14 vào kết quả
Pop hết Stack ra cho đến khi
gặp (dừng ghi vào kết quả
Pop +
Ghi - Stack
Ghi (Stack
Ghi 2 vào kết quả
Ghi + Stack
Ghi 5 vào kết quả
T1=”+”
Stack

Kết Quả


(
(/
(/
(+

86
86
862
862/

(+

862/14
862/14

Empty
-(
-(
-(+
-(+
-(+

862/14+
862/14+
862/14+
862/14+2
862/14+2
862/14+25
862/14+25*



8
)

Push * vào kết quả
Ghi 8 vào kết quả
-(+
Pop hết Stack ra cho đến khi
gặp (dừng ghi vào kết quả
Pop +
Pop Empty

862/14+25*8
862/14+25*8
862/14+25*8+
862/14+25*8+-



×