Capítulo 4: Visualización Out-of-CoreDebido a que en cada nivel se tiene a lo sumo N posibilidades para split,la solución del backtracking requiere tiempo exponencial, y no tieneaplicación práctica para este problema. Se sugiere un algoritmoalternativo, el cual calcula la solución óptima en tiempo polinomial. Estasolución no utiliza las operaciones de split, y tampoco empieza desde elnodo raíz. En cambio, crea la solución óptima incrementalmente desdelas hojas hasta la raíz, utilizando programación dinámica [COR01].El algoritmo está basado en la siguiente observación: para una cantidadde nb bricks, con 1nbN, la selección óptima en un subárbol cuyo nodoraíz es b puede ser construido combinando las soluciones óptimasencontradas en sus nodos hijos q1, q2, …, qmax (que contienen n1, n2, ...,nmax bricks respectivamente) con la condición de que nb=n1+....+nmax.Debido a que pueden existir distintas combinaciones de ni que sumen nbricks, se considera la selección de menor error. El error de una seleccióncuya raíz es b se obtiene de la adición del error en las selecciones de susramas; así, una selección subóptima en cualquiera de sus ramas qi nopuede ser parte de la solución óptima en b. Esto sugiere que sólo lassoluciones óptimas encontradas en las ramas de un nodo b deben serconsideradas para encontrar la solución óptima en b. Debido a que no seconoce qué tamaño de selección en el nodo interno b será parte de laselección óptima en el nodo raíz, se construye la selección óptima en bpara cada posible tamaño de selección entre 1 y N bricks. Estasselecciones son óptimas en un subárbol de la jerarquía multi-resolución,por lo cual se denominan soluciones óptimas intermedias (SOI). Sólo lasSOIs que no exceden N bricks son consideradas. Una vez que se alcanceal nodo raíz, se obtiene una SOI por cada tamaño posible de memoria detextura nb, con 1nbN. La selección óptima global es aquella SOI delnodo raíz con menor error.El algoritmo comienza desde los nodos hojas hasta la raíz. Sea S(nb,nv,b)una SOI del sub-árbol con raíz b, aproximando nv=nv(b) vóxeles delvolumen original con nb bricks. La SOI de un nodo hoja b es el nodomismo, y su error correspondiente es E(S(1,nv(b),b))=E(b)=0. Para cadanodo interno b, una o más SOIs podrían ser generadas. El conjunto deSOIs para cada nodo es calculada incrementalmente combinando lasSOIs de sus hijos. El proceso de combinación comienza con los dosprimeros hijos, combinando sus conjuntos de soluciones SOIs1 y SOIs2,cada uno con no más de N SOIs. Esto resulta en un nuevo conjuntoSOIs1..2, igualmente con no más de N SOIs (ver Fig. 3.3). Este conjuntode SOIs es combinado con el conjunto del tercer hijo, generando SOIs1..3con a los sumo N SOIs, y así sucesivamente hasta haber consideradotodos los hijos de b. Note que para un brick interno b, este proceso creaun nuevo conjunto de soluciones, conteniendo a los sumo N SOIs.-58-
Capítulo 4: Visualización Out-of-CoreAdicionalmente, el nodo b es considerado como una posible SOI,representado todo su subvolumen por su propio brick.nbnvE5 2320 12820 30…7 4448 25640 100…s1s2nbnvE12 9768 57631,6 37,7638476,6s…Figura 3.3: el proceso de combinación de dos conjuntos de soluciones. Cada solucióndel primer conjunto es combinado con una solución del segundo, realizándoses 1s 2N 2 combinaciones. La combinación de 2 soluciones incluye la combinación de loscampos nb, nv y E, y la generación de una nueva lista de bricks correspondiente a launión de las listas de bricks de ambas soluciones. En el ejemplo, hay doscombinaciones de soluciones que resultan en nb=9, pero sólo se almacena la demenor error (37,7). Como cota superior, s 1 y s 2 son cada uno O(N). Dado que el costode combinar dos soluciones implica la creación de la unión de dos listas de bricks(operación que es O(N)), el costo de combinar dos conjuntos de a lo sumo N SOIs esO(N 3 ), y se genera un conjunto de s=O(N) soluciones.La complejidad del algoritmo básicamente depende del número decombinaciones de pares de SOIs, multiplicada por el costo de cadacombinación. Una combinación de dos SOIs S(nbi,nvi,bi) y S(nbj,nvj,bj)calcula el tamaño de la solución nb=nbi+nbj, el número de vóxelesaproximados nv= nvi+nvj, la unión de dos listas de nodos, y la ponderaciónde los respectivos errores en función del número de vóxeles aproximados:nviE(S(nbi,nvi,bi)) nvjE(S(nbj,nvj, bj))E( S(nb,nv, b)). [Ec. 3.13]n nviEl costo de una combinación es dominada por el costo de generar launión de dos listas de nodos, que es O(N). Para un nodo b del árbol con 8hijos, se realizan 7 combinaciones de conjuntos de SOIs, en donde paraun par de conjuntos de SOIs se tienen O(N 2 ) combinaciones de pares deSOIs, resultando en un conjunto de no más de N SOIs. Así, lacomplejidad en tiempo del algoritmo en cada nodo interno es O(N 3 ). SeaK es el número total de nodos del octree, representando el tamaño delproblema (número de nodos candidatos que pueden pertenecer a laselección). La complejidad del algoritmo está acotada por O(KN 3 ). Debidovj-59-