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
Họ 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 số khơng âm dãy n số nguyên đánh giá độ phức tạp 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ạng trung tố sang hậu tố Ứng dụng giải thuật để 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) { float tb, tong=0; =>0(1) int dem=0; =>0(1) for(int i=0;i n lần { ADQT vòng for => O(n * 1) =O(n) if(a[i]>=0) =>0(1) { tong +=a[i]; =>0(1) ADQT tổng max => O(max(1,1,1) =O(1) dem++; =>0(1) } } 8.return tong/dem; =>0(1) } Từ 1,2,3,4,8 ADQT tổng max => Độ phức tạp giải thuật T(n)= O(n) Câu 2: Giải thuật: Nếu gặp toán hạng (con số biến) ghi vào kết − Nếu gặp dấu mở ngoặc đưa vào stack − Nếu gặp tốn tử (ví dụ t1) thực bước sau: Bước 1: Nếu stack không rỗng, Chừng đỉnh stack toán tử toán tử có độ ưu tiên lớn tốn tử lấy tốn tử khỏi stack cho kết Bước 2: Nếu stack rỗng tốn tử t2 đỉnh stack có độ ưu tiên thấp t1 ghi (push) t1 vào ngăn xếp − Nếu gặp dấu đóng ngoặc lấy tất toán tử ngăn xếp ghi vào kết đỉnh ngăn xếp 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ấy tất (nếu có) từ ngăn xếp ghi vào chuỗi kết 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) T2 = “+”, Pop / Push / vào kết Ghi 14 vào kết Pop hết Stack gặp (dừng ghi vào kết Pop + Ghi - Stack Ghi (Stack Ghi vào kết Ghi + Stack Ghi vào kết T1=”+”