Recursividad en programación

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

¿Qué condición no es necesaria para que una función sea considerada recursiva?

  • Debe evitar la recursión infinita.
  • Debe tener al menos una invocación a sí misma.
  • Debe tener condiciones de control para interrumpir el proceso recursivo.
  • Debe definirse dentro de una estructura de datos no lineal. (correct)

¿Cuál es una desventaja principal de usar versiones recursivas en comparación con versiones iterativas?

  • Las versiones recursivas son siempre menos compactas.
  • Las versiones recursivas son inherentemente más complejas de entender.
  • Las versiones recursivas no pueden ser optimizadas por el compilador.
  • Las versiones recursivas requieren más memoria stack por cada invocación. (correct)

¿Qué estructura de datos se utiliza en el proceso de invocación recursiva de funciones para almacenar la información de cada instancia?

  • Pila (Stack). (correct)
  • Montículo (Heap).
  • Cola.
  • Lista enlazada.

En el contexto de coordenadas de pantalla, ¿dónde se encuentra el origen del sistema de coordenadas?

<p>En la esquina superior izquierda. (A)</p> Signup and view all the answers

Considerando la función de Ackermann, ¿cuál es el resultado de ackermann(2, 1)?

<p>5 (D)</p> Signup and view all the answers

¿Cuál es el orden de complejidad temporal de la versión iterativa para calcular el término n-ésimo de Fibonacci?

<p>Lineal. (B)</p> Signup and view all the answers

¿Qué implicación tiene el uso de una 'bandera de corte' en el algoritmo de Intercambio Directo (Burbuja)?

<p>Puede detener el proceso si no hay intercambios en una pasada, ahorrando tiempo. (C)</p> Signup and view all the answers

En el algoritmo de Selección Directa, ¿qué representa la 'casilla pivot'?

<p>La casilla donde se coloca el elemento más pequeño encontrado en cada pasada. (C)</p> Signup and view all the answers

El algoritmo Shellsort se describe como una mejora del algoritmo de Inserción Directa. ¿Cuál es la principal característica que diferencia a Shellsort?

<p>Shellsort trabaja con subconjuntos ordenados a una distancia <code>h</code> antes de ordenar completamente. (B)</p> Signup and view all the answers

¿Qué se busca en cada vuelta del algoritmo Heapsort?

<p>El menor (o el mayor) elemento entre los restantes. (C)</p> Signup and view all the answers

¿Qué representa la notación Big O en el análisis de algoritmos?

<p>Una cota superior para el tiempo de ejecución. (C)</p> Signup and view all the answers

Si un algoritmo tiene una complejidad de O(log(n)), ¿qué caso típico representa esto?

<p>Búsqueda binaria. (D)</p> Signup and view all the answers

Si se tiene que f(n) = 3n² + 5n + 2, ¿cuál es la notación Big O que mejor describe esta función?

<p>O(n²). (B)</p> Signup and view all the answers

¿Cómo se define un 'análisis asintótico' en el contexto de algoritmos?

<p>Un análisis que busca el comportamiento general para valores muy grandes del tamaño del problema. (D)</p> Signup and view all the answers

¿Qué significa que un problema pertenezca a la categoría de 'Problemas Intratables' en la Teoría de la Complejidad?

<p>Que solo se conocen algoritmos con tiempo de ejecución exponencial. (D)</p> Signup and view all the answers

En el contexto de la notación asintótica, ¿cuál es la diferencia entre O(g(n)) y o(g(n))?

<p>O(g(n)) indica un crecimiento menor o igual, mientras que o(g(n)) indica un crecimiento menor estricto. (B)</p> Signup and view all the answers

¿Cuál de las siguientes características es propia de las estructuras de datos 'lineales' (Pilas y Colas)?

<p>Cada elemento tiene un único sucesor y un único antecesor (excepto el primero y el último). (C)</p> Signup and view all the answers

¿Cuál es la diferencia fundamental entre una Pila (Stack) y una Cola (Queue)?

