Số lượng k thứ k của tập hợp phần tử n là số liệu thống kê thứ tự k - 1 phân chia tập hợp đã sắp xếp thành các bộ có kích thước bằng nhau (đến trong 1). Đưa ra thuật toán O (n lg k) -time để liệt kê các số lượng k của tập hợp.Tìm lượng tử thứ k của tập hợp các phần tử n. (Từ cormen)
Giải pháp thẳng về phía trước là chọn mọi k, 2k, 3k .. ik phần tử nhỏ nhất, có thời gian chạy là O (kn) (k gọi để chọn thủ tục O (n)). Nhưng điều này có thể được tối ưu hóa để làm tốt hơn O (kn). Sau khi tìm thấy trung vị của trung vị tại chỉ mục 'i' trong quy trình chọn, chúng tôi thực hiện cuộc gọi đệ quy sau đây.
nếu chỉ số trung bình của trung vị i là> k, đệ quy gọi chọn thứ k phần tử nhỏ nhất trong mảng con bên trái A [0 ... i]
nếu i là < k, đệ quy chọn n - i + k phần tử nhỏ nhất trong phần con bên phải A [i + 1 ... n].
Các cuộc gọi đệ quy trên có thể được sửa đổi như dưới đây sẽ làm giảm hệ số 'k' thành 'log k' không?
nếu chỉ số trung vị của trung vị i> k, chọn đệ quy phần tử nhỏ nhất thứ k trong phần con bên trái A [0 ... i] và chọn đệ quy phần tử nhỏ nhất n - k trong phần con bên phải A [i + 1 ... n].
nếu i là < k, đệ quy chọn phần tử nhỏ nhất n - i + k trong phần con bên phải A [i + 1 ... n] và cũng đệ quy chọn phần tử nhỏ thứ k trong phần con bên trái A [ 0 ... i].
Cuộc gọi chính sẽ chỉ là chọn (A, k, n).
Bạn đã tự mình làm việc này bao lâu trước khi yêu cầu trợ giúp? –
Downvoters, xin vui lòng, để lại một bình luận. Đoán của tôi là bạn downvoted câu hỏi, bởi vì nó không hiển thị những gì user472402 đã làm để giải quyết nó và nơi đã bị mắc kẹt. –
Hai người, xin lỗi vì không cung cấp bất kỳ nền tảng nào về nơi tôi bị kẹt. Tôi khá mới với blog :) Giải pháp về phía trước eo biển sẽ là chọn mọi phần tử k, 2k, .. ik. Thời gian chạy sẽ là O (kn). Tôi đang suy nghĩ làm thế nào để giảm yếu tố k để đăng nhập k. Nhưng tôi không nhận được bất cứ điều gì kết luận. Xin hãy giúp. – user472402