Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
145,5 KB
Nội dung
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc SÁNG KIẾN KINH NGHIỆM: MỘT SỐ PHƯƠNG PHÁP TIẾP CẬN BÀI TOÁN, LÀM GIẢM ĐỘ PHỨC TẠP CỦA THUẬT TỐN Quảng Bình, tháng 12 năm 2018 -1- MỤC LỤC MỤC LỤC CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Cho số nguyên X có M chữ số, số nguyên Y có N chữ số .9 Yêu cầu: Tính tổng X Y Dữ liệu vào: Cho tệp SUM.INP với cấu trúc Dòng 1: Ghi hai số M, N (10 then For j:=1 to D[i] write(f1,i,' '); Close(f); Close(f1); END Bài 2: Tích lớn Cho dãy gồm N số nguyên Hãy tìm số dãy với tích T chúng lớn Dữ liệu: Vào từ file văn TICHMAX.INP: - Dòng đầu ghi số N (3 ≤ N ≤ 10000) - Dòng thứ hai chứa N số ngun có giá trị tuyệt đối không vượt 1000 Kết quả: Ghi file văn TICHMAX.OUT số T -6- Ví dụ: TICHMAX.INP 9 -3 10 TICHMAX.OUT 810 Lời giải: + Cách tiếp cận tầm thường: Sử dụng thuật toán duyệt vét cạn với độ phức tạp O(n3) sau: KQ:=MinInt; For i:=1 to n-2 For j:=i+1 to n-1 For k:=1 to n If a[i]*a[j]*a[k] > KQ then KQ:=a[i]*a[j]*a[k]; + Chúng ta có cách tiếp cận sau đưa độ phức tạp thuật toán O(n) Nếu tích lớn phần tử bao gồm: - Ba số dương: Ba số phải số lớn nhất, nhì, ba dãy - Một số âm hai số dương: Dãy phải gồm hai số dương, khơng ta lấy tích ba số dương để đạt giá trị lớn Ta suy ba số phải ba số lớn nhất, nhì, ba dãy - Hai số âm số dương: Số dương phải số lớn hai số âm phải hai số nhỏ nhất, nhì dãy - Ba số âm: Dãy phải gồm tồn số âm, có số dương ta lấy tích số dương hai số âm để thu tích dương Ta suy ba số cần tìm phải ba số lớn nhất, nhì, ba dãy Vậy suy ra, T=max(max1*max2*max3,min1*min2*max1), với max1, max2, max3, min1, min2 số lớn nhất, nhì, ba số nhỏ nhất, nhì dãy Ta đọc qua số dãy cập nhật max1, max2, max3, min1, min2 mà không cần lưu lại dãy số Đoạn lệnh cập nhật min1, min2 đọc vào số x: If (x=max1) then Begin max3:=max2; max2:=max1; max1:=x; End Else If (x>=max2) then Begin max3:=max2; max2:=x; End Else if (x>=max3) then max3:=x; If (x