<p>Las Pilas siguen el principio LIFO, mientras que las Colas siguen el principio FIFO. (B)</p> Signup and view all the answers

En un árbol binario, ¿qué condición no es necesaria para que su estructura sea válida?

<p>Debe existir una relación de orden entre los nodos. (D)</p> Signup and view all the answers

En la terminología de árboles binarios, ¿qué se entiende por la 'altura' del árbol?

<p>El número de nivel máximo del árbol. (D)</p> Signup and view all the answers

¿Cuál es la principal característica de un grafo 'acíclico'?

<p>No contiene ningún ciclo. (A)</p> Signup and view all the answers

Dentro de los tipos de grafos, ¿qué representa un 'grafo ponderado'?

<p>Un grafo donde cada arco tiene asociado un valor o peso. (A)</p> Signup and view all the answers

En la implementación matricial de un grafo no dirigido, ¿qué propiedad debe cumplir la matriz de adyacencia?

<p>Debe ser una matriz simétrica respecto a la diagonal principal. (A)</p> Signup and view all the answers

Considerando el algoritmo Quicksort, ¿qué rol cumple el 'pivote'?

<p>Es un valor utilizado para dividir el arreglo en dos sub-arreglos, uno con valores mayores y otro con valores menores. (C)</p> Signup and view all the answers

¿Cuál es el tiempo de ejecución en el peor caso del algoritmo Quicksort?

<p>O(n²). (D)</p> Signup and view all the answers

¿Qué estrategia de resolución de problemas implica probar diferentes soluciones hasta encontrar la correcta, volviendo atrás si una opción no funciona?

<p>Backtracking (Vuelta Atrás). (B)</p> Signup and view all the answers

En el contexto de algoritmos de ordenamiento, ¿cuál de las siguientes estrategias se basa en aplicar una regla intuitivamente válida en cada paso local del proceso?

<p>Algoritmos Ávidos (Greedy Algorithms). (B)</p> Signup and view all the answers

¿Cuál es una característica fundamental de la técnica de 'Programación Dinámica'?

<p>Calcular y almacenar los resultados de subproblemas para re-usarlos posteriormente. (C)</p> Signup and view all the answers

En el Problema de las Ocho Reinas, ¿qué se mantiene constante en cada diagonal 'inversa'?

<p>La suma entre el número de columna y el número de fila. (B)</p> Signup and view all the answers

Flashcards

¿Qué es recursividad?

Un objeto o concepto se dice recursivo si se define en términos de sí mismo.

¿Condiciones para la recursividad?

Una función debe invocarse a sí misma y tener condiciones de control para interrumpir el proceso recursivo.

Definición recursiva de bosque

Es un conjunto de árboles que puede estar vacío o contener otros árboles agrupados recursivamente.

¿Dónde está el origen en coordenadas de pantalla?

El origen está en la esquina superior izquierda.

Signup and view all the flashcards

¿Qué es el Stack Segment?

Cuando se invoca una función, se asigna un bloque de memoria en el Stack Segment para parámetros y variables locales.

Signup and view all the flashcards

¿Cómo funciona el Stack Segment?

El último dato en entrar es el primero en salir.

Signup and view all the flashcards

¿Qué datos almacena cada instancia recursiva en el Stack Segment?

Almacena la dirección de retorno y las variables locales de la función.

Signup and view all the flashcards

¿Factorial recursivo?

Es una función que se llama a sí misma para resolver un problema dividiéndolo en subproblemas más pequeños del mismo tipo

Signup and view all the flashcards

¿Qué es el ordenamiento de burbuja?

Es un algoritmo que ordena comparando elementos adyacentes e intercambiándolos si están en el orden incorrecto.

Signup and view all the flashcards

¿Porque algunos algoritmos de ordenamiento son simples?

Estos algoritmos tienen un mal rendimiento en tiempo de ejecución si el tamaño n del arreglo es grande o muy grande

Signup and view all the flashcards

¿Qué es la selección directa?

