Sunteți pe pagina 1din 5

Un algoritmo recursivo es un algoritmo que expresa la solución de un problema en términos

de una llamada a sí mismo. La llamada a sí mismo se conoce como recursividad. No debe


generar una secuencia infinita de llamadas así mismo, debe existir una "salida" de la secuencia
de recursividad. Cada llamada recurrente se debería definir sobre un problema de menor
complejidad.

La Complejidad Computacional: estudia la eficiencia de los algoritmos estableciendo su


efectividad de acuerdo al tiempo de corrida y al espacio requerido en la computadora o
almacenamiento de datos, ayudando a evaluar la viabilidad de la implementación práctica en
tiempo y costo. Para ello considera los dos tipos de recursos requeridos durante el cómputo
para resolver un problema:

 Tiempo: números de pasos base de ejecución de un algoritmo para resolver un


problema.
 Espacio: cantidad de memoria utilizada para resolver un problema.

La complejidad de un algoritmo se expresa como función del tamaño de la entrada del


problema, n. Se refiere al ratio de crecimiento de los recursos con respecto a ‘n’.

Notación asintótica (O grande): permite definir la tasa o valores de crecimiento para valores
de una función. También permite determinar la cantidad de iteraciones que va a realizar la
computadora en algún caso.

Un Tipo de dato abstracto es un conjunto de datos u objetos al cual se le asocian operaciones.


El TDA provee de una interfaz con la cual es posible realizar las operaciones permitidas,
abstrayéndose de la manera en como estén implementadas dichas operaciones. Esto quiere
decir que un mismo TDA puede ser implementado utilizando distintas estructuras de datos y
proveer la misma funcionalidad.

Pila: Una pila es una estructura de datos (último en entrar, primero en salir) que permite
almacenar y recuperar datos. Para el manejo de los datos se cuenta con dos operaciones
básicas: apilar, que coloca un objeto en la pila, y su operación inversa, desapilar, que retira el
último elemento apilado. En cada momento solo se tiene acceso a la parte superior de la pila,
es decir, al tope.

Cola: Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos
en la que la operación de inserción se realiza por un extremo (final de la cola) y la operación de
extracción por el otro (frente de la cola). El primer elemento en entrar será también el primero
en salir.

En las colas circulares existe un apuntador desde el último elemento al primero de la cola. La
cola está llena solo cuando el índice del tamaño (índice del final) y el índice del frente son
iguales, en otro caso la cola aún tiene espacio para almacenar más datos.

Lista enlazada: Una lista enlazada la constituye una colección lineal de elementos, llamados
nodos, donde el orden de los mismos se establece mediante punteros. Cada nodo se divide en
dos partes: una primera que contiene la información asociada al elemento, y una segunda
parte, llamada campo al siguiente puntero, que contiene la dirección del siguiente nodo de la
lista.

En las listas enlazadas se puede acceder a una zona de memoria de forma aleatoria, ya que
cada trozo de información lleva un enlace al siguiente elemento. Las listas son dinámicas,
podemos almacenar tantos elementos como necesitemos, siempre que haya suficiente espacio
en memoria.

Las listas pueden ser simplemente enlazadas o doblemente enlazadas, las simplemente
enlazadas contienen un enlace al elemento siguiente, las doblemente enlazadas tanto al
siguiente elemento como al elemento anterior dela lista.

Algoritmo de siklossy: propone almacenar en un mismo campo de dirección un valor que


permita recorrer la estructura en ambos sentidos, basándose en la suma del or exclusivo.
Permite la posibilidad de minimizar el espacio ocupado, utilizando un único campo link
(siguiente), sin aumentar el tiempo de acceso.

Árbol: Los Árboles se caracterizan por almacenar sus nodos en forma jerárquica. Un Árbol
consiste en un nodo (r, denominado nodo raiz) y una lista o conjunto de subárboles (A1, A2, Ak).

 El camino en un árbol es la secuencia de nodos del árbol, que cumpla que cada nodo
es padre del siguiente en la secuencia.
 La profundidad o altura de un nodo en un árbol, es la longitud del camino más largo
que comienza en el nodo y termina en una hoja. (La altura del árbol es la altura de la
raíz). Nivel + 1.
 El nivel es la longitud del camino (único) que comienza en la raíz y termina en el nodo.
(El nivel de un nodo es su distancia a la raíz. Raíz nivel 0)

Los arboles n-arios son aquellos arboles donde el número máximo de hijos por nodo es de N.
Los arboles binarios se caracterizan porque cada nodo solo puede tener máximo 2 hijos
(izquierdo y derecho).

Tipos de búsquedas:

 En profundidad:
