Está en la página 1de 7

Traducido del inglés al español - www.onlinedoctranslator.

com

Sesión: Herramientas ITiCSE '20, del 15 al 19 de junio de 2020, Trondheim, Noruega

Compigoritmo: una herramienta interactiva para


la práctica guiada del análisis de complejidad

rebeca smith scott rixner


Universidad de arroz Universidad de arroz
Houston, Texas Houston, Texas
rjs@rice.edu rixner@rice.edu

RESUMEN su educación y darles muchas oportunidades para practicar estos principios.

Es esencial que los estudiantes aprendan a escribir código que no solo sea Con este fin, los planes de estudios de ciencias de la computación de pregrado

correcto, sino también eficiente. Con ese fin, las técnicas de análisis de generalmente incluyen uno o más cursos sobre algoritmos que analizan la

complejidad algorítmica, como el análisis Big-O, suelen ser una parte eficiencia o complejidad algorítmica.

importante de los cursos sobre diseño de algoritmos. Sin embargo, los La complejidad algorítmica se presenta con frecuencia en forma de análisis Big-O,

estudiantes a menudo tienen conceptos erróneos fundamentales sobre cómo que analiza el tiempo de ejecución asintótico del peor de los casos de un algoritmo en

funciona el análisis Big-O. Este artículo presenta Compigorithm, una función de los tamaños de sus entradas. Sin embargo, los novatos a menudo tienen

herramienta interactiva para ayudar a los estudiantes a practicar el análisis Big- conceptos erróneos fundamentales sobre cómo funciona el análisis Big-O [6, 10, 19,

O. Compigorithm apoya el aprendizaje de los estudiantes al dividir el proceso 21]. De hecho, un estudio encontró que la complejidad algorítmica es uno de los

de análisis en cinco pasos concretos y guiar a los estudiantes a través de cada temas más difíciles en un curso típico de estructuras de datos y algoritmos [8]. Los

uno de estos pasos. Cuando los estudiantes cometen errores, se les expertos pueden tener una visión holística de un algoritmo y determinar

proporcionan sugerencias automáticas y se les permite volver a intentarlo instintivamente su complejidad, pero los estudiantes a menudo carecen de la

hasta que obtengan la respuesta correcta. Compigorithm se puso a prueba en intuición para hacerlo. Por lo tanto, los estudiantes primero deben aprender un

un curso introductorio de algoritmos y se evaluó mediante un experimento enfoque más metódico y basado en principios a medida que trabajan para desarrollar

controlado. El grupo experimental entrenó analizando algoritmos usando esta intuición experta.

Compigorithm, mientras que el grupo de control analizó los mismos algoritmos Las investigaciones anteriores sobre la enseñanza del análisis Big-O se han

a mano. En la prueba posterior posterior, el grupo experimental superó al centrado en gran medida en el uso de la visualización para ilustrar la complejidad

grupo de control por un margen significativo (pags<0,00001; de CohenD=0,84). algorítmica [7, 11, 14–16]. En dicho trabajo, los instructores generalmente brindaban
a los estudiantes representaciones de algoritmos específicos. Si bien este enfoque

