13.07.2015 Views

Capítulo X: Introducción

Capítulo X: Introducción

Capítulo X: Introducción

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Capítulo 4: Visualización Out-of-Core3.3 Algoritmo Óptimo de SelecciónCalcular la selección óptima Sopt que resulta en el mínimo global E(Sopt)bajo la restricción de la capacidad de memoria de textura (N bricks)requiere de una búsqueda exhaustiva. El algoritmo voraz sólo considerala reducción del error global para la próxima operación de split, siendoasí una heurística que podría no resultar la solución óptima. En laliteratura, el problema general de asignar el nivel de detalle a cada objetoen una escena, o a cada bloque de un volumen, para maximizar elbeneficio (o equivalentemente minimizar el error) es un problema NPcompleto[GAO05], [FUN93]. En esos casos, cada bloque u objeto tieneun costo y beneficio distinto en cada nivel de detalle, lo cual puedesugerir una solución basada en una versión del problema de la mochila[COR01]. En nuestro problema particular, el costo de un brick en cadanivel de detalle es el mismo (una unidad), lo cual simpleifica el problema.Sin embargo, hay que considerar que un brick de nivel de detalle inferiorrepresenta muchos bricks de nivel de detalle superior, y que no puedehaber 2 representaciones distintas para una misma área del volumenpara que pueda considerarse una selección.Una solución para encontrar la solución óptima puede ser implementadapor backtracking [WIR99]. En cada nivel recursivo, se agrega una de lasposibles operaciones de split a la secuencia actual de operacionescurrSeq, siempre y cuando no exceda la capacidad de memoria detextura. La nueva secuencia de operaciones es comparada con la mejorsecuencia encontrada hasta ese momento (bestSeq), en términos delerror E(S), actualizando la mejor secuencia de ser necesario. Entonces seprocede a una llamada recursiva con la nueva cola de prioridad. Alretornar de cada llamada recursiva, se restaura el estado de la cola,revirtiendo la última operación de split realizada (ver Alg. 3.1).Procedure BackTracking(Var Queue currentQueue, Var Queue bestQueue)For each node x in currentQueue DoIf (x.visitado = false and currentQueue.size()–1+children(x)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!