Es un algoritmo que divide repetidamente una lista en sub-listas más pequeñas, compara el elemento más pequeño con el elemento más pequeño de las sub-listas y lo coloca en la parte superior.

Signup and view all the flashcards

¿Qué es inserción directa?

Es un algoritmo que construye iterativamente una lista ordenada insertando cada nuevo elemento en la posición correcta dentro de la lista ya ordenada.

Signup and view all the flashcards

¿Qué es el algoritmo Shellsort?

Es una mejora Inserción Directa, divide la lista en subconjuntos ordenados y luego los combina.

Signup and view all the flashcards

¿Que es una pila?

Es un tipo de datos abstracto que representa una colección de elementos, donde el elemento de nivel superior siempre se elimina primero

Signup and view all the flashcards

¿Que es heapsort?

El algoritmo se basa en encontrar el minimo de entre los elementos que quedan, para llevarlo a su casillero final

Signup and view all the flashcards

¿Qué es el análisis de algoritmos?

Es una rama de las Ciencias de la Computación que se orienta a técnicas para medir la eficiencia de un algoritmo.

Signup and view all the flashcards

¿Diferencia entre el peor caso y el caso promedio?

Es la configuración más desfavorable, mientras que el caso promedio describe una configuración aleatoria.

Signup and view all the flashcards

¿Qué es la notación Big O?

Es una cota superior para el tiempo de ejecución de un algoritmo.

Signup and view all the flashcards

¿Que es el método push()?

Agrega un elemento al frente de la pila

Signup and view all the flashcards

¿Que es el método pop()?

Retira un elemento al frente de la pila

Signup and view all the flashcards

¿Qué es una estructura lineal?

Es una estructura lineal con un único sucesor y antecesor inmediato.

Signup and view all the flashcards

¿Qué es la abstracción de datos?

Busca captar el conjunto de datos más relevante.

Signup and view all the flashcards

¿Qué es la abstracción funcional?

Busca determinar el conjunto de procesos (funciones) relevante.

Signup and view all the flashcards

¿Qué es una cola?

Es una estructura lineal donde los elementos se organizan uno detrás del otro. El primero en entrar es el primero en salir.

Signup and view all the flashcards

¿Qué es una pila?

Una estructura lineal en la cual los elementos se van apilando uno encima del otro

Signup and view all the flashcards

¿Qué es un árbol binario?

Es una estructura de datos no lineal que puede estar vacía o contener nodos con subconjuntos.

Signup and view all the flashcards

¿Qué son los enlaces/arcos en árboles?

Referencias o punteros que unen nodos en un árbol.

Signup and view all the flashcards

¿Qué es el nivel de un nodo en un árbol?

Cantidad de arcos desde la raíz hasta el nodo.

Signup and view all the flashcards

¿Qué es la altura de un árbol?

Es el número de nivel máximo del árbol.

Signup and view all the flashcards

¿Como se recorre el arbol binario?

Se utilizan la pila para almacenar direcciones LIFO

Signup and view all the flashcards

Study Notes

Recursividad

  • Una definición es recursiva si el objeto o concepto definido aparece en la definición misma.

Aplicaciones de la Recursividad

  • Generación y procesamiento de imágenes y gráficos fractales, compuestos por versiones más simples de la figura original.
  • Recorrido y procesamiento de estructuras de datos no lineales como árboles y grafos.

Condiciones para la Recursividad

  • Una función debe tener al menos una invocación a sí misma.
  • Antes de invocarse, debe tener condiciones de control para interrumpir el proceso recursivo al alcanzar situaciones triviales.
  • Una definición recursiva correcta evita la recursión infinita asegurando elementos para cerrarla lógicamente.

Definición Recursiva de Bosque

  • Un bosque es un conjunto de árboles que puede estar vacío, o contener uno o más árboles agrupados con otro bosque.

Análisis de Bloque de Código Recursivo

  • La versión recursiva puede ser más simple, pero utiliza memoria de stack en cada invocación.
  • La versión iterativa puede ser más conveniente.

