Algoritmos y Estructuras de Datos. Repositorio de archivos C++

El archivo [aed.zip] contiene todos los archivos fuente, compactados en un solo archivo con ``zip''. El archivo se puede abrir con unzip (Linux) (u otro utilitario zip-compatible).

apply-map.cpp
Escribir una función void apply_map(list<int> &L, map<int,int> &M, list<int> &ML) que, dada una lista L y una correspondencia M retorna por ML una lista con los resultados de aplicar M a los elementos de L. Si algún elemento de L no esta en el dominio de M, entonces el elemento correspondiente de ML no es incluido. Por ejemplo, si L = (1,2,3,4,5,6,7,1,2,3) y M= {(1,2),(2,3),(3,4),(4,5),(7,8)}, entonces, después de hacer apply_map(L,M,ML), debe quedar ML = {(2,3,4,5,8,2,3,4)}. [Tomado en el 1er parcial del 20/4/2006]. keywords: lista, correspondencia
ascendente.cpp
Escribir una función int ascendente1 (list <int> &L, list<list<int> > &LL) que, dada una lista L, genera una lista de listas LL de tal forma de que cada sublista es ascendente. [Tomado en el Parcial 1 20-ABR-2006].

Escribir una función int ascendente2 (list <int> &L, vector < list<int> > &VL) que, dada una lista L, genera un vector de listas VL de tal forma de que cada sublista es ascendente. [Tomado en Examen Final 29-JUL-2004].

keywords: lista

btree.h
Utilitarios varios. keywords: arbol binario
cadena_pq.cpp
Determinar si una cadena z es de la forma z = x y, donde y es la cadena inversa (o espejo) de la cadena x, ignorando los espacios en blanco. Emplear una cola y una pila auxiliares. keywords: lista, pila, cola
chunk-revert.cpp
Escribir una función void chunk_revert(list<int> &L,int n); que dada una lista L y un entero n, invierte los elementos de la lista tomados de a n. Si la longitud de la lista no es múltiplo de n entonces se invierte el resto también. Por ejemplo, si L={1,3,2,5,4,6,2,7} entonces después de hacer chunk_revert(L,3) debe quedar L={2,3,1,6,4,5,7,2}. Restricciones: Usar a lo sumo una estructura auxiliar. (En tal caso debe ser lista, pila o cola). [Tomado en el 1er parcial 21/4/2005]. keywords: lista
circulo.cpp
Coloquemos n números enteros positivos alrededor de una circunferencia inicial. Construyamos ahora sucesivas circunferencias concéntricas hacia el exterior, de igual cantidad de elementos, los cuales son obtenidos restando (en valor absoluto) pares consecutivos de la última circunferencia exterior. Entonces, dada una lista L = [ x_0, x_1, ..., x_{n-1} ] de n números enteros que representan los valores iniciales alrededor de la circunferencia inicial, escribir una función int circulo(list<int> &L); que ejecuta esta tarea y devuelva además el número de circunferencias iteradas p [Tomado en el 1er parcial del 21/4/2005]. keywords: lista
comptree.cpp
Se define una relación de orden entre árboles binarios de enteros de la siguiente forma: A<B si a<b, o bien (a=b y Ai < Bi), o bien (a=b y Ai=Bi y Ad<Bd), donde a, b son las raíces y Ai, Ad, Bi, Bd son los subárboles izquierdos y derechos de A y B. Consigna: Escribir una función bool es_menor(tree<int> &A,tree<int> &B) que retorna verdadero si A < B. [Tomado en el 2do parcial 26/5/2005]. keywords: arbol binario
concatena.cpp
Escriba procedimientos para concatenanar: a) dos listas L1 y L2 usando insert; b) un vector VL de n listas usando insert; c) una lista LL de n sublistas usando insert ``básico''; d) una lista LL de n sublistas usando una opción de insert; e) una lista LL de n sublistas usando splice. keywords: lista
conjunto1.cpp
Diversas operaciones con conjuntos: purge : purga elementos repetidos de una lista usando un conjunto como estructura auxiliar y con una implementacion tal que sea O (n). set_intersection : interseccion de conjuntos; prints : imprime los elementos de un conjunto. Keywords: conjunto, lista
conjunto2.cpp
Diversas operaciones con conjuntos: disjuntos: verifica si una serie de conjuntos son disjuntos entre si. cubre_todo: verifica si un dado conjunto W cubre incluye a toda una serie de conjuntos Si. todos_pares: verifica si todos los elementos de un conjunto son pares. Keywords: conjunto, lista
conjunto3.cpp
Diversas operaciones con conjuntos: flat: Escribir una funcion predicado bool flat(vector< set<int> > &sw, int n); que retorna verdadero si cada par de enteros (j,k) con 0<=j,k<n esta contenido en al menos uno de los conjunto en sw. es-neg: Escribir una funcion predicado bool es_neg(set<int> &A,set<int> &B); que retorna verdadero si el conjunto B contiene exactamente los mismos elementos que A, pero cambiados de signo. en-todos: Escribir una funcion predicado bool en_todos(vector< set<int> > &v) que retorna verdadero si existe al menos un elemento que pertenece a todos los conjuntos v[j]. mediana: Escribir una funcion int mediana(list<int> &L) que retorna la mediana de los valores contenidos en la lista L. [Tomados en el 3er parcial del 24-jun-2004] Keywords: conjunto
contenido.cpp
Escribir una función predicado bool contenido(btree<int> &A, btree<int> &B); que retorna verdadero si la estructura del árbol binario A esta ``contenido'' dentro de la de B y las etiquetas correspondientes de A son menores que las de B+. [Tomado en el examen 2do parcial del 27/5/2004]. keywords: arbol binario
contnprof.cpp
Escribir una función int cant_nodos_prof(btree<int> &A, int prof); que retorna el número de nodos de una árbol binario A que están a profundidad prof o mayor.
countif.cpp
Escribir una función int count_if(tree<int> &T,bool (*pred)(int x)); que retorna el número de nodos del árbol T que satisfacen el predicado pred. Por ejemplo, si T=(1 2 (3 5 7 6) 4), entonces count_if(T,odd) debe retornar 4. Escribir el predicado bool odd(int x) que determina si un entero es impar.

