Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Introducción a C#.
Complejidad Computacional
Complejidad Computacional
Diseño y análisis de algoritmos
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
Estructuras de datos y algoritmos
ALGORITMOS DE ORDENAMIENTO
Utilización de un TAD Arbol.
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Paricial IV Ing. Esmeralda Elizabeth Rodríguez Rodríguez
Operaciones sobre un árbol
Algoritmo y Estructura de Datos I I Facultad de Ingeniería y Arquitectura Juan José Montero Román. Sesión 6 - Uso de estructuras.
Curso de Programación 1 Plan 97
Curso de Java Estructura del Lenguaje
INFORMATICA I Funciones CLASE 13.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
Árboles binarios. Algoritmos básicos
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
2.3 Cola de números enteros.
2.2 Pila de números enteros
1.2 Sintaxis del lenguaje Java.
Tema 4 Árboles. Árbol sobre matriz.
Algoritmos de Búsqueda
ESTRUCTURAS DE SECUENCIA
/*Desarrollar una solución que permita ingresar y almacenar el promedio de prácticas, la nota del examen parcial y la nota del examen final de todos.
Introducción a la Computación (7ma Semana) Lunes 16 de Abril del 2007
Introducción a la Computación (8va Semana) Lunes 23 de Abril del 2007
Marzo 2007 Lenguajes Visuales Clase III.
Cont. Arbol Binario de Búsqueda
Algoritmo y Estructura de Datos I I Facultad de Ingeniería y Arquitectura Ing. Juan José Montero Román. Sesión 3.
Facultad de Ingeniería y Arquitectura Introducción a la Computación 2006 – II (8va Semana) Lunes 25 de Setiembre del 2006 Juan José Montero Román.
Facultad de Ingeniería y Arquitectura Introducción a la Computación 2006 – II (7ma Semana) Lunes 18 de Setiembre del 2006 Juan José Montero Román.
Arreglos: Vectores en JAVA
Método en Java.
Introducción Depuración Algorítmica Dos técnicas Loop Expansion (nueva) Tree Compression (mejora) Demostración DDJ Conclusiones.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Funciones en lenguaje C
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Herencia e Interfaces.
Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp.
Estructuras de Control
POO Java Módulo 3 Elementos de programas Identificadores
0. Desarrollo de Programas: técnica del refinamiento.
Herencia y Polimorfismo en JAVA
Definición Estructura de datos jerárquica (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas. Formalmente,
L ISTAS E NLAZADAS No son mas que un conjunto o lista de objetos que a diferencia de los vectores, estas poseen la capacidad de crecer o decrecer. Por.
Arboles (Trees) Arboles Arboles binarios Recorridos de árboles
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
USA agenda e itemAgenda
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
3.  Recursividad.
Estructura de Datos y Algoritmos
Tema 11: Excepciones Antonio J. Sierra.
Arboles M.C. José Andrés Vázquez FCC/BUAP
Computación II Repaso de java Karina Figueroa Mora.
Pilas y Colas Estructuras de Datos.

Se agrupan en tres grandes bloques: Gabriel Farina.
Entrada y Salida ES.leerChar (); ES.leerEntero (); ES.leerEnteroLargo (); ES.leerFloat (); ES.leerDouble (); System.out.print System.out.println.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Introducción Depuración Algorítmica Divide & Query Limitaciones de Divide & Query Optimal Divide & Query Demostración DDJ Conclusiones.
LENGUAJE DE PROGRAMACIÓN
Encapsulamiento Miguel Ángel Rojas Aguilar Esthela Carmina Carranza Cabrera.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Leyendo strings de la línea de comandos
Transcripción de la presentación:

Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado Generación de AE balanceados Tres técnicas para balancear AE  Proyección  Colapso Compactación Cadenas Demostración DDJ Conclusiones y trabajo futuro

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

¿Qué es un Árbol de Ejecución? 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 listSum [] = = = 3 listSum [1,2] = 4 listSum [2] = 3 Ejemplo: main = listSum [1,2] listSum [] = 1 listSum (x:xs) = x + (listSum xs)

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

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

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 Estrategias de la DA Sesión de depuración

Estrategias Top Down Left to Right Top Down Heaviest First Top Down More Rules First Divide & Query Shapiro Divide & Query Hirunkitti Divide by Rules & Query Single Stepping Hat Delta More Wrongs Hat Delta Less Rights Hat Delta Best Division Top Down Hat Delta Divide & Query Single Stepping

Sesión de depuración main = sqrTest [1,2] sqrTest x = test (squares (listSum x)) test (x,y,z) = (x==y) && (y==z) listSum [] = 0 listSum (x:xs) = x + (listSum xs) 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 (partialSums x) partialSums x = [(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

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

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

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

Generación de AE balanceados 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 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

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  Proyección  Colapso Compactación Cadenas

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(int i=1; i<=2; i++) {t.left();} for(int i=1; i<=2; i++) {k.right();} } else { for(int i=1; i<=3; i++) {t.right();} for(int i=1; i<=2; i++) {k.left();} } } } 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;} }

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.x=8 t.y=1 t.right() t.x=11 t.y=1 k.left() k.x=5 k.y=1 k.left() k.x=3 k.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 k.x=4 k.y=1 k.x=4 k.y=1

t.right() k.left() p.castling(tower,king) t.right() k.left() 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.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 t.x=8 t.y=1 t.x=11 t.y=1 k.x=5 k.y=1 k.x=3 k.y=1

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.x=8 t.y=1 t.x=9 t.y=1 t.right() t.x=9 t.y=1 t.x=10 t.y=1 t.right() t.x=10 t.y=1 t.x=11 t.y=1 k.left() k.x=5 k.y=1 k.x=4 k.y=1 k.left() k.x=4 k.y=1 k.x=3 k.y=1 t.right() t.x=8 t.y=1 t.x=11 t.y=1 k.left() k.x=5 k.y=1 k.x=3 k.y=1

EstrategiaNB Left to Right8.021 Heaviest First7.875 D&Q Shapiro7.229 D&Q Hirunkitti6.792 B Reducción (%) % % % %

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  Proyección  Colapso Compactación Cadenas

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

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

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

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

BenchmarkET nodesCol./Proj.QuestionsQuestions Bal% argparser1920/ % cglib14630/ % kxml214452/ % javassist14995/ % No colapsar o proyectar cadenas que realicen más de 5 cambios Preguntas complejas Evitar preguntas innecesarias Posibilidad de volver al AE original Compactar subárbol en un nodo Dividir un nodo en sub-computaciones (inversa) Experimentar con el tamaño de las cadenas Implementar balanceado según la estructura usada en otras estrategias

f() x=1X=4 g() x=1X=3 h() x=3X=4 g() x=4X=4 g() h() g() x=1X=4 g() x=1X=3 h() x=3 X=4 g() x=4X=4 f() x=1X=4 x = 1 f() x = 2 x = 1 g() x = 4 x = 4 g() x = 4 x = 3 h() x = 3 x = 4 h() x = 4