Gráficos Fractales

  • Un fractal es una figura compuesta por versiones más simples y pequeñas de la figura original.

Coordenadas de Pantalla

  • El origen se encuentra en la esquina superior izquierda de la pantalla o ventana.
  • Las filas con número de orden más bajo están más cerca del borde superior.

Función Ackermann

  • Es una función recursiva con dos argumentos enteros no negativos.

Stack Segment

  • Cuando se invoca una función, se asigna un bloque de memoria en el Stack Segment.
  • Dentro de este bloque, la función crea parámetros, variables locales y comienza la ejecución.
  • El segmento funciona como una pila LIFO: el último dato en llegar es el primero en salir.
  • Se utiliza como soporte interno en la invocación de funciones, llenándose con cada invocación y vaciándose al regresar.
  • Cada instancia recursiva almacena la dirección de retorno y las variables locales en el Stack Segment.
  • A medida que se desarrolla la recursión, el Stack Segment se llena, y se vacía cuando una instancia finaliza.

Factorial

  • Si n = 0, entonces 0! = 1.
  • Si n > 0, entonces n! = n * (n-1)!.

Potencia

  • Si n==0 entonces es igual a 1
  • a * potencia(a, n-1) si n>0

Producto

  • si a == 0 or b == 0 entonces es igual a 0
  • a + producto (a, b-1) si a > 0 y b > 0

Fibonacci

  • Versión iterativa: tiempo proporcional a n (lineal).
  • Versión recursiva: tiempo proporcional a bn (exponencial, para algún b > 1), con un orden de 1.8n.

Algoritmos de Ordenamiento

  • Los algoritmos de ordenamiento simples funcionan bien con arreglos pequeños, pero tienen mal rendimiento con arreglos grandes.

Intercambio Directo (Burbuja/Bubblesort)

  • Se comparan elementos adyacentes en pasadas sucesivas, llevando los mayores al final del arreglo.
  • Una bandera de corte termina el proceso si no hay intercambios en una pasada.

Selección Directa

  • En cada pasada, se determina el menor elemento y se lleva a la casilla pivot.

Inserción Directa

  • Se asume un subconjunto inicial ordenado y se agregan elementos al grupo ordenado en pasadas sucesivas.

Shellsort

  • Mejora la inserción directa armando subconjuntos ordenados con elementos a distancia h > 1, terminando con h = 1.
  • Con h = 1, se convierte en inserción simple, garantizando el orden final.
  • El tiempo de ejecución para el peor caso es O(n1.5).
  • Al usar una serie de incrementos decrecientes, los subconjuntos contendrán elementos similares, sin asegurar una buena organización antes de la última pasada.

Heapsort

  • Encuentra sucesivamente el menor o mayor elemento para llevarlo a su posición final de forma veloz.
  • Es eficiente tanto en el caso promedio como en el peor caso.
  • Arma el heap en el mismo vector sin usar memoria extra.

Análisis de Algoritmos

  • Es la rama de la computación que mide la eficiencia de un algoritmo.
  • Los factores que influyen en la eficiencia son tiempo de ejecución, consumo de memoria, y complejidad del código.

Diferencia entre el Peor Caso y el Caso Promedio

  • El peor caso describe la configuración de datos de entrada más desfavorable.
  • El caso promedio describe una configuración aleatoria de datos.

Notación Big O

  • Muestra una cota superior para el tiempo de ejecución, expresando el rendimiento de un algoritmo.
  • O(1): Tiempo de ejecución constante, sin importar el volumen de datos.
  • O(log(n)): Logarítmico, dividiendo un lote de datos en dos sucesivamente.
  • O(n): Lineal, procesando cada dato una vez.
  • O(nlog(n)): Dividiendo y procesando particiones de datos sin desechar ninguna.
  • O(n2): Cuadrático, combinando dos ciclos de n vueltas cada uno.
  • O(n3): Cúbico, combinando tres ciclos de n repeticiones cada uno.
  • O(2n): Exponencial, explorando combinaciones de soluciones exponencialmente crecientes.

