Tôi có một số List<Long>
(A) cho biết kích thước miễn phí có sẵn cho các phân vùng khác nhau. Người dùng đến hỏi với List<Long>
(B) cho biết kích thước tệp mà họ muốn lưu trữ.Tìm nếu Long (trong danh sách) có thể vừa với Danh sách các giá trị Dài
Bây giờ nếu bất kỳ Long (từ B) có thể phù hợp với bất kỳ kích thước miễn phí trong A, chúng tôi muốn tái sử dụng phân vùng, nếu không tạo phân vùng mới cho chúng.
Làm thế nào tôi có thể biết nếu có giá trị Long
từ B có giá trị nhỏ hơn bất kỳ Long
trong A.
Nếu tôi sử dụng phương pháp lặp đi lặp lại để quét qua A và tìm hiểu nếu có của B sẽ phù hợp, nó sẽ gây ra thời gian chạy O (n^2), nhưng chúng ta có thể làm tốt hơn không?
Mọi cấu trúc dữ liệu tồn tại cho loại sự cố này?
Nếu bạn giữ A sắp xếp, bạn có thể kiểm tra hàng đầu theo thời gian cố định hoặc tìm phân vùng nhỏ nhất có sẵn với tìm kiếm nhị phân. – shmosel
Giữ nó được sắp xếp nếu thêm nhiều gánh nặng tại thời điểm lưu trữ. Và ngay cả khi chúng tôi sử dụng tìm kiếm nhị phân, nó có thể không hiệu quả. Ví dụ: các kích thước miễn phí có thể là 1G, 2G, 3GB và người dùng sẽ yêu cầu tệp 100 MB. Sau đó, chúng tôi sẽ muốn sử dụng các khe miễn phí của 1G thay vì 2G. –
Lưu trữ sẽ có chi phí tương tự như tìm kiếm. Và tìm kiếm nhị phân sẽ cho phép bạn tìm khe cắm nhỏ nhất có sẵn, như tôi đã nói. – shmosel