Tôi có một mảng có kích thước n + 1, nơi tôi muốn lưu trữ chi phí thấp nhất mua n
mục (i^th
chỉ số cửa hàng chi phí i^th
mục).Tạo mảng chi phí ít nhất
Có m
bán khác nhau: mỗi người bán cung cấp hàng L
đến mục R
(nơi L
, R
> = 1 và L
, R
< = n) với chi phí C
mỗi.
Để tạo mảng chi phí ít nhất tôi đã làm như sau:
for (int i=1; i<=m; i++) {
int L = L of i^th seller
int R = R of i^th seller
int C = selling price of i^th seller
for (int j=L; j<=R; j++) {
if (leastCost[j]==0 || leastCost[j]>C) {
leastCost[j]=C
}
}
Xây dựng mảng này là O(n*m)
và truy cập vào mảng này là O(1)
.
Đối với các giá trị rất lớn là n
và m
, có cách nào tốt hơn để tạo mảng chi phí thấp nhất không?
Có lẽ một cách tiếp cận khác không lưu trữ nó trong một mảng và một thứ gì khác để giảm độ phức tạp tổng thể?
Tôi không biết nơi bạn có 'O (n^2)' từ. Tôi nhận được O (n * m). Đó là hoàn toàn khác nhau.Khi bạn xem xét có bao nhiêu phần tử bạn thực sự cần truy cập (đọc từ), điều này sẽ tối ưu. Trừ khi có bất kỳ thông tin bổ sung nào bạn phải bắt đầu bằng ... – Aron
Tôi đã sửa nó. Điều này thực sự tối ưu? ngay cả đối với n rất lớn và m? không có gì khác tôi có thể thêm vào. – Gsquare
@Aron quá cao? Và vâng, Aron nói đúng. Bảng người bán của bạn có người bán 'm' và giá' n' (trung bình). Đây là 'n * m'. Bạn cần phải đi qua từng phần tử ít nhất một lần, vì vậy '(n * m)' là tối ưu (trừ khi bạn có một máy tính lượng tử). – prakharsingh95