Der Banker-Algorithmus wird verwendet, um zu bestimmen, ob alle Anforderungen für Ressourcen erfüllt werden können, ohne zu einem Deadlock zu führen.Bankalgorithmus berechnete Zeitkomplexität
m ist die Gesamtanzahl der Ressourcen-Typen
n die Gesamtzahl der Prozesse
müssen, ist ein Array von m * n Größe, es definiert Anforderungen für jeden Ressourcentyp anhängig. Beispiel: NEEDij = 2 bedeutet, dass der Prozess i zwei Ressourcenelemente anfordert.
Der Algorithmus ist unten angegeben:
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));
}
Meine Frage ist, wie ist Zeit Komplexität 0 (n * n * m)? Genauer gesagt, wie tritt der m-Term in das Polynom ein? Liegt es daran, dass wir einen Element-für-Element-Vergleich auf einem Vektor der Länge m durchführen müssen?
Zusammen mit Ihrem Kommentar zu meiner gerade gelöschten Antwort ist es wirklich unklar, was was in diesem Code bedeutet. Was sind NEEDi, ALLOCATION_i und wie wird WORK intern zugewiesen - Element für Element oder auf andere Weise? Woher kommt dieser Code? – sharptooth