Bài 9. Lập trình sắp xếp nhanh trang 61 SBT Tin học 11 Cánh diềuHãy xác định độ phức tạp của thuật toán Quick Sort trong trường hợp xấu nhất.Tổng hợp đề thi học kì�♉� 2 lớp 11 tất cả các môn - Cánh diều Toán - Văn - Anh - Lí - Hóa - SinhQuảng cáo
Lựa chọn câu để xem lời giải nhanh hơn
Fcs37 Hãy xác định độ phức tạpಌ của thuật toán Quick Sort trong trường hợp xấu nhất. Lời giải chi tiết: Độ phứ๊c tạp của thuật ♉toán Quick Sort trong trường hợp xấu nhất: O(n2). Fcs38 Mã lệnh Python sau đây thể hiện hàm sắp xếp nhanh sử dụng phân đoạn Lomuto, được trích dẫn từ Hình 3 trong sách giáo k🌼hoa Tin học 11 – 🦩Khoa học máy tính. def quickSort(a, lo, hi): if lo < hi: p = ph🍸andoan Lomuto (a, lo, hi)ไ quickSort (a, lo, p 1) quickSort(a, p+1, hi) Có thể thấy rằng trong phần cài đặt của hàm quickSort, ta lại gọi chính nó hai lần. Kĩ thuật này được gọi là đệ quy. Em hãy giải thích tại sao hàm quickSort k💦hông chạy vô hạn với một🎃 bộ tham số hợp lệ, dù nó sẽ liên tục gọi lại chính nó. Lời giải chi tiết: Em tránh được việc đệ quy vô hạn vì phần cài đặt luôn đảm bảo điều kiện dừng là lo 2 hi. Điều kiện này chắc ch🃏ắn sẽ xảy ra vì kích thước của đoạn [lo, hi] sẽ luôn bị thu hẹp qua từไng lớp phân đoạn. Fcs39 Sửa lại cách cài đặt thuật toán Quick Sort để sắp🦄 xếp một danh sách tuple (ưu tiên khoá bên tr𝓡ái trước, nếu khoá bên trái bằng nhau thì so sánh khoá bên phải). Lời giải chi tiết: Giả sử em cần sắp thứ tự một danh sách a. Thay vì trực tiếp so sánh bằng toán tử qua biể💮u thức (a[j] < pivot), em có thể định nghĩa hàm less_than_or_equal(a, b) trả về một giá trị boolean thể hiện tiêu chuẩn so sán♏h mà em muốn áp dụng với tuple a và tuple b, rồi thay thế điều kiện ở hàm phân đoạn if a[j] <= pivot thành if less_than_or_equal(a[j], pivot). Một cách cài đặt hàm so sánh: Fcs40 Một công ty có n nhân viên. Đã tới cuối th💎áng, người chủ nhận thấy tháng này có khá nhiều nhân viên vắng làm. Ông đã kiểm tra danh sách chấm ꦦcông và biết được số ngày mỗi nhân viên đã đi làm trong tháng. Sau đó là danh sách xin nghỉ phép gồm m dòng. Hãy lập trình để xác định xem có bao nhiêu nhân viên vắng không phép và ♉liệt kê ra các nhân viên đó theo thứ tự số ✨buổi vắng không phép giảm dần. Dữ liệu: Nhập từ thiết bị vào chuẩn: • Dòng đầu tiên chứa hai số nguyên dương n, m. • Dòng thứ hai chứa n số nguyên b[i] là số ngày đi làm của nhân viên có số hiệu là i (các nh🐈ân viên được đánh số 1, 2, 3,..., ). m dòng cuối cùng, mỗi dòng chứa thông tin dưới dạng “a 𓂃d” tức l🎃à người a xin nghỉ phép vào ngày d (1 <aŚn, 1<d<30) (giả sử tháng đang hỏi có 30 ngày). Dữ liệu vào đảm bảo trong cùng một ngày, mỗi nhân viên chỉ xin phép tối đa một lần. Kết quả: Hiển thị ở thiết bị ra chuẩn: • Dòng đầu chứa 💞số lượng nhân viên đã vắng không phé🅷p. • Dòng𝕴 thứ hai chứa các chỉ số của các nhân viên v✤ắng (được sắp xếp theo số lượng buổi vắng không phép giảm dần). Lời giải chi tiết: - Trước tiên, cần phải tính꧂ số ngày nghỉ không phép, rồi sau đó ta thực hiện sắp xếp sau. Số ngày nghỉ ch♏ính là 30 trừ cho số ngày đi làm. Sau đó với mỗi lần xin phép🎐, em trừ đi, như vậy sẽ có được số ngày vắng không phép. - Vìꦿ cần in ra số hiệu của các nhân viên nên em sắp xếp trên chỉ số thứ tự, thay vì sắp xếp trên giá trị.
Quảng cáo
Tham Gia Group Dành Cho Lớp 11 Chia Sẻ, Trao Đổi Tài Liệu Miễn Phí |