CC3001 Algoritmos y Estructuras de Datos Examen
CC3001 Algoritmos y Estructuras de Datos Examen
CC3001 Algoritmos y Estructuras de Datos Examen
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>CC3001</strong> <strong>Algoritmos</strong> y <strong>Estructuras</strong> <strong>de</strong> <strong>Datos</strong><br />
<strong>Examen</strong><br />
Profs. Benjamin Bustos (Sección 1) – Nelson Baloian, José Pino (Sección 2)<br />
Pregunta 1<br />
Fecha: 25 <strong>de</strong> noviembre <strong>de</strong> 2009<br />
Tiempo: 3 horas. Una hoja <strong>de</strong> oficio con apuntes.<br />
SIN CONSULTAS<br />
Por favor póngale nombre a todas la hojas.<br />
Modifique el algoritmo Knuth-Morris-Pratt (KMP) para que, dado un<br />
texto <strong>de</strong> tamaño n y un patrón <strong>de</strong> tamaño m, el algoritmo encuentre el prefijo<br />
más largo <strong>de</strong>l patrón que calce con el texto. El nuevo algoritmo <strong>de</strong>be retornar<br />
la posición en el texto don<strong>de</strong> comienza el prefijo más largo encontrado. En<br />
caso que exista más <strong>de</strong> una posición con el prefijo más largo, se <strong>de</strong>be retornar<br />
la posición <strong>de</strong>l primero encontrado.<br />
// Algoritmo KMP<br />
// n = largo <strong>de</strong>l texto, m = largo <strong>de</strong>l patron<br />
// Los indices comienzan <strong>de</strong>s<strong>de</strong> 1<br />
int k=0, j=0;<br />
while (k calce, el patron estaba en el texto
Pregunta 2<br />
Una matriz poco <strong>de</strong>nsa es una en la cual muy pocos <strong>de</strong> sus elementos<br />
A[i, j] tienen un valor distinto <strong>de</strong> cero. Esto hace que cuando las dimensiones<br />
<strong>de</strong> la matriz son gran<strong>de</strong>s, no valga la pena <strong>de</strong>clarar toda la matriz y consumir<br />
una porción importante <strong>de</strong> la memoria sino que mantener sólo los elementos<br />
con valor distinto <strong>de</strong> cero. Esto se pue<strong>de</strong> hacer <strong>de</strong> la siguiente manera. Se<br />
mantiene una lista enlazada <strong>de</strong> nodos por cada fila <strong>de</strong> la matriz que contenga<br />
un número distinto <strong>de</strong> cero.<br />
Los nodos son <strong>de</strong> la siguiente clase:<br />
class NodoFila{ class NodoValor{<br />
int numfila; int numcolumna;<br />
NodoFila sig; double valor;<br />
NodoValor valores; NodoValor sig;<br />
} }<br />
La variable numfila indica el número <strong>de</strong> la fila que tiene un valor distinto<br />
<strong>de</strong> cero y sig es una referencia al siguiente nodo <strong>de</strong> la lista. La referencia<br />
valores es un puntero al primer elemento <strong>de</strong> una lista enlazada en que cada<br />
nodo contiene un valor distinto <strong>de</strong> cero para esa fila, a<strong>de</strong>más <strong>de</strong>l número <strong>de</strong><br />
la columna don<strong>de</strong> está ubicado.<br />
Implemente en Java los métodos <strong>de</strong> la siguiente clase:<br />
class PocoDensa{<br />
}<br />
NodoFila filas; // referencia al primer nodo <strong>de</strong> la lista <strong>de</strong> filas<br />
void set(int fila, int columna, double valor) { ... }<br />
double get(int fila, int columna) { ... }<br />
Los elementos <strong>de</strong> la lista <strong>de</strong> las filas van or<strong>de</strong>nados ascen<strong>de</strong>ntemente<br />
según el número <strong>de</strong> fila. Dentro <strong>de</strong> una lista <strong>de</strong> valores <strong>de</strong> una fila, los<br />
elementos van or<strong>de</strong>nados ascen<strong>de</strong>ntemente por número <strong>de</strong> columna.
Pregunta 3<br />
En cátedra se estudiaron algoritmos para encontrar distancias más cortas<br />
en grafos. Modifique alguno <strong>de</strong> estos algoritmos para generar el algoritmo<br />
Árbol <strong>de</strong> Trayectorias Más Cortas (ATMC). Este algoritmo retorna como<br />
resultado un árbol T que contiene las trayectorias más cortas (es <strong>de</strong>cir, las<br />
que tienen menor distancia) a cada uno <strong>de</strong> los vértices <strong>de</strong>l grafo dirigido<br />
conexo G(V, E) a partir <strong>de</strong> un vértice dado s. El largo (distancia) ℓu,v se<br />
supone conocido y finito, para todo arco dirigido (u, v).
Pregunta 4<br />
Un mapa político se pue<strong>de</strong> representar con un grafo. Los países correspon<strong>de</strong>n<br />
a los nodos <strong>de</strong>l grafo, y los arcos conectan a los nodos <strong>de</strong> países<br />
limítrofes. Para po<strong>de</strong>r diferenciar los países, éstos se colorean. La información<br />
<strong>de</strong>l color asignado a cada país se guarda en los nodos <strong>de</strong>l grafo. Naturalmente,<br />
no se pue<strong>de</strong>n colorear dos países limítrofes con el mismo color, ya<br />
que no podría distinguirse la frontera entre ellos.<br />
Describa en seudocódigo un algoritmo que verifique que un mapa político<br />
está correctamente coloreado (es <strong>de</strong>cir, no hay dos países limítrofes con el<br />
mismo color) y que ocupa a lo más k colores distintos (k es un parámetro<br />
<strong>de</strong>l problema).