thể trùng lặp:
Find the min number in all contiguous subarrays of size l of a array of size nComputing một di chuyển tối đa
Tôi có một mảng (lớn) của dữ liệu số (kích thước N
) và muốn tính toán một mảng chạy maximums với kích thước cửa sổ cố định w
.
Trực tiếp hơn, tôi có thể xác định mảng mới out[k-w+1] = max{data[k-w+1,...,k]}
cho k >= w-1
(điều này giả định mảng dựa trên 0, như trong C++).
Có cách nào tốt hơn để thực hiện việc này hơn N log(w)
không?
[Tôi hy vọng sẽ có một tuyến tính tuyến tính trong N
mà không phụ thuộc vào w
, như cho trung bình di chuyển, nhưng không thể tìm thấy nó. Đối với N log(w)
Tôi nghĩ rằng có một cách để quản lý với một cấu trúc dữ liệu được sắp xếp mà sẽ làm insert()
, delete()
và extract_max()
hoàn toàn trong log(w)
hoặc ít hơn cho một cấu trúc quy mô w
- giống như một cây nhị phân được sắp xếp, ví dụ].
Cảm ơn bạn rất nhiều.
Vì vậy, tôi đã phải bỏ phiếu cho cả câu trả lời này và câu trả lời bạn đã tham chiếu! – Andy
Tôi phải bình luận ở đây rằng việc thực hiện xếp hàng hai ngăn xếp không nhất thiết phải là tốt nhất. Tôi đã thử nó, cho một ứng dụng REAL-TIME, và kết quả là thảm khốc ... Tùy thuộc vào ứng dụng, người ta cũng có thể thử cấu trúc deque (double-ended queue), cũng sẽ cho kết quả O (N) , nhưng không nhất thiết phải khấu hao O (1) cho hoạt động dequeue. Tôi đã thực hiện một deque tròn được thực hiện trên một mảng và nó hoạt động tốt. Hãy xem câu hỏi này: https://stackoverflow.com/questions/12329073/find-the-min-number-in-all-contiguous-subarrays-of-size-l-of-a-array-of-size -n. – Alan