1 / 28

Balanceando Á rboles de Ejecución

Balanceando Á rboles de Ejecución. David Insa Cabrera. Contenido. Introducción. Depuración Algorítmica. Balanceo de árboles de ejecución. AE balanceados. Tres técnicas para balancear AE. Demostración. DDJ. Conclusiones y trabajo futuro. Depuración Algorítmica.

kolton
Download Presentation

Balanceando Á rboles de Ejecución

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Balanceando Árboles de Ejecución David Insa Cabrera

  2. Contenido Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro

  3. Depuración Algorítmica • Depuración algorítmica[Shapiro 82]Paradigma Lógico • DOS FASES: • Generar el árbol de ejecución • Recorrer el árbol de ejecución haciendo preguntas hasta encontrar el error Si se detecta el efecto de un error entonces la DA encontrará el error main = 4 ¿Qué es un Árbol de Ejecución? listSum [1,2] = 4 Ejemplo: main = listSum [1,2] listSum [] = 1 listSum (x:xs) = x + (listSumxs) 1+3 = 4 listSum [2] = 3 2+1 = 3 listSum [] = 1

  4. Depuración Algorítmica • Recorriendo el árbol de ejecución • REGLA DE ORO: Cuando un nodo incorrecto no tiene hijos incorrectos, entonces este nodo es erróneo. main = 4 listSum [1,2] = 4 Ejemplo: main = listSum [1,2] listSum [] = 1 listSum (x:xs) = x + (listSumxs) 1+3 = 4 listSum [2] = 3 2+1 = 3 listSum [] = 1

  5. Depuración Algorítmica • Recorriendo el árbol de ejecución • REGLA DE ORO: Cuando un nodo incorrecto no tiene hijos incorrectos, entonces este nodo es erróneo. main = 5 listSum [1,2] = 5 Ejemplo: main = listSum [1,2] listSum [] = 0 listSum (x:xs) = x + (listSumxs) + 1 1+3+1 = 5 listSum [2] = 3 2+0+1 = 3 listSum [] = 0

  6. Contenido Introducción Depuración Algorítmica • Estrategias de la DA Balanceo de árboles de ejecución • Sesión de depuración AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro

  7. Estrategias de la Depuración Algorítmica Estrategias Single Stepping Single Stepping Divide & Query Top Down Top Down LefttoRight Top Down HeaviestFirst Top Down More Rules First Divide & QueryShapiro Divide & QueryHirunkitti Divide by Rules & Query Hat Delta Hat Delta More Wrongs Hat Delta LessRights Hat Delta BestDivision

  8. Sesión de depuración Sesión de depuración main = sqrTest[1,2] sqrTestx = test (squares (listSumx)) test (x,y,z) = (x==y) && (y==z) listSum[] = 0 listSum(x:xs) = x + (listSumxs) squares x = ((square1 x),(square2 x),(square3 x)) square1 x = square x square x = x*x square2 x = listSum(list x x) list x y | y==0 = [] | otherwise = x:list x (y-1) square3 x = listSum(partialSumsx) partialSumsx = [(sum1 x),(sum2 x)] sum1 x = div (x * (incr x)) 2 sum2 x = div (x + (decr x)) 2 incr x = x + 1 decr x = x - 1

  9. Sesión de depuración Sesión de depuración con la búsqueda Top-Down LefttoRight. main = False Empezando la sesión de depuración… main = False? NO sqrTest[1,2] = False? NO test [9,9,8] = False? SI squares 3 = [9,9,8]? NO square1 3 = 9? SI square2 3 = 9? SI square3 3 = 8? NO listSum[6,2] = 8? SI partialSums3 = [6,2]? NO sum1 3 = 6? SI sum2 3 = 2? NO decr 3 = 2? SI Error encontrado en la regla: sum2 x = div (x + (decr x)) 2 sqrTest [1,2] = False test (9,9,8) = False squares 3 = (9,9,8) listSum [1,2] = 3 listSum [2] = 2 squares1 3 = 9 squares2 3 = 9 squares3 3 = 8 listSum [] = 0 square 3 = 9 listSum [3,3,3] = 9 list 3 3 = [3,3,3] partialSums 3 = [6,2] listSum [6,2] = 8 listSum [3,3] = 6 list 3 2 = [3,3] listSum [2] = 2 sum1 3 = 6 sum2 3 = 2 decr 3 = 2 listSum [3] = 3 list 3 1 = [3] listSum [] = 0 incr 3 = 4 listSum [] = 0 list 3 0 = []

  10. Sesión de depuración Sesión de depuración con la búsqueda Top-Down HeaviestFirst. main = False Empezando la sesión de depuración… main = False? NO sqrTest[1,2] = False? NO squares3 = [9,9,8]? NO square2 3 = 9? SI square3 3 = 8? NO partialSums3 = [6,2]? NO sum1 3 = 6? SI sum2 3 = 2? NO decr 3 = 2? SI Error encontrado en la regla: sum2 x = div (x + (decr x)) 2 sqrTest [1,2] = False test (9,9,8) = False squares 3 = (9,9,8) listSum [1,2] = 3 listSum [2] = 2 squares1 3 = 9 squares2 3 = 9 squares3 3 = 8 listSum [] = 0 square 3 = 9 listSum [3,3,3] = 9 list 3 3 = [3,3,3] partialSums 3 = [6,2] listSum [6,2] = 8 listSum [3,3] = 6 list 3 2 = [3,3] listSum [2] = 2 sum1 3 = 6 sum2 3 = 2 decr 3 = 2 listSum [3] = 3 list 3 1 = [3] listSum [] = 0 incr 3 = 4 listSum [] = 0 list 3 0 = []

  11. Sesión de depuración Sesión de depuración con la búsqueda Divide & QueryHirunkitti. main = False Empezando la sesión de depuración… square2 3 = 9? SI square3 3 = 8? NO partialSums 3 = [6,2]? NO sum1 3 = 6? SI sum2 3 = 2? NO decr 3 = 2? SI Error encontrado en la regla: sum2 x = div (x + (decr x)) 2 sqrTest [1,2] = False test (9,9,8) = False squares 3 = (9,9,8) listSum [1,2] = 3 listSum [2] = 2 squares1 3 = 9 squares2 3 = 9 squares3 3 = 8 listSum [] = 0 square 3 = 9 listSum [3,3,3] = 9 list 3 3 = [3,3,3] partialSums 3 = [6,2] listSum [6,2] = 8 listSum [3,3] = 6 list 3 2 = [3,3] listSum [2] = 2 sum1 3 = 6 sum2 3 = 2 decr 3 = 2 listSum [3] = 3 list 3 1 = [3] listSum [] = 0 incr 3 = 4 listSum [] = 0 list 3 0 = []

  12. Contenido Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados • AE completamente balanceado Tres técnicas para balancear AE • Generación de AE balanceados Demostración DDJ Conclusiones y trabajo futuro

  13. AE completamente balanceado Se dice que un árbol de ejecución está balanceado cuando: si se detecta un nodo incorrecto en el árbol de ejecución, entonces se puede encontrar un nodo que pode la mitad del árbol de ejecución que queda por depurar 16 1 4 8 2 2 1 1 1 4 2 1 2 1 1 1

  14. Generación de AE balanceados 16 8 7 6 5 1 2 3 4 4 2 1 3 1 4 2 1 1 2 1 1 2 1 2 1 1 1 1

  15. Contenido Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE • Cadenas Demostración • Proyección DDJ • Colapso Conclusiones y trabajo futuro • Compactación

  16. Programa de ejemplo class Position { int x, y; void locate (int a, int b) {x=a; y=b;} void up() {y=y+1;} void down() {y=y-1;} void right() {x=x+1;} void left() {x=x-1;} } public class Chess { public static void main(String[] args) { Chess p = new Chess(); Position tower = new Position(); Position king = new Position(); king.locate(5, 1); tower.locate(8, 1); p.castling(tower, king); } void castling(Position t, Position k) { if (t.x != 8) { for(inti=1; i<=2; i++) {t.left();} for(inti=1; i<=2; i++) {k.right();} } else { for(inti=1; i<=3; i++) {t.right();} for(inti=1; i<=2; i++) {k.left();} } } }

  17. Cadenas p.castling(tower,king) king.x=5 king.y=1 tower.x=8 tower.y=1 king.x=3 king.y=1 tower.x=11 tower.y=1 t.right() t.right() t.right() k.left() k.left() t.x=8 t.y=1 t.x=9 t.y=1 t.x=9 t.y=1 t.x=10 t.y=1 t.x=10 t.y=1 t.x=11 t.y=1 k.x=5 k.y=1 k.x=4 k.y=1 k.x=4 k.y=1 k.x=3 k.y=1

  18. Proyección p.castling(tower,king) king.x=5 king.y=1 tower.x=8 tower.y=1 king.x=3 king.y=1 tower.x=11 tower.y=1 t.right() t.right() t.right() k.left() k.left() k.x=5 k.y=1 k.x=3 k.y=1 t.x=8 t.y=1 t.x=11 t.y=1 t.right() t.right() t.right() k.left() k.left() t.x=8 t.y=1 t.x=9 t.y=1 t.x=9 t.y=1 t.x=10 t.y=1 t.x=10 t.y=1 t.x=11 t.y=1 k.x=5 k.y=1 k.x=4 k.y=1 k.x=4 k.y=1 k.x=3 k.y=1

  19. Colapso p.castling(tower,king) king.x=5 king.y=1 tower.x=8 tower.y=1 king.x=3 king.y=1 tower.x=11 tower.y=1 t.right() t.right() t.right() k.left() k.left() k.x=5 k.y=1 k.x=3 k.y=1 t.x=8 t.y=1 t.x=11 t.y=1 t.right() t.right() t.right() k.left() k.left() t.x=8 t.y=1 t.x=9 t.y=1 t.x=9 t.y=1 t.x=10 t.y=1 t.x=10 t.y=1 t.x=11 t.y=1 k.x=5 k.y=1 k.x=4 k.y=1 k.x=4 k.y=1 k.x=3 k.y=1

  20. Proceso de balanceo 32 16

  21. Contenido Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE • Cadenas • Proyección • Colapso • Compactación Demostración DDJ Conclusiones y trabajo futuro

  22. Compactación 33 13

  23. Bosque de ejecución

  24. Contenido Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro

  25. Contenido Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro

  26. Conclusiones Preguntas complejas No colapsar o proyectar cadenas que realicen más de 5 cambios Posibilidad de volver al AE original

  27. Conclusiones Preguntas complejas No colapsar o proyectar cadenas que realicen más de 5 cambios Posibilidad de volver al AE original Evitar preguntas innecesarias

  28. Conclusiones Preguntas complejas No colapsar o proyectar cadenas que realicen más de 5 cambios Posibilidad de volver al AE original Evitar preguntas innecesarias Trabajo futuro Experimentar con el tamaño de las cadenas Compactar subárbol en un nodo Implementar balanceado según la estructura usada en otras estrategias Dividir un nodo en sub-computaciones (inversa)

More Related