o Preorden: El recorrido inicia en la Raíz y luego se recorre en preorden cada uno de
los sub-árboles de izquierda a derecha.
o Postorden: Se recorre en postorden cada uno de los sub-árboles y al final se
recorre la raíz.

o Inorden: Se recorre en inorden el primer sub-árbol, luego se recorre la raíz y al


final se recorre en inorden los demás sub-árboles.

 En amplitud: Se recorre primero la raíz, luego se recorren los demás nodos ordenados
por el nivel al que pertenecen en orden de Izquierda a derecha.

Árboles AVL: Imponen que para todo nodo la diferencia de altura entre los subárboles
izquierdo y derecho no sea mayor que uno.

Transformada de Knuth: es una operación que permite transformar un árbol n-ario a un árbol
binario. La raíz queda igual, después, arrancando de la raíz, cada hijo de la izquierda de los
nodos pasa a ser su hijo izquierdo en el árbol binario y su hermano derecho pasa a ser su hijo
derecho.

Grafo: son un conjunto de vértices o nodos unidos por enlaces llamados aristas o arcos, que
permiten representar relaciones binarias entre elementos de un conjunto. Los grafos son un
conjunto de puntos, de los cuales algún par de ellos está conectado por unas líneas. Si estas
líneas son flechas, hablaremos de grafo dirigido (digrafo), mientras que si son simples líneas
estamos ante un grafo no dirigido.
 Vértice: (también llamado “nodo”) puede tener un nombre, que llamaremos “clave”. Y
también puede tener información adicional.
 Arista: (también llamada “arco”) conecta dos vértices para mostrar que hay una
relación entre ellos. Las aristas pueden ser unidireccionales o bidireccionales. Si las
aristas de un grafo son todas unidireccionales, decimos que el grafo es un grafo
dirigido.
 Ruta: (también llamado “camino”) es una secuencia de vértices que están conectados
por las aristas. Conjunto de vértices que hay que recorrer para llegar desde un nodo
origen hasta un nodo destino.

Tipos de recorridos:

 En profundidad, que consiste en alejarse todo lo posible del nodo origen para después
empezar a visitar los nodos restantes a la vuelta.
 A lo ancho (o por nivel), que consiste en visitar primero los nodos vecinos del origen,
luego los vecinos de éstos, y así sucesivamente.

Tablas Hash

Las tablas hash son estructuras de datos que se utilizan para almacenar un número elevado de
datos sobre los que se necesitan operaciones de búsqueda e inserción muy eficientes. Una
tabla hash almacena un conjunto de pares “(clave,valor)”. La clave es única para cada
elemento de la tabla y es el dato que se utiliza para buscar un determinado valor.

 ¿Qué es? Estructura de datos que asocia claves con valores.


 ¿Cuándo usarlas? Depende. Búsqueda e inserción.
 ¿Cómo usarlas? Con una clave.
 ¿Qué estructuras usar? En principio es estática.
 ¿Para qué se usa la función hash normalmente ahora? Encriptar. Encriptación.

Algoritmos voraces:

 Un algoritmo voraz se aplica sobre un conjunto de candidatos y da por resultado un


conjunto solución que puede ser vacío. Un algoritmo voraz no da por resultado la
solución más óptima.
 Para ir eligiendo los elementos del conjunto solución se usa una función de selección.
Tras cada paso hay que ver si el conjunto solución es completable con ese elemento
que fue agregado, si es así el elemento se agrega a la solución, sino se descarta.

Montículo (heap):

 Es una estructura de datos basada en los árboles que es esencialmente un árbol casi
completo que satisface la propiedad de montículo (si P es un nodo padre de H,
entonces el valor de P es mayor o igual en el caso de un max heap o menor o igual en
el caso de un min heap que el valor de H.
 Heapsort: método de ordenamiento que divide la entrada en 2 regiones una ordenada
y la otra desordenada) e iterativamente va achicando la región desordenada. Mejor-
peor caso O(n log n).
Quicksort: se basa en la técnica de "divide y vencerás" por la que en cada recursión, el
problema se divide en subproblemas de menor tamaño y se resuelven por separado para
ser unidos de nuevo una vez resueltos. Mejor caso O(n log n) – Peor caso O(n2).

1. Se elige el pivote.
2. Resituar los demás elementos de la lista a cada lado del pivote, de manera que a
un lado queden todos los menores que él, y al otro los mayores. La lista queda
separada en dos sublistas.
3. Repetir este proceso de forma recursiva para cada sublista mientras éstas
contengan más de un elemento.
4. Al final la lista queda ordenada.

: es lo que tomo

: no me acuerdo si tomo

S-ar putea să vă placă și