cuốn sách gpt4 ai đã làm

Thuật toán - In các phần tử K lớn nhất trong một đống nhất định trong O(K*log(K))?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 02:23:00 30 4
mua khóa gpt4 Nike

Tôi không hoàn toàn chắc chắn về giải pháp hiện tại của mình khi gặp các vấn đề sau:

câu hỏi:

Cho một hàm chứa n Đống phần tử tối đa được lưu trữ trong mảng MỘT , có thể in tất cả lớn nhất K phần tử trong O(K*log(K)) ở giữa?

câu trả lời của tôi:

Đúng vậy, bởi vì việc tìm kiếm một phần tử đòi hỏi O(log(K)) , cũng vậy

K Yếu tố yêu cầu O(K * log(K)) Thời gian chạy.

câu trả lời hay nhất

Tìm kiếm một phần tử trong một đống có kích thước N không phải là O(K). Đầu tiên, tìm một Sẽ vô nghĩa khi độ phức tạp về thời gian của từng phần tử phụ thuộc vào số lượng phần tử bạn đang cố gắng trích xuất (đó là những gì K đại diện). Hơn nữa, không có thứ gọi là tìm kiếm trong heap - trừ khi bạn tính tìm kiếm tiêu chuẩn xem xét từng phần tử trong O(N).

Tuy nhiên, độ phức tạp trong thiết kế của việc tìm phần tử lớn nhất trong một đống là O(1) (rõ ràng tôi cho rằng đó là một đống tối đa, vì vậy phần tử lớn nhất nằm ở đầu đống) và loại bỏ sự phức tạp của một đống có kích thước phần tử tối đa là N là O(log(N)) (thay thế nó bằng phần tử lá và để phần tử lá đó nhỏ giọt xuống heap).

Do đó, việc trích xuất K phần tử từ heap,và trả về một đống không có phần tử nào được trích xuất, sẽ mất O(K·log(N)) thời gian.

Nếu bạnkhông phá hủyĐiều gì xảy ra nếu K phần tử được trích xuất khỏi heap? Bạn có thể làm điều này bằng cách giữ lại một đống (trong đó giá trị của một đống là giá trị của phần tử lớn nhất của nó). Ban đầu, heap này chỉ chứa một phần tử (heap gốc). Để trích xuất phần tử lớn nhất tiếp theo, bạn trích xuất vùng heap trên cùng, trích xuất phần tử trên cùng của nó (tức là giá trị lớn nhất) và chèn lại hai vùng heap phụ vào vùng heap.

Điều này làm cho vùng heap trong vùng heap tăng thêm một sau mỗi lần xóa (xóa một, thêm hai), nghĩa làNó sẽ không bao giờ chứa nhiều hơn K phần tử, vì vậy việc xóa phần cộng hai sẽ mất O(log(K)). Lặp lại điều này và bạn nhận được một thuật toán O(K·log(K)) thực tế trả về K phần tử đầu tiên, nhưng không trả về một đống các phần tử chưa được trích xuất.

Về thuật toán - In các phần tử K lớn nhất trong một đống nhất định trong O(K*log(K))? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11209556/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress