Thuật toán Banker với M loại tài nguyên và N tiến trình. Cho:
Available[M]: số tài nguyên còn rảnh mỗi loại.Max[N][M]: nhu cầu tối đa.Allocation[N][M]: đang được cấp.Need[i][j] = Max[i][j] − Allocation[i][j].
Thuật toán tìm chuỗi an toàn:
Work = Available; Finish[i] = false cho mọi i.Finish[i] = false và Need[i] ≤ Work (mọi loại). Nếu nhiều tiến trình thoả, chọn ID nhỏ nhất.Work += Allocation[i], Finish[i] = true, thêm i vào chuỗi. Lặp lại.Nếu tất cả Finish = true → trạng thái an toàn, in chuỗi an toàn (các ID cách nhau dấu cách). Ngược lại in UNSAFE.
Lưu ý: do luôn chọn ID nhỏ nhất thoả mãn ở mỗi bước, chuỗi an toàn là duy nhất và xác định.
Dòng đầu: N M. Tiếp theo M số là Available. Tiếp theo N×M số là ma trận Max (theo hàng). Tiếp theo N×M số là ma trận Allocation. Dữ liệu có thể trải nhiều dòng.
1 ≤ N ≤ 1000; 1 ≤ M ≤ 20; giá trị ≥ 0.
Chuỗi an toàn (các ID tiến trình từ 0, cách nhau dấu cách), hoặc UNSAFE.
Ví dụ:
Đầu vào:
5 3
3 3 2
7 5 3 3 2 2 9 0 2 2 2 2 4 3 3
0 1 0 2 0 0 3 0 2 2 1 1 0 0 2
Đầu ra:
1 3 0 2 4
Giải thích:
Đang tải editor...