Thuật toán của Ngân hàng được sử dụng để xác định xem tất cả các yêu cầu về tài nguyên có thể được đáp ứng mà không dẫn đến bế tắc hay không.Thuật toán của ngân hàng tính toán độ phức tạp thời gian
m là tổng số các loại nguồn lực
n là tổng số của các quá trình
CẦN là một mảng có kích thước m * n, nó định nghĩa đề nghị.Nhấn đối với từng loại tài nguyên. Ví dụ: NEEDij = 2 có nghĩa là quá trình tôi đang yêu cầu 2 mục tài nguyên j.
Các thuật toán được đưa ra dưới đây:
BOOLEAN function SAFESTATE is -- Determines if current state is safe
{ NOCHANGE : boolean;
WORK : array[1..m] of INTEGER = AVAILABLE;
FINISH : array[1..n] of boolean = [false, ..,false];
I : integer;
repeat
NOCHANGE = TRUE;
for I = 1 to N do
if ((not FINISH[i]) and
NEEDi <= WORK) then {
WORK = WORK + ALLOCATION_i;
FINISH[i] = true;
NOCHANGE = false;
}
until NOCHANGE;
return (FINISH == (true, .., true));
}
Câu hỏi của tôi là, làm thế nào là thời gian phức tạp 0 (n * n * m)? Cụ thể hơn, thuật ngữ m nhập vào đa thức như thế nào? Có phải vì chúng ta phải so sánh từng phần tử trên một vectơ có chiều dài m không?
Cùng với nhận xét của bạn về câu trả lời vừa mới xóa của tôi, điều đó thực sự không rõ ràng có ý nghĩa gì trong mã này. NEEDi, ALLOCATION_i là gì và WORK được chỉ định bên trong như thế nào - yếu tố theo yếu tố hoặc một số cách khác? Mã này đến từ đâu? – sharptooth