09.05.2013 Views

CC3001 Algoritmos y Estructuras de Datos Examen

CC3001 Algoritmos y Estructuras de Datos Examen

CC3001 Algoritmos y Estructuras de Datos Examen

SHOW MORE
SHOW LESS

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).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!