El algoritmo del banquero se utiliza para determinar si todas las solicitudes de recursos se pueden satisfacer sin llevar a un interbloqueo.Algoritmo de banca calculado complejidad de tiempo
m es el número total de tipos de recursos
n es el número total de procesos
necesita es una matriz de tamaño m * n, se define solicitudes pendientes para cada tipo de recursos. E.g .: NEEDij = 2 significa que el proceso i está solicitando 2 elementos de recurso j.
El algoritmo es el siguiente:
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));
}
Mi pregunta es, ¿cómo es tiempo de complejidad 0 (n * n * m)? Más específicamente, ¿cómo entra el m término en el polinomio? ¿Es porque tenemos que hacer una comparación elemento por elemento en un vector de longitud m?
Junto con su comentario sobre mi respuesta recién eliminada, no está muy claro qué significa qué en este código. ¿Qué son NEEDi, ALLOCATION_i y cómo se asigna WORK dentro de elemento por elemento o de alguna otra manera? ¿De dónde viene este código? – sharptooth