CONCEPTOS CCS puede ayudar a los estudiantes a comprender algoritmos individuales, los estudiantes
desempeñan un papel relativamente pasivo y es posible que no desarrollen un
• Temas sociales y profesionales.→Enseñanza de la informática;•
método generalizable para analizar algoritmos arbitrarios. Hundhausenet al.Involucró
Computación aplicada→Instrucción asistida por computadora;
activamente a los estudiantes al crear una "experiencia de estudio" [14] en la que los
Entornos de aprendizaje interactivos;•Teoría de la computación
estudiantes construyeron en colaboración sus propias visualizaciones durante las
→ Diseño y análisis de algoritmos.
sesiones de laboratorio semanales. Sin embargo, este enfoque se basó en la
retroalimentación en persona del personal del curso. Además, este estudio no
PALABRAS CLAVE
proporcionó a los estudiantes ningún proceso para realizar el análisis; más bien,
complejidad algorítmica; Herramientas educativas; Aprendizaje interactivo
buscó observar los procesos que se les ocurrieron por sí mismos.
Formato de referencia ACM: Otro trabajo ha involucrado a los estudiantes en un proceso de cuestionamiento y
Rebecca Smith y Scott Rixner. 2020. Compigoritmo: una herramienta interactiva para crítica de algoritmos [9, 14] para que piensen profundamente sobre la complejidad.
la práctica guiada del análisis de complejidad. EnActas de la Conferencia ACM 2020 Las preguntas orientadoras que se les daban a los estudiantes eran típicamente de
sobre Innovación y Tecnología en la Educación en Ciencias de la Computación (ITiCSE
alto nivel y los comentarios llegaban más tarde durante las discusiones en persona.
'20), del 15 al 19 de junio de 2020, Trondheim, Noruega.ACM, Nueva York, NY, EE. UU.,
Sahni [22] y Barloweet al.[1] definió métodos concretos y de grano fino para realizar el
7 páginas. https://doi.org/10.1145/3341525.3387390
análisis Big-O. Sin embargo, el último enfoque se enfoca específicamente en

1. INTRODUCCIÓN algoritmos que siguen una estructura de bucle particular, y ambos carecen de
retroalimentación automatizada inmediata.
El software de alta calidad no solo es correcto, sino eficiente tanto en el espacio como en el
Este documento define un proceso paso a paso detallado para guiar a los
tiempo. Para preparar a los estudiantes para carreras exitosas como desarrolladores de
estudiantes en la práctica activa del análisis Big-O. Además, este documento presenta
software, es esencial introducir principios de eficiencia desde el principio.
Compigorithm, una herramienta automatizada diseñada para guiar a los estudiantes
Se otorga permiso para hacer copias digitales o impresas de todo o parte de este trabajo para uso a través de este proceso de cinco pasos. Hasta donde sabemos, Compigorithm es la
personal o en el aula sin cargo, siempre que las copias no se hagan o distribuyan con fines de lucro o primera herramienta de este tipo para guiar a los estudiantes a través del proceso de
ventaja comercial y que las copias lleven este aviso y la cita completa en la primera página. . Deben
respetarse los derechos de autor de los componentes de este trabajo que no pertenezcan a ACM. Se
análisis de complejidad algorítmica. Compigorithm asegura que el estudiante
permite hacer resúmenes con crédito. Copiar de otro modo, o volver a publicar, publicar en servidores considere inicialmente cada pieza individual del algoritmo, pero luego los obliga a
o redistribuir a listas, requiere un permiso específico previo y/o una tarifa. Solicite permisos de
integrar esas piezas individuales. Esto asegura que los estudiantes no se salten pasos
permisos@acm.org.
ITiCSE '20, del 15 al 19 de junio de 2020, Trondheim, Noruega
individuales ni pierdan de vista la imagen holística. Una gran cantidad de
© 2020 Asociación de Maquinaria de Computación. investigación respalda el valor pedagógico de la retroalimentación formativa [2, 4, 12,
ACM ISBN 978-1-4503-6874-2/20/06. . .$15.00 13, 23], y así
https://doi.org/10.1145/3341525.3387390

363
Sesión: Herramientas ITiCSE '20, del 15 al 19 de junio de 2020, Trondheim, Noruega

Compigorithm está diseñado para dar a los estudiantes comentarios inmediatos instrucciones que describen qué propiedades podrían asumir sobre cada
sobre sus respuestas. Se requiere que los estudiantes completen con éxito cada paso estructura de datos. Por ejemplo, CPython implementa los diccionarios como
antes de continuar con el siguiente. Dado que Compigorithm está diseñado para ser tablas hash, pero se indicó a los estudiantes que simplemente trataran los
formativo, los estudiantes reciben infinitos intentos y, a menudo, reciben sugerencias diccionarios como colecciones desordenadas de pares (clave, valor), sin hacer
específicas al ingresar una respuesta incorrecta. suposiciones sobre cómo se almacenan esos pares.
Finalmente, este artículo presenta los resultados de un experimento controlado
diseñado para investigar la siguiente pregunta de investigación: ¿es la práctica guiada
junto con la retroalimentación formativa que ofrece Compigorithm un medio eficaz 2.2 Construcciones admitidas
para enseñar a los estudiantes la complejidad algorítmica, en comparación con un Computar la complejidad algorítmica es una extensión del problema de la
enfoque manual más ad hoc? El estudio se realizó en un curso introductorio sobre detención; dado que este problema es indecidible [5], Compigorithm no puede
algoritmos y matemáticas discretas. A todos los estudiantes se les presentó el análisis soportar el caso general. En cambio, se enfoca en apoyar casos relativamente
Big-O a través de una conferencia en clase y luego se les asignó la tarea de analizar la sencillos que se adaptan a un curso introductorio. Es compatible con muchas
complejidad de los mismos tres algoritmos en las tres semanas siguientes. Los construcciones básicas del lenguaje, comopor bucles,sibloques y funciones
estudiantes del grupo de control lo hicieron a mano, mientras que los estudiantes del integradas, y también puede manejartiempo bucles que tienen un número bien
grupo experimental usaron Compigorithm. Después de completar estos ejercicios de definido de iteraciones, dadas las anotaciones del instructor. La recursividad
capacitación, a todos los estudiantes se les dio una prueba posterior en la que se les aún no es compatible.
pidió que calcularan la complejidad de un algoritmo a mano. De media, los En términos de estructuras de datos, Compigorithm admite todos los tipos
estudiantes del grupo experimental obtuvieron una puntuación de 13,03 sobre 20, en integrados de Python, como listas, conjuntos y diccionarios. Como se señaló en la
comparación con los 9,86 del grupo de control. Esta diferencia fue estadísticamente Sección 2.1, se instruyó a los estudiantes para que trataran estas estructuras de datos
significativa (pags<0,00001) con un tamaño del efecto grande (Cohen'sD=0,84). de manera abstracta. Actualmente no se admiten clases arbitrarias definidas por el
usuario. Sin embargo, el curso para el que se diseñó Compigorithm históricamente ha
hecho un uso intensivo de algoritmos gráficos. Por lo tanto, Compigorithm tiene

2 CONTEXTO soporte incorporado para cuatro clases de gráficos: dirigidos y no dirigidos, cada uno
implementado usando listas de adyacencia y una matriz de adyacencia. A los
El curso para el que se diseñó Compigorithm lo toman principalmente los
estudiantes se les proporcionó una interfaz que detallaba las operaciones permitidas
estudiantes de ciencias de la computación previstos en su segundo
de cada clase de gráfico. Compigorithm permite como máximo un gráfico de entrada
semestre. Enseña algoritmos y matemáticas discretas, y las tareas para el
para un algoritmo dado, y pide a los estudiantes que se refieran a la cantidad de
hogar también incluyen componentes de programación en los que los
nodos y aristas en ese gráfico comonortey metro, respectivamente. También
estudiantes implementan algoritmos en Python. Compigorithm fue
introduce una variable adicional,D(I), para referirse al grado de un nodo arbitrarioI.
diseñado para complementar la instrucción existente sobre complejidad
Entonces, por ejemplo, si el algoritmo que se analiza itera sobre todos los vecinos de
algorítmica dentro del curso al guiar a los estudiantes a realizar análisis
un nodo en un gráfico, el número de iteraciones se designaría como D(I). Como la
de complejidad de manera estructurada. En el diseño de Compigorithm,
Sección 3 explicará con mayor detalle, los estudiantes pueden usar D(I)en pasos
la naturaleza del curso para el que se diseñó influyó en varias decisiones
intermedios, pero finalmente se le pedirá que reescriba todas las expresiones que
clave, en particular, la elección del idioma y las construcciones de idioma
involucrenD(I)en términos de solonorteymetro.
admitidas.

2.1 Elección de idioma


Cuando se introduce la complejidad algorítmica en este curso, se alienta a los 3 FLUJO DE TRABAJO
estudiantes a pensar en términos de estructuras de datos abstractas en lugar Para usar Compigorithm, todo lo que el instructor debe proporcionar es el
de considerar los detalles de implementación de cualquier lenguaje en algoritmo para que los estudiantes lo analicen, en forma de un archivo de
particular. Sin embargo, construir el backend de Compigorithm (descrito en la Python que contiene una o más definiciones de funciones. La cadena de
Sección 4) requería que el algoritmo analizado se expresara en un lenguaje documentación de cada función debe incluir anotaciones que indiquen los tipos
analizable. Esto, a su vez, requería el uso de un lenguaje de programación de entrada y salida. Después de cargar este archivo, el instructor recibe una
formal en lugar de un pseudocódigo informal. URL que proporciona acceso de solo lectura al código. Cuando los estudiantes
Los objetivos duales de imponer la estructura mientras se mantiene la abstracción acceden a esa URL, ven tres paneles, como se muestra en la Figura 1. En el lado
crearon una tensión en el diseño de Compigorithm. Una opción habría sido utilizar un izquierdo hay un margen que muestra los números de línea y las anotaciones
lenguaje diseñado para fines matemáticos como la comprobación de teoremas o que aparecen a medida que los estudiantes avanzan. El panel central contiene
modelos, como Coq [3], Dafny [18] o PlusCal [17]. Sin embargo, Compigorithm se el código proporcionado por el instructor, y en el lado derecho está el panel de
dirige a estudiantes introductorios, muchos de los cuales tienen solo unos pocos salida, donde los estudiantes pueden ver instrucciones y comentarios.
meses de experiencia en programación. La introducción de un nuevo idioma para los Encima de estos paneles hay un botón "Ejecutar"; al presionar esto, los
propósitos de este estudio probablemente habría sido una fuente de confusión, estudiantes reciben instrucciones que detallan la convención de nomenclatura de
distrayendo a los estudiantes de la tarea que tenían entre manos. En aras de la variables, los operadores permitidos y, lo que es más importante, el procedimiento de
familiaridad, Compigorithm usa Python. Sin embargo, para preservar el nivel de cinco pasos que seguirán. Tenga en cuenta que Compigorithm está diseñado como
abstracción deseado y para tener en cuenta el hecho de que la especificación del una herramienta de capacitación para programadores novatos que son nuevos en el
lenguaje Python deja algunos detalles sin definir, se les pidió a los estudiantes que análisis Big-O. Este procedimiento está diseñado para garantizar que, inicialmente, no
pensaran en el código como un pseudocódigo y se les proporcionó un lenguaje se salten pasos sin darse cuenta. Más tarde, una vez que hayan ganado suficiente
escrito claro. práctica para haber desarrollado más intuición, sería apropiado

364
Sesión: Herramientas ITiCSE '20, del 15 al 19 de junio de 2020, Trondheim, Noruega

Figura 1: Interfaz de usuario de Compigorithm

para que hagan la transición a un enfoque más holístico. A continuación se incluye un incluir varios términos. Sin embargo, para las líneas que contienen
extracto abreviado de las instrucciones que describen las cinco fases: encabezados de bucle, deben proporcionar tanto el número de iteraciones

(1) Línea por línea: Analice la complejidad de cada línea individual. como la complejidad de la "expresión de iteración" a la derecha detiempoo en,

(2) Multiplicación: para cada ciclo, multiplique el número de portiempoyporbucles, respectivamente. Paratiempobucles, primero se les

iteraciones por la suma de las complejidades de las líneas dentro solicita el número de iteraciones, ya que Python necesita volver a evaluar la

del ciclo. Mantenga solo una instancia de cada término único. expresión de la iteración, en este caso, la condición de continuación del bucle,

(3) Sustitución de grado: Eliminar todas las instancias deD(I)reescribiendo después de cada iteración. Paraporbucles, Python solo necesita evaluar la

en términos denorteymetro. expresión de iteración una vez para construir un objeto iterador. Por lo tanto,

(4) Simplificación: elimine los términos no máximos de cada línea se pide a los estudiantes que analicen primero esta expresión antes de calcular

y bucle. el número de iteraciones.

(5) Complejidad de la función: seleccione los términos que son máximos en El frontend de Compigorithm verifica la corrección comparando la respuesta del

el caso asintótico para calcular la complejidad total de la función. estudiante con los metadatos que han sido calculados previamente por el backend
(consulte la Sección 4). No requiere una coincidencia de cadena exacta; en cambio,
Los estudiantes deben completar estos cinco pasos para cada función en el
busca la equivalencia lógica usando elmatemáticas.jsBiblioteca1. Por ejemplo, si la
archivo. Compigorithm determina el orden en el que los estudiantes pueden analizar
respuesta esperada esO(norte+metro2), Compigorithm acepta variaciones en
estas funciones mediante la construcción de un gráfico de llamada, realizando una
espacios en blanco, ordenación y factorización como O(metro∗metro+norte). Si la
clasificación topológica y, posteriormente, haciendo cumplir que el estudiante trabaja
respuesta es correcta, se registra en el margen izquierdo. Esto permite a los
de la persona que llama a la persona que llama:es decir, siFllamadasd, el estudiante
estudiantes ver fácilmente qué líneas quedan y también consultar sus resultados
debe completar correctamente los cinco pasos paradantes de proceder aF.Las
intermedios a medida que trabajan en los pasos posteriores. Si la respuesta es
funciones disponibles están coloreadas en blanco; las funciones con dependencias no
incorrecta, Compigorithm solicita al alumno que vuelva a intentarlo. En muchos casos,
satisfechas se colorean en gris hasta que se hayan analizado todos los destinatarios.
también proporciona una pista específica. Existen seis clases de sugerencias: objetivo,
procedimiento, sintaxis, términos, tamaños y grados. Las sugerencias objetivas
3.1 Análisis línea por línea
recuerdan a los estudiantes su objetivo general, mientras que las sugerencias de
En el primer paso, los estudiantes tienen la tarea de calcular la complejidad de
procedimiento les recuerdan dónde se encuentran en el proceso. Las sugerencias de
cada línea individual. Si bien es posible que los algoritmos más avanzados no se
sintaxis apuntan a entradas con formato incorrecto. Las últimas tres categorías
analicen fácilmente línea por línea, los tipos de programas analizados por los
resaltan los errores que los estudiantes han cometido con respecto a los términos en
novatos (el público objetivo de Compigorithm) generalmente se prestan al
la expresión de complejidad, los tamaños de las variables o las expresiones que
análisis línea por línea. Los estudiantes deben tener en cuenta todas las
involucran unaD(I)término. La Tabla 1 incluye dos ejemplos de cada tipo de pista; los
operaciones individuales involucradas en una línea dada, incluidos todos los
corchetes angulares denotan texto personalizado para las líneas relevantes.
términos únicos, incluso aquellos que no son máximos. Sin embargo, se les
pide que eliminen los términos duplicados y los factores multiplicativos 3.2 Análisis holístico
constantes. Pueden seleccionar una línea para analizar haciendo clic en su
En el segundo paso, los estudiantes calculan la contribución de complejidad
número de línea y pueden cambiar de línea haciendo clic en un nuevo número
total de cada bucle. Para hacer esto, deben multiplicar el número de iteraciones
o presionando Intro para avanzar a la siguiente línea incompleta. Una vez
por la suma de las complejidades de las declaraciones dentro del ciclo. Para
seleccionada, la línea actual se resalta en azul y se le solicita al estudiante que
bucles anidados, se les pide a los estudiantes que trabajen hacia afuera desde
ingrese su complejidad.
el bucle más interno del nido. Cuando se completa este paso, el
Para la mayoría de las líneas, los estudiantes solo deben ingresar una sola
expresión que represente su complejidad, aunque esta expresión puede 1https://mathjs.org/

365
Sesión: Herramientas ITiCSE '20, del 15 al 19 de junio de 2020, Trondheim, Noruega

Tabla 1: Sugerencias seleccionadas

Categoría Ejemplos
Recuerda considerar el *peor* caso. ¿Cuántos elementos en total podrían necesitar ser buscados?
Objetivo
La expresión que intenta simplificar es: <expr>
Se le pidió que primero proporcionara el número de iteraciones; se le pedirá la complejidad de la expresión a la derecha de la
Procedimiento tiempo¡próximo! (Piense en por qué puede ser esto; ¿cuántas veces se ejecuta esa expresión?)
Solo debes incluir la expresión que representa el cuerpo del bucle, en concreto: <expr>
Entrada inválida; la entrada debe ser de la forma "O (...)"
Sintaxis
Entrada inválida; recuerda usar “∧” (no “**”), para exponenciación.
Tiene duplicados de los siguientes términos: <términos>. Recuerde incluir solo una instancia de cada término único.
Condiciones
Es posible que tenga términos faltantes o incorrectos en las siguientes líneas: <números de línea>. Recuerda que en este paso
intermedio, debes mantener una instancia de cada término único (incluso si no son máximos en el caso asintótico)
Mire las entradas involucradas en esta línea. Ahora mira los tamaños que has usado en tu expresión. ¿Está seguro de que todos esos tamaños
Tallas provienen de las entradas que se utilizan en esta línea?
¿Cuáles son los tamaños de las entradas para la persona que llama (<nombre de la persona que llama>) en términos de los tamaños de las entradas para la persona que llama (<nombre de la persona que llama>)

Piense en cuántas veces en total se ejecuta el ciclo interno que comienza en la línea <línea> en todas las iteraciones del ciclo externo que
Grados comienza en la línea <línea>
¿Cuál es el valor máximo de d(i) en términos de m y n?

estudiante se queda con sólo una expresión de complejidad por nivel superior ( (4)línea_complejidad:mapeo de cada número de línea enFa la
es decir, no contenido dentro de otro bucle) línea o nido de bucle. complejidad de esa línea
Compigorithm resalta el bucle seleccionado actualmente en azul y también (5)bucle_datos:asignación de cada número de línea que contiene un
resalta todos los bucles "disponibles" (para cada nido de bucles, el bucle más encabezado de bucle a la última línea contenida dentro de ese bucle
interno que aún no se ha completado) en un azul más claro. (6)while_loops:números de línea que contienen encabezados de bucle while
El tercer paso, la sustitución de grados, solo se aplica a los algoritmos (7)nombres de variables:nombres asignados a los argumentos
gráficos que iteran sobre los vecinos. En tales algoritmos, los estudiantes
habrán introducidoD(I)términos durante los dos primeros pasos. Ahora, deben
reescribir cualquier expresión de alto nivel que involucreD(I)en términos de Estas siete piezas de metadatos son todo lo que Compigorithm necesita
norteymetro. Para algoritmos que usan bucles anidados para iterar sobre el para hacer cumplir el procedimiento de cinco pasos descrito en la Sección 3. Sin
vecinos de cada nodo, esto requiere que los estudiantes reconozcan que embargo, también rastrea varias características adicionales del código para
∑norte
I=1D(I) =metro;es decir, el número total de iteraciones es proporcional informar mejor las sugerencias que brinda a los estudiantes. El backend de
al número de aristas en el gráfico. Si el algoritmo solo itera sobre los Compigorithm calcula estos metadatos analizando el código proporcionado por
vecinos de un nodo,D(I)simplemente resuelvenorte. el instructor en un árbol de sintaxis abstracta (AST) y procesando cada función
Finalmente, los estudiantes están listos para simplificar. En el paso cuatro, usando dos visitantes personalizados: elBigoVisitory elTamañoVisitante. Estos
deben descartar los términos no máximos de las expresiones de nivel superior calculan la complejidad de tiempo de cada línea y la complejidad de tamaño de
restantes. Luego, en el paso cinco, deben ingresar la complejidad de la función, cada variable, respectivamente, almacenando los resultados como expresiones
calculada seleccionando todos los términos máximos en estas expresiones de algebraicas en términos de las entradas de la función.
nivel superior. Una vez que los estudiantes ingresan la respuesta correcta para losBigoVisitorcrea una asignación de cada número de línea a una lista
una funciónd, Compigorithm busca expandir el conjunto de funciones de las complejidades de todas las operaciones en esa línea. Extiende el
disponibles. Si una funciónFllamadody todos sus destinatarios ahora han sido Visitante de nodoclase de Pythonrápidoy consta de un conjunto recursivo
analizados, está disponible para su análisis. Luego, el estudiante repite el de visitantes, uno para cada tipo de nodo compatible. Cada visitante crea
proceso de cinco pasos hasta que se hayan analizado todas las funciones. una cadena que representa la complejidad del nodo actual, que puede
incluir varios términos. Agrega esta expresión a una lista correspondiente

4 INFRAESTRUCTURA al número de línea del nodo actual y luego procesa recursivamente todos
los elementos secundarios del nodo actual. Para algunos tipos de nodos,
Este flujo de trabajo requiere que Compigorithm tenga acceso a una gran
como los que representanpasaro Seguirdeclaraciones, este es un proceso
cantidad de metadatos relacionados con las funciones que se analizan. Si bien
sencillo. Sin embargo, para operaciones que involucran variables, el
un instructor podría producir manualmente estos metadatos, hacerlo
BigoVisitordelegados a laTamañoVisitante,que es responsable de
requeriría un esfuerzo adicional sustancial. Para minimizar la carga del
propagar información sobre los tamaños de todas las variables vivas. los
instructor, el backend de Compigorithm calcula automáticamente todos los
TamañoVisitantemantiene una asignación del nombre de cada variable a
metadatos necesarios. Para cada funciónFen el archivo proporcionado por el
su tamaño actual. Esta asignación se actualiza no solo en las
instructor, Compigorithm calcula la siguiente información:
asignaciones, sino también en las llamadas a las funciones de la
(1)complejidad_total:complejidad general deF biblioteca que afectan los tamaños de las variables, comolist.append.
(2)dependencias:funciones definidas por el usuario queFllamadas Para manejar las llamadas a funciones, Compigorithm primero calcula el
(3)start_lineno:línea que contiene el encabezado de la función paraF tamaño de cada argumento. Los propios argumentos pueden ser compuestos

366
Sesión: Herramientas ITiCSE '20, del 15 al 19 de junio de 2020, Trondheim, Noruega

Tabla 2: Confianza autoinformada promedio (Escala Likert de 5 puntos, ambos tratamientos)

Grupo de control Grupo experimental


“Califique su confianza en cada uno de los siguientes:” valor p
norte Pre-encuesta Post-encuesta Delta norte Pre-encuesta Post-encuesta Delta
1A Su comprensión del análisis de O grande 87 3.13 3.57 + 0,45 86 3.02 3.76 + 0,73 0.049
Su capacidad para razonar sobre la complejidad
1B algorítmica (el tiempo de ejecución de un algoritmo en 87 3.01 3.58 + 0,56 86 2.95 3.60 + 0,65 0.50
función del tamaño de sus entradas)
Su comprensión de cómo la elección de la estructura
1C 87 3.13 3.46 + 0,33 86 2.99 3.67 + 0,69 0.014
de datos afecta la complejidad algorítmica
Su capacidad para calcular correctamente la
1D 87 2.90 3.37 + 0,47 86 2.81 3.49 + 0,67 0.12
complejidad de un algoritmo.

expresiones que involucran operaciones adicionales, tal vez incluso llamadas a iteraciones pasadas del curso. Para minimizar la contaminación del
funciones adicionales, por lo que en el proceso de resolución de los experimento, a los estudiantes no se les permitió discutir las tareas entre
argumentos, Compigorithm también rastrea la complejidad temporal de tales ellos, aunque podían hacer preguntas al instructor, a los TA ya los
operaciones y almacena esa información en la lista que pertenece a la línea investigadores. Sin embargo, es posible que algunos estudiantes hayan
actual. Luego busca la expresión de la complejidad algorítmica del receptor de hecho caso omiso de las instrucciones y discutido los ejercicios entre
la llamada y la sustituye en los tamaños de los argumentos calculados. ellos, lo que podría haber representado una amenaza para la validez
Si el destinatario de la llamada está definido en el archivo proporcionado interna.
por el instructor, estos dos últimos pasos se posponen hasta que Después de la tercera tarea (AC3), todos los estudiantes completaron
Compigorithm haya completado el primer paso por todas las funciones. Luego, una encuesta posterior y realizaron una prueba posterior. La encuesta
Compigorithm usa tres asignaciones para buscar tres piezas de información: la posterior pidió a los estudiantes que calificaran nuevamente su confianza
complejidad algorítmica del receptor de la llamada, el tamaño del valor y también que calificaran la efectividad percibida de los ejercicios. La
devuelto y el tipo de valor devuelto. Cada mapeo asocia el nombre de la prueba posterior se administró durante la sesión de problemas
función con una expresión algebraica en términos del primer y segundo semanales y pidió a los estudiantes que calcularan la complejidad de una
parámetro. Tenga en cuenta que el esquema actual solo admite funciones con función a mano. Los investigadores calificaron las pruebas posteriores a
hasta dos parámetros, pero podría ampliarse fácilmente. Habiendo buscado ciegas utilizando una rúbrica que se creó de antemano. La rúbrica fue
estas tres expresiones, Compigorithm sustituye los tamaños de los argumentos muy detallada; asignó crédito parcial a cada concepto individual que los
previamente calculados para resolver la complejidad de la llamada. estudiantes pudieron demostrar comprensión y fue diseñado para aislar
Por último, la lista de complejidades operativas de cada línea se conceptos individuales de modo que un error no tuviera un efecto en
contrae en una sola expresión, y Pythonsimpático [20] se utiliza para cascada. Una amenaza potencial para la validez es la falta de una prueba
simplificar esta expresión a la forma Big-O. Luego, el backend devuelve previa para compararla con la prueba posterior; sin embargo,
este resultado final, así como los metadatos intermedios, al frontend,
donde se utiliza para respaldar el flujo de trabajo descrito en la Sección 3.

5 METODOLOGIA 6 EVALUACIÓN
Como se discutió en la Sección 2, Compigorithm se evaluó en un curso introductorio Las encuestas previas y posteriores ofrecen información sobre el cambio en la
de algoritmos y matemáticas discretas que es el segundo curso en el plan de estudios autoeficacia que experimentaron los estudiantes durante el estudio. La Tabla 2
de informática. Cada semana, los estudiantes asisten a dos conferencias y una sesión resume la confianza autoinformada de los estudiantes en cuatro elementos
opcional de resolución de problemas. La inscripción es típicamente alrededor de 200 relacionados con el análisis de complejidad. Las secciones intermedias proporcionan
estudiantes. Compigorithm se puso a prueba durante la primavera de 2019 y se estadísticas resumidas para cada grupo de tratamiento; la columna más a la derecha
evaluó en un experimento controlado. Los estudiantes fueron asignados al azar a los enumera el valor p que resultó de una prueba t heteroscedástica no pareada de dos
grupos de tratamiento, y todos los estudiantes fueron introducidos al análisis Big-O colas. Esta prueba se realizó calculando primero el delta en la respuesta de cada
en la misma conferencia impartida en la tercera semana de clase. Posteriormente, estudiante antes y después de la encuesta, y luego comparando las distribuciones de
todos los estudiantes completaron una encuesta previa en la que calificaron su los deltas entre los dos grupos.
confianza utilizando una escala Likert de 5 puntos. Luego, en el transcurso de tres A pesar del uso de la selección aleatoria, los estudiantes del grupo
semanas, todos los estudiantes completaron tres ejercicios de entrenamiento experimental informaron inicialmente una menor confianza. Sin embargo, al
denominados AC1, AC2 y AC3. final del estudio, su confianza promedio superó la del grupo de control en los
Cada ejercicio pedía a los estudiantes que analizaran un único algoritmo. A los cuatro elementos. Para dos de estos (comprensión general del análisis de O
estudiantes de ambos grupos se les pidió que analizaran exactamente los mismos grande y comprensión de cómo la elección de la estructura de datos afecta la
algoritmos y tuvieron acceso a la misma guía de referencia con respecto a la complejidad algorítmica), la diferencia en los deltas entre los grupos fue
complejidad de varios accesos a estructuras de datos. AC1 involucró principalmente estadísticamente significativa al principio.pags=nivel 0.05.
operaciones de conjuntos, mientras que AC2 y AC3 se enfocaron en operaciones de En la encuesta posterior, también se les pidió a los estudiantes que calificaran su
gráficos. lossolamenteLa diferencia fue que los estudiantes del grupo experimental acuerdo con cuatro afirmaciones sobre la efectividad percibida de los ejercicios de
analizaron los algoritmos dentro de Compigorithm, mientras que los estudiantes del entrenamiento. Se les hicieron las mismas preguntas dos veces: una para AC1 (que
grupo de control lo hicieron a mano, como lo habrían hecho en consiste principalmente en operaciones de conjuntos) y otra para

367
Sesión: Herramientas ITiCSE '20, del 15 al 19 de junio de 2020, Trondheim, Noruega

Tabla 3: Concordancia promedio: Eficacia AC1 y AC2–3 (Escala Likert de 5 puntos, ambos tratamientos)

Grupo de control Grupo experimental


“Por favor califique su acuerdo con cada una de las siguientes afirmaciones con respecto a AC1:” valor p
norte Post-encuesta norte Post-encuesta
2A AC1 mejoró mi capacidad de razonar sobre la complejidad algorítmica 87 3.17 86 3.76 0.00012
2B AC1 me ayudó a identificar y corregir mis conceptos erróneos sobre la complejidad algorítmica 87 3.02 86 3.81 < 0.00001
2C AC1 me ayudó a aprender a analizar metódicamente la complejidad de un algoritmo 87 3.14 86 3.88 < 0.00001
2D AC1 me dio una nueva visión de las complejidades de ciertas operaciones de estructura de datos 87 3.07 86 3.81 < 0.00001
Grupo de control Grupo experimental
“Califique su acuerdo con cada una de las siguientes afirmaciones con respecto a AC2-3:” valor p
norte Post-encuesta norte Post-encuesta
3A AC2–3 mejoró mi capacidad de razonar sobre la complejidad algorítmica 88 3.20 88 3.73 0.00046
3B AC2–3 me ayudó a identificar y corregir mis conceptos erróneos sobre la complejidad algorítmica 88 3.13 88 3.72 0.00015
3C AC2–3 me ayudó a aprender a analizar metódicamente la complejidad de un algoritmo 88 3.31 88 3.73 0.0059
3D AC2–3 me dio una nueva visión de las complejidades de ciertas operaciones de estructura de datos 88 3.17 88 3.78 0.00018

Tabla 4: Concordancia promedio: efectividad del compigoritmo (escala de Likert de 5 puntos, solo grupo experimental)

AC1 AC2–3
“Por favor califique su acuerdo con cada una de las siguientes afirmaciones con respecto a su experiencia con...”
norte Post-encuesta norte Post-encuesta
4A La herramienta me ayudó a desarrollar un enfoque metódico para realizar análisis de complejidad. 87 4 88 3.95
4B La herramienta me dio una nueva perspectiva de la complejidad algorítmica de las operaciones individuales. 87 3.93 88 3.94
4C La herramienta me ayudó a analizar la complejidad de un algoritmo línea por línea 87 4.11 88 4.07
La herramienta me ayudó a sintetizar mi conocimiento de la complejidad de las operaciones individuales
4D 87 3.94 86 3.86
para calcular la complejidad general
4E Las sugerencias de la herramienta me ayudaron a identificar y corregir mis conceptos erróneos sobre la complejidad algorítmica. 87 3.64 88 3.73

AC2–3 (algoritmos gráficos). Como se muestra en la Tabla 3, el grupo Tabla 5: Prueba posterior: Resumen de estadísticas

experimental encontró que su experiencia fue estadísticamente (p < 0,00001, d = 0,84)


significativamente más útil que el grupo de control en las ocho preguntas. El
grupo experimental también respondió preguntas específicas sobre Mín Promedio Máx Stdev norte

Compigorithm; estos resultados se resumen en la Tabla 4. Los estudiantes Control 0 9.86 19 4.38 90
estuvieron más de acuerdo con las afirmaciones de que Compigorithm les Experimental 6 13.03 20 3.08 89
ayudó a realizar un análisis línea por línea (4C) y que les ayudó a desarrollar un
enfoque metódico para el análisis de complejidad (4A). Hubo un poco más de
para ayudarles a desarrollar un enfoque basado en principios para esta tarea. Este
desacuerdo con respecto al sistema de pistas, lo que sugiere que puede ser
documento ha presentado Compigorithm, una herramienta automatizada que guía a
una vía para el trabajo futuro.
los estudiantes a través de un procedimiento de cinco pasos para calcular la
Los resultados más reveladores provienen de la prueba posterior. Se pidió a
complejidad algorítmica. Al combinar la práctica específica con la retroalimentación
los estudiantes que calcularan, a mano, la complejidad algorítmica de una
formativa, Compigorithm brinda a los estudiantes una experiencia interactiva
función de Python. Tenían 20 minutos para completar la prueba y se les pidió
diseñada para ayudarlos a aprender un enfoque sistemático para el análisis de
que mostraran todo el trabajo. La prueba se calificó sobre 20 puntos; se otorgó
complejidad. A medida que los estudiantes trabajan, Compigorithm estructura su
crédito parcial. La prueba fue diseñada para ser desafiante, para servir como
progreso asegurándose de que no se salten ningún paso, brinda retroalimentación
un diferenciador efectivo, pero no requiere mucho tiempo; casi todos los
inmediata sobre la corrección de sus respuestas y permite infinitos reintentos hasta
estudiantes tenían tiempo de sobra. Como muestra la Tabla 5, el grupo
que alcanzan la solución correcta. La infraestructura de Compigorithm está
experimental superó sustancialmente al grupo de control, con una puntuación
completamente automatizada, de modo que el instructor solo necesita proporcionar
media de 13,03 frente a los 9,86 del grupo de control. Esta diferencia arrojó un
el código fuente para que se analice el algoritmo.
valor p de < 0.00001 y un tamaño del efecto, medido por CohenD, de 0,84, lo
Compigorithm se evaluó en un experimento controlado dentro de un curso
que indica que Compigorithm tuvo un gran efecto positivo en la capacidad de
introductorio sobre algoritmos y matemáticas discretas. En una prueba
los estudiantes para realizar análisis Big-O.
posterior, los estudiantes que entrenaron usando Compigorithm superaron a
los estudiantes que habían entrenado analizando los mismos algoritmos a
7. CONCLUSIÓN mano por un margen estadísticamente significativo. Los estudiantes del grupo
Para escribir código que no solo sea correcto sino también eficiente, los experimental también informaron mayores aumentos en la autoeficacia con
estudiantes deben comprender cómo las elecciones lógicas y estructurales que respecto a su comprensión general del análisis Big-O y su comprensión de
toman impactan en la eficiencia de sus algoritmos. Con este fin, los cursos de cómo la elección de la estructura de datos afecta la complejidad algorítmica.
introducción a los algoritmos suelen presentar el concepto de complejidad Estos resultados indican que Compigorithm es una herramienta de formación
algorítmica, a menudo en forma de análisis Big-O. eficaz, incluso con una intervención mínima del instructor, y que proporciona a
Inicialmente, muchos novatos carecen de intuición para realizar análisis los estudiantes no solo una base conceptual sólida, sino también las
Big-O. Por lo tanto, es fundamental dar a los estudiantes una práctica guiada habilidades prácticas necesarias para abordar nuevos problemas.

368
Sesión: Herramientas ITiCSE '20, del 15 al 19 de junio de 2020, Trondheim, Noruega

REFERENCIAS [13] John Hattie y Helen Timperley. 2007. El poder de la retroalimentación.Revisión de la


[1] Scott Barlowe y Andrew Scott. 2015. O-Charts: Hacia un conjunto de herramientas eficaz para la
investigación educativa77, 1 (2007).
enseñanza de la complejidad del tiempo. EnActas de la 45.ª Conferencia Anual de Fronteras en
[14] Christopher D. Hundhausen y Jonathan Lee Brown. 2005. Personalización y discusión de
Educación (FIE '15). El Paso, Texas.
algoritmos dentro de las experiencias de CS1 Studio: un estudio observacional.
[2] Paul Black y Dylan William. 1998. Evaluación y Aprendizaje en el Salón de Clases. EnActas del 1er Taller Internacional sobre Investigación en Educación en Computación
Evaluación en Educación: Principios, Política y Práctica5, 1 (1998). (ICER '05). Seattle, WA.
[3] El equipo de desarrollo de Coq. 2017.Manual de referencia del asistente de prueba de [15] Christopher D. Hundhausen y Jonathan L. Brown. 2008. Diseño, visualización y discusión
Coq, versión 8.7. http://coq.inria.fr de algoritmos dentro de una experiencia de CS1 Studio: un estudio empírico.
[4] Terence J. Crooks. 1988. El impacto de las prácticas de evaluación en el aula sobre los estudiantes.
Informática y Educación50, 1 (2008), 301–326.
Revisión de la investigación educativa58, 4 (1988).
[16] Christopher D. Hundhausen, Sarah A. Douglas y John T. Stasko. 2002. Un metaestudio de
[5] Martín Davis. 1958.Computabilidad e insolubilidad. McGraw-Hill Book Company, la efectividad de la visualización de algoritmos.Revista de lenguajes visuales y
Inc. computación13, 3 (2002), 259–290.
[6] Mohammed F. Farghally, Kyu Han Koh, Jeremy V. Ernst y Clifford A. Shaffer. 2017. Hacia [17] Leslie Lamport. [Dakota del Norte]. El lenguaje del algoritmo PlusCal. EnActas del 6º
un inventario de conceptos para temas de análisis de algoritmos. EnActas del 48º Coloquio Internacional sobre Aspectos Teóricos de la Computación (ICTAC '09).
Simposio Técnico SIGCSE sobre Educación en Ciencias de la Computación (SIGCSE '17). [18] K. Rustán M. Leino. 2010. Dafny: un verificador automático de programas para la
Seattle, WA. corrección funcional. EnActas de la 16.ª Conferencia Internacional sobre Lógica para
[7] Mohammed F. Farghally, Kyu Han Koh, Hossameldin Shahin y Cliffor A. Shaffer. 2017. Programación, Inteligencia Artificial y Razonamiento (LPAR '10). Dakar, Senegal.
Evaluación de la efectividad de las visualizaciones de análisis de algoritmos. [19] Robert McCartney, Dennis J. Bouvier, Tzu-Yi Chen, Gary Lewandowski, Kate Sanders, Beth
EnActas del 48º Simposio Técnico SIGCSE sobre Educación en Ciencias de la Simon y Tammy VanDeGrift. 2009. Commonsense Computing (episodio 5): Eficiencia de
Computación (SIGCSE '17). Seattle, WA. algoritmos y pruebas de globo. EnActas del 5º Taller Internacional de Investigación en
[8] Eric Fouh, Mohammed Farghally, Sally Hamouda, Kyu Han Koh y Clifford A. Shaffer. 2016.
Educación en Computación (ICER '09). Berkeley, CA.
Investigación de temas difíciles en un curso de estructuras de datos utilizando la teoría de [20] Aaron Meurer, Christopher P. Smith, Mateusz Paprocki, Ondřej Čertík, Sergey B.
respuesta al ítem y el análisis de datos registrados. EnActas de la Conferencia Internacional Kirpichev, Matthew Rocklin, Amit Kumar, Sergiu Ivanov, Jason K. Moore, Sartaj
sobre Minería de Datos Educativos de 2016 (EDM '16). Raleigh, Carolina del Norte. Singh, Thilina Rathnayake, Sean Vig, Brian E. Granger, Richard P. Muller,
[9] Judith Gal-Ezer, Tamar Vilner y Ela Zur. 2004. Enseñanza de la eficiencia del algoritmo en el nivel Francesco Bonazzi, Harsh Gupta, Shivam Vats, Fredrik Johansson, Fabian
CS1: un enfoque diferente.Educación en Ciencias de la Computación14, 3 (2004), 235–248. Pedregosa, Matthew J. Curry, Andy R. Terrel, Štěpán Roučka, Ashutosh Saboo,
Isuru Fernando, Sumith Kulal, Robert Cimrman y Anthony Scopatz. 2017. SymPy:
[10] Judith Gal-Ezer y Ela Zur. 2003. La eficiencia de los algoritmos: conceptos erróneos. computación simbólica en Python.Informática PeerJ3 (enero de 2017), e103.
Informática y Educación42, 3 (2003), 215–226. https://doi.org/10.7717/peerj-cs.103
[11] Michael T. Goodrich y Roberto Tamassia. 1998. Enseñanza del Análisis de Algoritmos con [21] Miranda Parker y Colleen Lewis. 2014. Qué hace que el análisis Big-O sea difícil: comprender cómo

Pruebas Visuales. EnActas del 29º Simposio Técnico SIGCSE sobre Educación en Ciencias los estudiantes entienden el análisis de tiempo de ejecución.Revista de Ciencias de la

de la Computación (SIGCSE '98). Atlanta, Georgia. Computación en las Universidades29, 4 (2014), 164–174.
[12] Juan Hattie. 2008.Aprendizaje visible: una síntesis de más de 800 metaanálisis relacionados con el [22] Sartaj Sahni. 1999.Estructuras de datos, algoritmos y aplicaciones en C++.
rendimiento. Routledge. Compañía editorial McGraw-Hill.
[23] Valerie J. Shute. 2008. Enfoque en la retroalimentación formativa.Revisión de la investigación
educativa78, 1 (2008).

369

También podría gustarte