Formas de Crecimiento de las Funciones

  • O(1) < O(log(n)) < O(n) < O(nlog(n)) < O(n2) < O(n3) < O(2n)

Formalización de la Notación Big O

  • Una función polinómica de grado k es de orden nk.
  • logb(n) = O(log(n))

Conteo Exhaustivo, Análisis Asintótico, Orden de Complejidad

  • El conteo exhaustivo determina una expresión rigurosa de operaciones críticas.
  • El análisis asintótico determina el comportamiento general para valores grandes del tamaño del problema.
  • El orden de complejidad "O(g(n))" es un conjunto de funciones que se comportan asintóticamente de la misma forma.

Comportamiento Asintótico de los Algoritmos de Ordenamiento

  • Burbuja: O(n2) (peor caso), O(n) (mejor caso).
  • Selección directa: O(n2) (peor caso).
  • Inserción directa: O(n2) (peor caso).
  • Quicksort: O(nlog(n)) (caso medio), O(n2) (peor caso).
  • Heapsort: O(nlog(n)) (caso medio).
  • Shellsort: O(n1.5).

Otras Notaciones Típicas

  • O (Big O): Cota superior para el tiempo de ejecución.
  • Ω (Omega): Tiempo de ejecución o espacio de memoria ocupado.
  • Θ (Theta): Una función f se comporta de forma similar a múltiplos de otra función g.
  • o (o minúscula o little): Similar a O(), pero considerando solo relaciones de menor estricto.

Notación Big O en Algoritmos de Ordenamiento

  • La notación Big O rescata el término más significativo en la expresión, descartando constantes que podrían no coincidir entre algoritmos.

Características del Algoritmo Shellsort

  • El algoritmo Shellsort es difícil de analizar para determinar su rendimiento en forma matemática.
  • Una implementación es una mejora del algoritmo de Inserción Directa, organizando subconjuntos ordenados con elementos a distancia h > 1 en las primeras fases, terminando con h = 1.

Estructuras de Datos Lineales: Pilas y Colas

Estructuras

  • Nativas las que vienen con el lenguaje
  • Abstractas: no vienen con el lenguaje

Tipo de Estructura

  • Lineal (Pilas y Colas): si cada elemento de esta tiene un único elemento sucesor inmediato (o ninguno si es el último) y también tiene un único elemento antecesor inmediato (o ninguno si es el primero).
  • No Lineales (Árboles y Grafos): si sus elementos pudiesen tener más de un sucesor o antecesor inmediato.

Abstracción

  • Abstracción de Datos: busca captar el conjunto de datos más relevante para representar un tipo abstracto.
  • Abstracción Funcional: buscar identificar el conjunto de procesos relevante para esos datos.

Pilas (Stacks)

  • Estructura lineal donde los elementos se apilan, siendo el último en entrar el primero en salir (LIFO).
  • Ejemplo: procesar datos en orden inverso a su entrada.

Colas (Queues)

  • Estructura lineal donde los elementos se organizan uno detrás del otro, quedando uno al principio, y otro al final.
  • El primer elemento en entrar es el primero en salir (FIFO).
  • Ejemplo: Procesar una secuencia de datos en el mismo orden en el que ingresaron.

Estructuras No Lineales: Árboles Binarios de Búsqueda

  • Un árbol binario es una estructura de datos no lineal que puede estar vacía o contener un nodo raíz.
  • Si un nodo raíz existe, tendrá dos elementos, con estas características:
  • Cada sub-conjunto tiene intersección vacía
  • Los subconjuntos son a su vez árboles binarios, y se designan respectivamente como subárbol izquierdo y subárbol derecho.

Términos Principales en Árboles Binarios

Enlaces/Arcos

  • Referencias, punteros o índices de un arreglo.

Nodo

  • Dado un nodo x:
  • Los dos nodos siguientes a x se llaman hijos de x.
  • El nodo del cual depende x hacia arriba, se dice el padre de x.

