L'algorithme du banquier est utilisé pour déterminer si toutes les demandes de ressources peuvent être satisfaites sans entraîner de blocage.L'algorithme du banquier calcule la complexité temporelle
m est le nombre total de types de ressources
n est le nombre total de processus
besoin est une matrice de taille m * n, on définit les requêtes en attente pour chaque type de ressources. Par exemple: NEEDij = 2 signifie que le processus i demande 2 éléments de ressource j.
L'algorithme est donné ci-dessous:
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));
}
Ma question est, comment est temps complexité 0 (n * n * m)? Plus précisément, comment le terme m entre-t-il dans le polynôme? Est-ce parce que nous devons faire une comparaison élément par élément sur un vecteur de longueur m?
Avec votre commentaire sur ma réponse juste supprimée, on ne sait vraiment pas ce que signifie ce code. Qu'est-ce que NEEDi, ALLOCATION_i et comment le travail est-il affecté à l'intérieur - élément par élément ou d'une autre manière? D'où vient ce code? – sharptooth