]> git.llucax.com Git - z.facultad/75.00/informe.git/commitdiff
Arreglar algoritmo de marcado tri-color
authorLeandro Lucarella <llucax@gmail.com>
Sun, 19 Sep 2010 03:51:08 +0000 (00:51 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 19 Sep 2010 03:51:08 +0000 (00:51 -0300)
Además se hace notar que el algoritmo es O(|Live set|) en espacio aunque
sea iterativo.

source/gc.rst

index 4f1fe6526ce9056af617c11e6a98423b9b36637e..6b26bdf0f1537f68f6f95673518a1abfedd0828a 100644 (file)
@@ -626,12 +626,15 @@ vacíos)::
          v = gray_set.pop()
          black_set.add(v)
          for (src, dst) in v.edges
-            if v in white_set
-               white_set.remove(v)
-               gray_set.add(v)
-
-Es simple notar que este algoritmo es naturalmente no recursivo, lo que de por
-sí ya presenta una ventaja sobre el marcado *bicolor*.
+            if dst in white_set
+               white_set.remove(dst)
+               gray_set.add(dst)
+
+Si bien este algoritmo no es recursivo, tiene un requerimiento de espacio
+:math:`O(\lvert Live \thickspace set \rvert)`. Un ejemplo donde se aprecia
+esto a simple vista es cuando el *live set* resulta una lista simplemente
+enlazada, en cuyo caso el :math:`gray_set` deberá almacenar todos los nodos
+del *live set*.