Nivel

  • Número de arcos desde la raíz.

Altura

  • Nivel máximo del árbol.

Búsqueda

  • Se realiza una comparación por nivel.
  • En el peor de casos es O(log(n)) si la altura del árbol es O(log(n)).
  • Si es una diagonal de altura n, el tiempo de ejecución es O(n).

Recorrido de Árboles Binarios

Pila

  • Para almacenar en orden LIFO las direcciones de los nodos visitados.

Preorden

  • Cada nodo se visita al llegar por primera vez.
    • Visitar el nodo raíz.
    • Recorrer en Preorden el subárbol izquierdo.
    • Recorrer en Preorden el subárbol derecho.

Entreorden

  • Cada nodo se visita al volverlo desde la izquierda.
    • Recorrer en Entreorden el subárbol izquierdo.
    • Visitar el nodo raíz.
    • Recorrer en Entreorden el subárbol derecho.

Postorden

  • Cada nodo se visita al volverlo desde la derecha.
    • Recorrer en Postorden el subárbol izquierdo.
    • Recorrer en Postorden el subárbol derecho.
    • Visitar el nodo raíz.

Construcción de Árboles

  • Para construir un árbol, se necesitan conocer:
  • Recorrido Preorden y Entreorden.
  • Recorrido Postorden y Entreorden.

Condiciones en el Recorrido Preorden

  • El recorrido será en secuencia ordenada si el árbol es una diagonal con todos los hijos izquierdos nulos.

Árbol Desbalanceado

  • El tiempo de búsqueda en el peor de los casos es O(n).

Árbol Balanceado

  • Su altura es la mínima posible para la cantidad de nodos.

Estructuras No Lineales: Grafos

  • Un Grafo está compuesto por n nodos y m arcos donde un arco une dos vértices.

Componentes de un Grafo

  • Vértices: A, B, C, D, E, F, G, H
  • Arcos: (A, B), (A, D), (A, C), (E, E), (D, E), (E, A), (F, G)

Características de los Grafos

  • Un grafo puede tener subgrafos no unidos entre sí por arcos que los conecten, o nodos aislados (sin arcos incidentes).
  • No es obligatorio que un vértice sea punto de partida o de llegada de algún arco; puede estar aislado.
  • Dos nodos pueden tener varios caminos de distinta longitud, se dicen adyacentes si existe un arco que los une.
  • Si existe un camino de cualquier longitud desde un vértice que lleve de retorno al mismo vértice, entonces el grafo tiene un ciclo, y se denomina grafo cíclico.

Grado de un Nodo

  • Cantidad de arcos incidentes al nodo (arcos que tienen al nodo como partida o como llegada).
  • Entre Grado: cantidad de nodos que coinciden en el nodo de llegada
  • Fuera de grado: cantidad de nodos que coinciden en el nodo de partida.

Tipos de Grafos

Grafo Dirigido

  • Los arcos indican relaciones entre nodos, y el sentido de cada arco indica el nodo de partida y de llegada.

Grafo No Dirigido

  • El arco que conecta dos vértices puede recorrerse indistintamente.

Grafo Ponderado

  • Cada arco tiene asociado un valor, peso o ponderación.

Implementación Matricial de Grafos

Grafo Dirigido

  • Las filas representan los vértices de partida y las columnas los de llegada.

Grafo no dirigido

  • Simétrico: ambos arcos existen (A, B) y (B, A).
  • Reflexivo: todo vértice se relaciona consigo mismo.
  • Transitivo: si existen (x, y) e (y, z) entonces existe (x, z)..

Grafo Ponderado

  • Cada casilla apunta a un objeto que representa un arco, almacenando los atributos necesarios.
  • No es viable almacenar solo un entero por cada casillero o si se almacena directamente el pedo del arco, un problema posible es el de la ambigüedad del cero, ya que no es posible distinguir si el cero es el peso de un arco o que el indicador de que no exista el arco

Algoritmo de Quicksort

Creador

  • Charles Antony Richard Hoare.

