Với một dãy số, có một thuật toán O (n) để tạo một vùng tối đa không?Có một thuật toán O (n) để xây dựng một vùng tối đa không?
Trả lời
Tôi không nghĩ vậy. Tôi nghĩ rằng tốt nhất bạn có thể làm là O (log n) hoặc tốt hơn một chút với một cái gì đó giống như một đống heap.
'O (log n)' là 'O (n)' (tức là, nếu 'f' là' O (log n) 'thì' f' nếu 'O (n)'). – jason
Tôi nghĩ anh ta phải có nghĩa là O (n log n)? – PeterAllenWebb
Điều đó không rõ ràng với tôi. Tôi nghĩ rằng chèn trong một đống Fibonacci được khấu hao 'O (1) 'và do đó xây dựng được khấu hao' O (n)'. – jason
Gợi ý: Giả sử thay vì mảng, bạn được cung cấp một cây nhị phân tùy ý. Bạn có thể nghĩ ra một cách hiệu quả để sửa bất kỳ nút nào không thỏa mãn thuộc tính heap không?
Nếu bạn sử dụng Fibonacci Heap bạn nhận được amortized O (1) chèn. Bạn có thể xây dựng một heap tối đa trong phân bổ O (n) từ một mảng.
Việc triển khai như vậy, tôi để lại dưới dạng bài tập *.
* Mặc dù, có các triển khai mẫu được liên kết trên trang Wikipedia.
Có đó là: Building a heap.
+1. Nhiều hơn cho các giai điệu của câu trả lời hơn so với câu trả lời chính nó :) – Anna
Liên kết của riêng bạn cho thấy rằng nó là không thể. Nó phải nói không có không có ... – PeterAllenWebb
@Peter: Trích dẫn từ liên kết: "Vì vậy, chi phí của heapifying tất cả các subtrees là: [snip phương trình] O (n)" –
Vâng, giống như trong mã này:
for (int i = N/2; i >= 0; --i)
push_heap(heap + i, N - i);
(push_heap
là một chức năng chấp nhận một con trỏ đến một đống và kích thước heap và đẩy phía trên cùng của đống cho đến khi các điều kiện đống được tôn trọng hoặc nút đạt đến đáy của đống).
Để có được tại sao điều này là O (N) nhìn vào cây nhị phân hoàn chỉnh:
- 1/2 yếu tố (mức cuối cùng, i> N/2) được đẩy xuống tối đa là 0 bước -> N/2 * 0 hoạt động
- 1/4 phần tử (cấp 1, i> N/4) được đẩy xuống tối đa 1 bước -> N/4 * 1 hoạt động
1/8 phần tử (cuối cùng- 2 cấp độ, i> N/8) được đẩy xuống tối đa 2 bước -> N/8 * 2 hoạt động ...
N/4 * 1 + N/8 * 2 + N/16 * 3 + ... = N/4 * 1 + N/8 * 1 + N/16 * 1 + ... + N/8 * 1 + N/16 * 2 + ... = N/4 * 1 + N/8 * 1 + N/16 * 1 + ... + // < N/2 N/8 * 1 + N/16 * 1 + ... + // < N/4 N/16 * 1 + ... + // < N/8 ... = // N/2 + N/4 + N/8 + ... < N
Hy vọng rằng toán học không thực sự quá phức tạp. Nếu bạn nhìn vào cây và thêm bao nhiêu mỗi nút có thể được đẩy xuống, bạn sẽ thấy giới hạn trên O (N).
+1 vì ít lười hơn tôi :) –
Con người, bạn đã làm cho toán học đơn giản hơn nhiều so với bài viết của WIKI! Cảm ơn một tấn! – khelll
Điều gì cho đầu vào này: 1, 2, 3, 4, 5, 6, 7, 8, 9. Tôi nghĩ rằng nó nên là O (nlogn)? –
- 1. Ví dụ về các thuật toán có các phức tạp O (1), O (n log n) và O (log n)
- 2. Thuật toán để tính điểm tối đa trong Pointset
- 3. Thuật toán khoảng cách Levenshtein tốt hơn O (n * m)?
- 4. Thuật toán song song để xây dựng một trie?
- 5. Thuật toán để định khung một biểu thức để tối đa hóa giá trị của nó
- 6. Thuật toán O (n) để tìm ra phần tử xuất hiện nhiều hơn n/2 lần
- 7. Thuật toán kể/xây dựng câu chuyện?
- 8. Có một thuật toán để xác định các vùng màu liền kề trong lưới không?
- 9. Sản phẩm tối đa của ba số cho một mảng có kích thước N
- 10. Thực hiện thuật toán hình chữ nhật tối đa
- 11. Cần giúp đỡ về thuật toán để tìm ra con đường tối đa trong một DAG
- 12. Thuật toán thiết lập độc lập tối đa
- 13. Xây dựng một cây
- 14. Thuật toán đặt điểm vào hình vuông với khoảng cách tối thiểu tối đa
- 15. Thuật toán tối ưu để tạo số ngẫu nhiên R không phải trong một tập hợp số N
- 16. Nơi để tìm thấy những gì O (n^2) và O (n) vv có nghĩa là?
- 17. Thuật toán nào mở GCGRAPH (luồng tối đa) dựa trên?
- 18. Thuật toán cho quy hoạch vùng chứa
- 19. Tìm số tối thiểu cục bộ trong ma trận n x n trong thời gian O (n)
- 20. thuật toán để chọn một tập hợp các con số để đạt mức tối thiểu tổng
- 21. thuật toán tối ưu cho trở về giá trị k đầu từ một mảng có độ dài N
- 22. Thuật toán để tìm số cao/thấp với tối đa 1.5n so sánh
- 23. Tôi có nên xem xét memmove() O (n) hoặc O (1) không?
- 24. Thuật toán để giải quyết câu đố N Queens Domination
- 25. Thuật toán cho tập hợp tối đa không bị chi phối
- 26. Thời gian chạy (lớn O)) của thuật toán
- 27. Tối ưu hóa một thuật toán tìm kiếm đơn giản
- 28. Có một thuật toán hiệu quả để tạo ra một thân lõm 2D?
- 29. Điều này có nghĩa là: các bước O (n) và không gian O (1)?
- 30. Thuật toán để tạo mảng đa chiều
Có thể nếu đầu vào của bạn đã được đặt hàng đúng cách. – FrustratedWithFormsDesigner
@Frustrated ...: Không được đặt hàng. – MainID