Escribir una función void list_if(tree<int> &T,list<int> &L,bool (*pred)(int x)); que retorna en L la lista de valores nodales en orden previo de un árbol ordenado orientado T que satisfacen el predicado pred. Por ejemplo, si T=(1 (-2 7 (8 -7) (3 -5 -6))), entonces después de list_if(T,L,positive), debe quedar L={1,7,8,3}. Escribir el predicado bool positive(int x) que determina si un entero es mayor que 0. [Tomado en el 2do parcial 26/5/2005]. keywords: arbol orientado

cum_sum_cola.cpp
Escribir una función void cum_sum_cola (queue<int> &Q) que modifica a la cola Q dejando la suma acumulada de sus elementos, es decir, si los elementos de Q antes de llamar a cum_sum_cola(Q) son Q = (a_0,a_1,...,a_{n-1}), entonces después de llamar a cum_sum_cola(Q) debe quedar Q = (a_0, a_0 a_1, ..., a_0 + a_1 + ... + a_n)+. [Tomado en el Primer Parcial 27-ABR-2004] keywords: cola
cum_sum_pila.cpp
Escribir una función void cum_sum_pila (queue<int> &S) que modifica a la pila S dejando la suma acumulada de sus elementos, es decir, si los elementos de S antes de llamar a cum_sum_pila(S) son S = (a_0,a_1,...,a_{n-1}), entonces después de llamar a cum_sum_pila(S) debe quedar S = (a_0, a_0 a_1, ..., a_0 + a_1 + ... + a_n)+. [Tomado en el Primer Parcial 27-ABR-2004] keywords: pila
diffsym.cpp
Dada una lista de conjuntos de enteros list< set<int> > l escribir una función void diffsym(list< set<int> > &L, set<int> &ad) que retorna en ad el conjunto de los elementos que pertenecen a uno y sólo uno de los conjuntos de L. Por ejemplo, si L = ({1,2,3},{2,4,5},{4,6}) entonces ad debe ser {1,3,5,6}. Notar que si el número de conjuntos en l es 2 y los llamamos A y B, entonces debe retornar ad = (A-B) union (B-A). [Tomado en el 3er parcial 23/6/2005]. keywords: conjunto
elimina_valor.cpp
Escribir una función void elimina_valor(queue<int> &Q, int n);} que elimina todos las ocurrencias del valor n en la cola Q. Por ejemplo, si Q = { 1,3,5,4,2,3,7,3,5 } y n=3, después de elimina_valor(Q,3) debe quedar Q = {1,5,4,2,7,5}. Sugerencia: usar una estructura auxiliar lista o cola. Restricciones: el algoritmo debe tener un tiempo de ejecución O(n), donde n es el número de elementos en la cola original. [Tomado en Exámen Final 08-JUL-2004] keywords: cola
es_biyectiva.cpp
Escribir una función bool es_biyectiva (map <int,int> &A) que retorna true si la misma representa una función biyectiva, esto es, si la correspondencia A describe una relación uno a uno. Por ejemplo, supongamos el conjunto X = (0,1,2,3,4,5) y consideremos las correspondencias A1 = { (0,2), (1,5), (2,0), (3,3), (4,4), (5,1) } y A2 = { (0,2), (1,1), (2,0), (3,3), (4,3), (5,1) }. En el primer caso, cada elemento (de 0 a 5) tiene preimagen, por lo que es_biyectiva (A1) debe retornar true. En cambio, en el segundo caso, los elementos 4 y 5 no tienen preimagen, por lo que es_biyectiva (A2) debe retornar false. keywords: correspondencia
espermut.cpp
Una correspondencia es una permutacion si el conjunto de los elementos del dominio (las claves) es igual al del contradominio (los valores). Consigna: escribir una funcion predicado bool es_permutacion(map<int,int> &M) que retorna true si M es una permutacion y false si no lo es. [Tomado en Primer Parcial 27-SET-2007]. keywords: correspondencia
graphlayers.cpp
Dado un grafo vector<set<int>> G y un vertice de partida x se desea determinar la estructuras de capas de vecinos de G alrededor de x definida de la siguiente forma: la capa 0 es {x}, la capa 1 son los vecinos de x. A partir de alli la capa n>=2 esta formada por los vecinos de los nodos de la capa n-1 (es decir la adyacencia de la capa) pero que no estan en las capas anteriores (en realidad basta con verificar que no esten en las capas n-1 ni #n-2#). [Tomado en tercer parcial 22-NOV-2007]. keywords: conjunto
graphs1.cpp
Ejercicios usando conjuntos en grafos. keywords: conjunto, correspondencia
incall.cpp
Dados n conjuntos A_0, A_1, ... A_{n-1} determinar si alguno de ellos (digamos A_j ) incluye a todos los otros. Es decir A_j\subset A_k para todo k. En ese caso, retornar el indice j, si no retornar -1. int includes_all(vector< set<int> > &setv); [Tomado en tercer parcial 22-NOV-2007]. keywords: conjunto
incluido.cpp
Escribir un predicado bool incluido(set<int> &A, set<int> &B); que retorna verdadero si y solo si A esta incluido en B. [Tomado en el 3er parcial 23/6/2005]. keywords: conjunto
intercala.cpp
Escriba procedimientos para intercalar (merge): (i) dos listas ordenadas L1 y L2 en una nueva lista L; (ii) un vector VL de n listas ordenadas como nueva lista L. Notar que intercalar (merge) implica en ambos casos que la nueva lista L debe resultar también ordenada. keywords: lista
inverse.cpp
Dada una correspondencia M y asumiendo que es invertible o biunivoca (esto es, todos los valores del contradominio son distintos), la correspondencia `inversa' N es aquella tal que, si y=M[x], entonces x=N[y]. Por ejemplo, si M={(0,1),(1,2),(2,0)}, entonces la inversa es N={(1,0),(2,1,(0,2))}. Consigna: Escribir una función bool inverse(map<int,int> &M,map<int,int> &N) tal que, si M es invertible, entonces retorna true y N es su inversa. En caso contrario retorna falso y N es la correspondencia `vacia' (sin asignaciones) [Tomado en el 1er parcial del 20/4/2006]. keywords: lista, correspondencia
ismapset.cpp
Escribir una función predicado bool is_mapped_set(set<int> &A,set<int> &B,int (*mapfun)(int)); que retorna verdadero si el conjunto B contiene los elementos de A, mapeados via la funcion mapfun. [Tomado en recuperatorio 29-NOV-2007]. keywords: conjunto
josephus.cpp
Resolución del problema de Josephus usando la clase <list> de las STL. keywords: lista
junta.cpp
Escribir una función void junta (list <int> &L, int n) que, dada una lista L, agrupa de a n elementos dejando su suma IN PLACE. Por ejemplo, si la lista L contiene L=(1,3,2,4,5,2,2,3,5,7,4,3,2,2), entonces depués de junta (L,3) debe quedar L=(6,11,10,14,4). Prestar atención a no usar posiciones inválidas después de una supresión. El algoritmo debe tener un tiempo de ejecución O (m), donde m es el número de elementos en la lista original. [Tomado en el examen final del 1/8/2002] keywords: lista
lexico_stack.cpp
Escribir una función #void lexico_stack(int n);# que genera todas las subsecuencias ordenadas de la secuencia (1..n). Por ejemplo, si #n=4# debe generar (1), (12), (123), (124), (13), (134), (14) (2), (23), (234) (24), (3), (34) y (4). [Tomado en el 1er parcial del 21/4/2005]. keywords: pila
lista_cte.cpp
Dada una lista L de enteros escribir una función bool es_constante (list <int> &L) que retorna true solo si todos sus elementos son iguales. Hacerlo con (i) sólo operaciones del TAD lista y (ii) mediante una correspondencia. Escriba un procedimiento void imprime (map <int,int> &M); para imprimir una correspondencia. keywords: lista, correspondencia
listarbb.cpp
Listado de árboles binarios en diferentes ordenes. Keywords: arbol binario
listarbo.cpp
Listado de árboles orientados en diferentes ordenes. keywords: arbol orientado
listd.h
Clase de listas doblemente enlazadas con punteros. keywords: lista
mapprepost.cpp
Escribir una función void map_pre_post(tree<int> &T,list<int> &L, int (*fpre)(int),int (*fpost)(int)) que lista los valores nodales del árbol ordenado orientado T en una mezcla de orden previo y posterior, donde en orden previo se listan los valores nodales aplicandoles fpre() y en orden posterior los fpost(). Por ejemplo, si T=(1 3 (5 6 7 8)), f(x)=x y g(x)=x1000+, entonces map_pre_post(T,L,f,g) debe dar L=(1,3,1003,5,6,1006,7,1007,8,1008,1005,1001). [Tomado en el recup 30/6/2005]. keywords: arbol orientado, lista
matrices.cpp
Multiplicar cuatro matrices de números reales M1 M2 M3 M4, donde M1 tiene 10 filas y 20 columnas, M2 es de 20 por 50, M3 es de 50 por 1 y M4 es de 1 por 100. Asuma que la multiplicación de una matriz A (p,q) por otra B (q,r) requiere z = p q r operaciones escalares (que es el número de operaciones requerido por el algoritmo de multiplicación de matrices). Encuentre un orden óptimo en que se deben multiplicar las matrices para minimizar el número total de operaciones escalares. Como podria encontrarlo si hay una cantidad arbitraria de matrices de dimension arbitraria ? keywords: algoritmos
maxcota_bo.cpp
Escribir una función int maxcota (tree <int> & t, node_t n, const int & cota) que retorna el máximo de las etiquetas de un árbol ordenado orientado tales que son menores o iguales que la cota dada. Por ejemplo, si las etiquetas del árbol A son (1,3,7,4,2,10,13) y cota=8, entonces maxcota (raiz (A), A, 8) debe retornar 7. keywords: arbol orientado
nilpot.cpp
Dada una correspondencia M tal que el conjunto de sus valores es igual al conjunto de sus claves, encontrar el índice nilpotente, de la misma, es decir el número de veces n que hay que componerla consigo misma hasta llegar a la identidad, es decir M^n = I. Consigna: Escribir una función int nilpot(map<int,int> &M); que dada una correspondencia M retorna el mínimo entero n tal que M^n=I. [Tomado en el 1er parcial 21/4/2005]. keywords: correspondencia
open_hash_set.cpp
Diccionarios con tablas de dispersion abierta: dado el archivo de cabecera hash_set.h, escriba el correspondiente archivo open_hash_set.cpp con la implementación de las funciones indicadas a continuación, (i) Sencillas: erase (iterator_t p), clear (), size (); (ii) Más elaboradas: insert (const key_t & x); find (const key_t & x); erase (const key_t & x). Keywords: conjunto, diccionario
orden_nivel.cpp
El listado en orden de nivel de los nodos de un árbol lista primero la raiz, luego todos los nodos de profundidad 1, después todos los de profundidad 2, y asi sucesivamente. Los nodos que estén en la misma profundidad se listan en orden de izquierda a derecha. Escribir una función void orden_de_nivel (tree <int> &t) para listar los nodos de un árbol en orden de nivel. keywords: arbol orientado
ordenag.cpp
Escribir una función void ordenag (list <int> &l, int m) que, dada una lista l, va ordenando sus elementos de a grupos de m elementos. Por ejemplo si m=5, entonces ordenag ordena los primeros 5 elementos entre si, despues los siguientes 5 elementos, y asi siguiendo. Si la longitud n de la lista no es un múltiplo de m, entonces los últimos n mod m elementos también deben ser ordenados entre si. Por ejemplo, si l = (10 1 15 7 2 19 15 16 11 15 9 13 3 7 6 12 1), entonces después de ordenag (5) debemos tener l = (1 2 7 10 15 11 15 15 16 19 3 6 7 9 13 1 12). [Tomado en el examen final del 5-Dic-2002]. keywords: lista
ordnodo.cpp
Escribir una función predicado bool ordnodo(tree<int> &A); que verifica si cada secuencia de hermanos del subárbol del nodo n (perteneciente al árbol ordenado orientado A están ordenadas entre sí, de izquierda a derecha. Por ejemplo, para el árbol (3 5 (6 1 3) (7 4 5)) debería retornar true, mientras que para (3 9 (6 1 3) (7 4 2)) debería retornar false, ya que las secuencias de hermanos (9 6 7) y (4 2) NO están ordenados. Se sugiere el siguiente algoritmo: para un dado nodo retornar false si: 1) sus hijos no estan ordenados o 2) algunos de sus hijos contiene en su subárbol una secuencia de hermanos no ordenada. (recursividad). Caso contrario retorna verdadero. [Tomado en el final del 28/7/2005]. keywords: arbol orientado
parcord.cpp
Recordemos que un árbol es parcialmente ordenado si dados dos nodos m, n tal que m es hijo de n, entonces el valor de m es mayor o igual al de n. Consigna: Escribir un predicado bool es_parcialmente_ordenado(tree<int> &T,bool (*comp)(int,int), que verifica si el árbol ordenado orientado T es parcialmente ordenado con respecto a la función de comparación comp(). [Tomado en el examen final 7/7/2005]. keywords: arbol orientado
parent.cpp
Control de paréntesis en una expresión algebraica usando TAD-PILA de caracteres. Por parentización en una expresión algebraica consideramos únicamente los simbolos: paréntisis, corchetes y llaves. keywords: pila
parimpa.cpp
Escribir una función void encolar_trabajo (queue <int> &par, queue <int> &impar, int job) que, dado un código de trabajo n lo pone o bien en la cola par, o bien en la cola impar, dependiendo del número job. Escribir una función int siguiente_trabajo (queue <int> &par, queue <int> &impar) que obtiene el siguiente trabajo a procesar, dando mayor prioridad a la cola par. keywords: cola
particiona.cpp
Usando las operaciones del TAD lista, escribir una función void particiona (list<int> &L, int a) la cual, dada una lista de enteros L, reemplace aquellos que son mayores que a por una sucesión de elementos menores o iguales que a pero manteniendo la suma total constante. [Ejercicio tomado en el Exámen Final del 05/07/01] keywords: lista
print_back.cpp
Escriba una función void print_back (list<int> & L, list <int> :: iterator p) que, en forma recursiva, imprima una lista en sentido inverso, es decir, desde el final al principio de la lista. Se le da como dato el procedimiento a la primera posición de la lista. [Ejercicio 3 del final del 14/02/2002] keywords: lista
propsubset.cpp
Dada una lista de conjuntos list< set<int> > L, escribir una función predicado bool proper_subset(list< set<int> > &L), que determina si los conjuntos de la lista L son subconjuntos propios en forma consecutiva. Es decir, si L = (A_0, A_1, ...., A_{n-1}), determinar si A_j es subconjunto propio de A_{j1}+, para j=0,...,n-2. [Tomado en el examen final 7/7/2005]. keywords: conjunto
ralea.cpp
Usando las operaciones del TAD lista, escribir una función void random_shuffle (list <int> &L) que, dada una lista de enteros L, reordena sus elementos en forma aleatoria. Se sugiere el siguiente algoritmo: usando una lista auxiliar Q se van generando números enteros desde 0 a length (L) - 1. Se extrae el elemento j-ésimo de l y se inserta en Q. Finalmente, se vuelven a pasar todos los elementos de la cola Q a la lista L. [Ejercicio tomado en el Exámen Final del 05/07/01] keywords: lista
reemplaza.cpp
Dada una lista de enteros L y dos listas SEQ y REEMP escribir una función void reemplaza (list<int> &L, list<int> &SEQ, list<int> &REEMP) que busca todas las secuencias de SEQ en L y las reemplaza por REEMP. Por ejemplo, si L=(1 2 3 4 5 1 2 3 4 5 1 2 3 4 5), SEQ=(4 5 1) y REEMP=(9 7 3), entonces despues de llamar a reemplaza debe quedar L=(1 2 3 9 7 3 2 3 9 7 3 2 3 4 5). Este procedimiento tiene un efecto equivalente a la función reemplazar de los editores de texto. [Tomado el 1er parcial, 16 abril 2002] keywords: lista
refina.cpp
(a) Escriba una función void refina (list<double> &L, double delta) tal que dada una lista inicial de reales clasificados de menor a mayor L, refina inserta elementos entre los de L, de tal modo que la diferencia máxima entre elementos de la lista final sea menor o igual que delta; (b) Escriba una función void desrefina (list<double> &L, double delta) tal que dada una lista inicial de reales clasificados de menor a mayor L, desrefina suprime elementos de L, de tal modo que la diferencia minima entre elementos de la lista final sea mayor o igual que delta. keywords: lista
rejunta.cpp
Usando las operaciones del TAD lista, escribir una función void rejunta (list<int> &L, int A) que, dada una lista de enteros L, agrupe elementos de tal manera que en la lista queden solo elementos mayores o iguales que A. El algoritmo recorre la lista y, cuando encuentra un elemento menor, empieza a agrupar el elemento con los siguientes hasta llegar a A o hasta que se acabe la lista. Por ejemplo, si L=[3,4,2,4,1,4,4,3,2,2,4,1,4,1,4,4,1,4,4,2], entonces rejunta (L,10) da L=[13,12,13,10,10]. En la lista final NO deben quedar elementos menores que A salvo, eventualmente, el último. [Ejercicio tomado en el Exámen Final del 05/07/01] keywords: lista
rotacion.cpp
Escribir una función void rotacion (queue <int> &C), la cual saca una cierta cantidad de enteros del frente de la cola C y los vuelve a insertar en fin de la misma, de tal manera que quede en el frente de cola un número par. Por ejemplo, si C = [1, 3, 5, 2, 4] entonces, después de rotacion (C) , debe quedar C = [2, 4, 1, 3, 5]. Ejercicio tomado en el 1er parcial, 16/04/02. keywords: cola
set_vector_bit.h
Dado el siguiente archivo de cabecera set.h escriba el correspondiente archivo set.cpp con la implementación de las funciones indicadas a continuación: (i) Sencillas: end (), erase (iterator_t p), clear (), retrieve (iterator_t p); (ii) Más elaboradas: size (), insert (const elem_t & x), find (const elem_t & x), erase (const elem_t & x); (iii) Binarias: set_union (set &A,set &B, set &C), set_intersection (set &A,set &B,set &C), set_difference (set &A,set &B,set &C). Nota: N es la cantidad de elementos del conjunto universal, asuma que es una variable global ya definida. Keywords: conjunto
sorted_list1.cpp
Escriba procedimientos para insertar, suprimir y buscar un elemento en una lista ordenada L. Versión sin funciones genéricas (comparar con sorted_list2.cpp y sorted_list3.cpp). keywords: lista
sorted_list2.cpp
Escriba procedimientos para insertar, suprimir y buscar un elemento en una lista ordenada L. Versión únicamente con funciones genéricas (comparar con sorted_list1.cpp y sorted_list3.cpp). keywords: lista
sorted_list3.cpp
Escriba procedimientos para insertar, suprimir y buscar un elemento en una lista ordenada L. Versión mediante una clase genérica (comparar con sorted_list1.cpp y sorted_list2.cpp). keywords: lista
task1_bb.cpp
Diversas operaciones en un Arbol Binario (AB) [se asume que sus etiquetas son números enteros positivos]: altura : calcula la altura; cta_hojas : cuenta el número de hojas; max_etiq_arbol: obtiene la máxima etiqueta de todo el árbol; max_epar_arbol: obtiene la máxima etiqueta par del árbol; max_etiq_hojas: obtiene la máxima etiqueta de solo las hojas; sum_etiq_arbol: obtiene la suma de todas las etiquetas; f_aplica: ejemplo simple de programación funcional usando, una vez por vez, las funciones f_duplica y f_mitad (ver en task1_bo.cpp las equivalentes para árbol orientado). keywords: arbol binario
task1_bo.cpp
Diversas operaciones sobre un Arbol Ordenado Orientado (AOO) [se asume que sus etiquetas son números enteros positivos]: altura : calcula la altura; #cta_hojas# : cuenta el número de hojas; #max_etiq_arbol#: obtiene la máxima etiqueta de todo el árbol; #max_epar_arbol#: obtiene la máxima etiqueta par del árbol; #max_etiq_hojas#: obtiene la máxima etiqueta de solo las hojas; #sum_etiq_arbol#: obtiene la suma de todas las etiquetas; #f_aplica#: ejemplo simple de programación funcional usando, una vez por vez, las funciones f_duplica y f_mitad (ver en task1_bb.cpp las equivalentes para árbol binario). Otras: es_camino, is_path, list_if #profundidad# : calcula la profundidad de un nodo. #get_node_by_pre_index# : busca un nodo dado su indice (en preorden).

keywords: arbol orientado

task2_bb.cpp
Diversas operaciones con árboles binarios: semejante: determina si dos árboles tienen la misma estructura; espejo : determina si la estructura de un árbol es la espejada de otro; iguales : determina si dos árboles son iguales, en estructura y contenido; copiaespejo: copia un árbol en otro en forma espejada. keywords: arbol binario
task2_bo.cpp
Diversas operaciones sobre un Arbol Ordenado Orientado (AOO). todos_pares(tree<int> &A): verifica si todas las etiquetas son pares. bool algun_par(tree<int> &A);: verifica si alguna de las etiquetas es par. int nodos_n(tree<int> &A,int n); cuenta los nodos cuya etiqueta es igual a n. int nodos_mayores_que(tree<int> &A, int m); cuenta el número de nodos cuya etiqueta es mayor o igual que m. [Tomado en el 2do parcial del 27/5/2004]. keywords: arbol orientado
tree.h
Utilitarios varios. keywords: arbol orientado
util.cpp
Utilitarios varios. keywords: lista, cola
util.h
Utilitarios varios. keywords: lista, cola
util_btree.cpp
Utilitarios varios. keywords: arbol binario
util_btree.h
Utilitarios varios. keywords: arbol binario
util_tree.cpp
Utilitarios varios. keywords: arbol orientado
util_tree.h
Utilitarios varios. keywords: arbol orientado
verifsum_bo.cpp
En un programa de diseño asistido por computadora (tipo AutoCAD) se desea mantener las piezas de un sistema (por ejemplo un auto) clasificando sus partes en la forma de un árbol, donde sus nodos interiores representan sistemas del auto (planta motriz, direccion, carroceria), sus hijos subs-sistemas y asi siguiendo hasta las hojas que son los componentes indivisibles del automovil (por ej. el tornillo de fijación del espejo retrovisor izquierdo). Se quiere mantener en cada hoja el peso (en Kilogramos) del componente, y en los nodos interiores el peso total de todos los componentes del subárbol que cuelga de ese nodo. Periódicamente se quiere verificar que efectivamente las etiquetas del árbol verifican esta propiedad, es decir que la etiqueta de los nodos interiores es la suma de las hojas del subárbol que cuelga de él. Escribir una funcion bool verif_sum (tree <int> &T, node_t n) que retorna true si el subarbol que cuelga del nodo verifica la condicion dada y false en caso contrario. Usar las primitivas del TAD Arbol Ordenado orientado. [Tomado en el segundo parcial del cursado 2002, 28/5/2002.] keywords: arbol orientado
verifsum_bo.cpp
En un programa de diseño asistido por computadora (tipo AutoCAD) se desea mantener las piezas de un sistema (por ejemplo un auto) clasificando sus partes en la forma de un árbol, donde sus nodos interiores representan sistemas del auto (planta motriz, direccion, carroceria), sus hijos subs-sistemas y asi siguiendo hasta las hojas que son los componentes indivisibles del automovil (por ej. el tornillo de fijación del espejo retrovisor izquierdo). Se quiere mantener en cada hoja el peso (en Kilogramos) del componente, y en los nodos interiores el peso total de todos los componentes del subárbol que cuelga de ese nodo. Periódicamente se quiere verificar que efectivamente las etiquetas del árbol verifican esta propiedad, es decir que la etiqueta de los nodos interiores es la suma de las hojas del subárbol que cuelga de él. Escribir una funcion bool verif_sum (tree <int> &T, node_t n) que retorna true si el subarbol que cuelga del nodo verifica la condicion dada y false en caso contrario. Usar las primitivas del TAD Arbol Ordenado orientado. [Tomado en el segundo parcial del cursado 2002, 28/5/2002.] keywords: arbol orientado

Por palabras clave:

algoritmos:
matrices.cpp
arbol binario:
btree.h, comptree.cpp, contenido.cpp, listarbb.cpp, task1_bb.cpp, task2_bb.cpp, util_btree.cpp, util_btree.h
arbol orientado:
countif.cpp, listarbo.cpp, mapprepost.cpp, maxcota_bo.cpp, orden_nivel.cpp, ordnodo.cpp, parcord.cpp, task1_bo.cpp, task2_bo.cpp, tree.h, util_tree.cpp, util_tree.h, verifsum_bo.cpp, verifsum_bo.cpp
cola:
cadena_pq.cpp, cum_sum_cola.cpp, elimina_valor.cpp, parimpa.cpp, rotacion.cpp, util.cpp, util.h
conjunto:
conjunto1.cpp, conjunto2.cpp, conjunto3.cpp, diffsym.cpp, graphs1.cpp, graphlayers.cpp, incall.cpp, incluido.cpp, ismapset.cpp, open_hash_set.cpp, propsubset.cpp, set_vector_bit.h
correspondencia:
apply-map.cpp, es_biyectiva.cpp, espermut.cpp, graphs1.cpp, inverse.cpp, lista_cte.cpp, nilpot.cpp
diccionario:
open_hash_set.cpp
lista:
apply-map.cpp, ascendente.cpp, cadena_pq.cpp, chunk-revert.cpp, circulo.cpp, concatena.cpp, conjunto1.cpp, conjunto2.cpp, intercala.cpp, inverse.cpp, josephus.cpp, junta.cpp, lista_cte.cpp, listd.h, mapprepost.cpp, ordenag.cpp, particiona.cpp, print_back.cpp, ralea.cpp, reemplaza.cpp, refina.cpp, rejunta.cpp, sorted_list1.cpp, sorted_list2.cpp, sorted_list3.cpp, util.cpp, util.h
pila:
cadena_pq.cpp, cum_sum_pila.cpp, lexico_stack.cpp, parent.cpp



Mario Storti
Mon Dec 10 15:55:56 ART 2007