Características

  • Quicksort acelera el cambio de posición de elementos menores y mayores, mejorando el algoritmo Bubblesort.
  • Quicksort requiere una función de comparación para determinar el orden de los elementos.

Caso Promedio

  • La altura del árbol de invocaciones recursivas es log(n).
  • El tiempo de ejecución es O(nlog(n)).

Peor Caso

  • La altura del árbol de invocaciones recursivas es n.
  • El tiempo de ejecución es O(n2).
  • Ocurre cuando el arreglo de entrada tiene elementos que hacen que el pivot sea siempre el menor o el mayor de la partición.

Recomendación

  • Obtener el pivot por la mediana de tres para evitar el peor caso.

Pivot en Quicksort

  • Elegir el primer elemento como pivot es mala idea porque aumenta el riesgo de caer en el peor caso si el arreglo esta ya ordenados o casi ordenados.

Calcular Mediana entre el primero, el central y el último elemento de una partición.

Esquema Esencial de un Algoritmo Divide y Vencerás

  • Cada elemento se expresa en notación O(1).

Estrategias de Resolución de Problemas

  • Técnicas para encontrar la solución a un problema.

Fuerza Bruta

  • Aplica ideas intuitivas y directas, produciendo algoritmos de mal rendimiento.
  • El problema del Viajante es 𝑂(𝑛!), ordenamiento por Selección Directa.

Recursión

  • Un proceso se invoca a sí mismo.
  • Útil en generación de imágenes y gráficos fractales.
  • Recorrido y procesamiento de estructuras de datos no lineales como árboles y grafos.

Backtracking (Vuelta Atrás)

  • Base recursiva que implementa soluciones de prueba y error.
  • Más eficiente que la Fuerza Bruta, eliminando caminos incorrectos.
  • Problema de las Ocho Reinas y juegos de optimización combinatoria.

Algoritmos Ávidos o Devoradores (Greedy Algorithms)

  • Aplica una regla intuitivamente válida en cada paso.
  • Problema del árbol de expansión mínimo de un grafo y algoritmo de Dijkstra.
  • Problema del cambio de monedas requiriendo la moneda de 1 centavo.

Divide y Vencerás

  • El conjunto de datos se divide en subconjuntos del mismo tamaño y se aplica recursión.
  • Quicksort y Mergesort para ordenamiento de arreglos.

Programación Dinámica

  • Calcula y almacena los resultados de subproblemas para re-usarlos en el cálculo del problema mayor.
  • útl en problemas de alineación de secuencias.

Problema de las Ocho Reinas: Diagonales

  • Diagonales normales e inversas.
  • La suma es constante en diagonales inversas entre el número de columna y el número de fila.
  • La cantidad total de diagonales de la matriz es 30.

Estructuras para representar las Reinas

qr (queens in row)

  • Con 8 casilleros
  • qr[fil] = True indicará que la fila fil está libre de reinas

qid (de queens on inverse diagonal)

  • Con 15 casilleros
  • qid(de queens on inverse) = True indicará que la diagonal inversa di está libre de reinas.

qnd (de queens on normal diagonal)

  • Con 15 casilleros
  • qnd(of queens on normal diagonal)= True indicará que la diagonal normal dn está libre de reinas

Diagonales Normales

  • El resto de los elementos en la diagonal es constante = [-7..7].
  • Se representan con un arreglo qnd de 15 elementos
  • qnd [(column - row) + 7(

Diagonales Inversas

  • La suma de los elementos siempre es constante.
  • Entre los intervalos [0..14].
  • qnd [(column - row) + 14(

Soluciones Incorrectas:

  • Cuando NO tienen que enfrentarse la Reinas.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

More Like This

Recursion Quiz
9 questions

Recursion Quiz

VigilantRooster avatar
VigilantRooster
Recursion in Java
5 questions
Understanding Recursiveness
29 questions

Understanding Recursiveness

DiversifiedLiberty7317 avatar
DiversifiedLiberty7317
Use Quizgecko on...
Browser
Browser