Exame de Análise e Desenho de Algoritmos
Exame de Análise e Desenho de Algoritmos
Exame de Análise e Desenho de Algoritmos
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Exame</strong> <strong>de</strong> Análise e <strong>Desenho</strong> <strong>de</strong> <strong>Algoritmos</strong>Departamento <strong>de</strong> InformáticaUniversida<strong>de</strong> Nova <strong>de</strong> Lisboa20 <strong>de</strong> Junho <strong>de</strong> 20091. [3 valores] Suponha que se executa o algoritmo <strong>de</strong> Dijkstra com o grafo esquematizado nafigura e o vértice origem 1.✓✏71✒✑ ◗ ◗◗◗◗◗◗1✓✏✲ 2 ✛ 1✒✑✓✏3✒✑❳ ❳❳❳ ❳❳❳ ❳❳❳ ❳❳❳ ❳❳❳ ❳❳❳ ❳❳❳39✓✏3✑ ✑✑✑✑✑✸✑4 ✛✒✑ 2✓✏✑ ✑✑✑✑✑✑✸ 35✒✑Indique:• a or<strong>de</strong>m pela qual os vértices são seleccionados;• o número total <strong>de</strong> vezes que o método <strong>de</strong>creaseKey é executado; e• o conteúdo dos vectores length e via, quando o algoritmo termina.2. [4 valores] Consi<strong>de</strong>re um grafo não orientado, pesado e conexo, que mo<strong>de</strong>la uma re<strong>de</strong> <strong>de</strong>saneamento básico num concelho. Cada ligação entre dois nós distintos da re<strong>de</strong> é efectuadaatravés <strong>de</strong> um cano, cuja capacida<strong>de</strong> se me<strong>de</strong> em metros cúbicos por segundo.Embora quase todos os canos estejam a precisar <strong>de</strong> ser substituídos, numa primeira fase, aCâmara preten<strong>de</strong> intervir em apenas alguns. O conjunto <strong>de</strong> canos a substituir (por canosnovos, com a mesma capacida<strong>de</strong> dos existentes) <strong>de</strong>ve satisfazer os três seguintes requisitos:1. permitir que quaisquer dois nós da re<strong>de</strong> fiquem inter-ligados pelos novos canos, aindaque essa “inter-ligação” obrigue a passar por outros nós;2. ter o menor número <strong>de</strong> elementos possível(quanto menos canos a substituir, menor o custo da obra);3. maximizar a soma das capacida<strong>de</strong>s dos novos canos(ou seja, <strong>de</strong> entre todos os conjuntos <strong>de</strong> canos que satisfazem as duas restrições anteriores,preten<strong>de</strong>-se um cuja soma das capacida<strong>de</strong>s dos canos seja a maior possível).Escreva um algoritmo (em pseudo-código) que, dado um grafo não orientado, pesado e conexo,que mo<strong>de</strong>la uma re<strong>de</strong> <strong>de</strong> saneamento básico, indique a soma das capacida<strong>de</strong>s <strong>de</strong> umconjunto <strong>de</strong> canos que satisfaz os requisitos da Câmara. Estu<strong>de</strong> (justificando) a complexida<strong>de</strong>temporal do seu algoritmo, no pior caso.1
3. [4 valores] Sejam G um grafo não orientado, pesado e completo, cujos arcos têm custopositivo, e M um inteiro positivo. Um circuito <strong>de</strong> Hamilton limitado por M em G é umcircuito <strong>de</strong> Hamilton em G que passa apenas por arcos <strong>de</strong> custo inferior ou igual a M.Por exemplo, 1 4 2 3 1 é um circuito <strong>de</strong> Hamilton limitado por 9 no grafo esquematizado nafigura.✓✏ 10✓✏12✒✑❍❍5 ✒✑❍❍96✓✏ ✟ ✟✟✟✟✟✟✟❍❍3❍❍✓✏34✒✑ 12 ✒✑O Problema do Caixeiro Viajante Limitado formula-se da seguinte forma.Dados um grafo G não orientado, pesado e completo, cujos arcos têm custo positivo, e uminteiro positivo M, existe um circuito <strong>de</strong> Hamilton limitado por M em G?Prove que o Problema do Caixeiro Viajante Limitado é NP-completo.4. [3 valores] Consi<strong>de</strong>re a seguinte função recursiva f(i, j), on<strong>de</strong> i e j são números inteiros queverificam i ≥ 1 e j ≥ 3.⎧1, se i = 1 e j ≥ 3;⎪⎨f(i, j) = 2 f(i − 1, j) + 1, se i ≥ 2 e j = 3;( )⎪⎩ 2 f(k, j) + f(i − k, j − 1) , se i ≥ 2 e j ≥ 4.min1≤k
5. [3 valores] Consi<strong>de</strong>re a classe BinNo<strong>de</strong>, dos nós das árvores binomiais <strong>de</strong> chaves do tipo K evalores do tipo V, e a classe BinQueue, das filas binomiais <strong>de</strong> chaves do tipo K e valores dotipo V, ambas internas ao pacote dataStructures.class BinNo<strong>de</strong>{.............................................}public BinNo<strong>de</strong>( K key, V value );public Entry getEntry( );public K getKey( );public V getValue( );public int getDegree( );public BinNo<strong>de</strong> getChild( );public BinNo<strong>de</strong> getLeftSibling( );public BinNo<strong>de</strong> getRightSibling( );public BinNo<strong>de</strong> getParent( );public void setEntry( Entry newEntry );public void setEntry( K newKey, V newValue );public void setKey( K newKey );public void setValue( V newValue );public void setDegree( int newDegree );public void incrementDegree( );public void setChild( BinNo<strong>de</strong> newChild );public void setLeftSibling( BinNo<strong>de</strong> newLeftSibling );public void setRightSibling( BinNo<strong>de</strong> newRightSibling );public void setParent( BinNo<strong>de</strong> newParent );class BinQueue{// (Pointer to) the first binomial tree.protected BinNo<strong>de</strong> head;}.............................................// Returns the number of entries in the binomial queue.public int size( );Implemente o método size (na classe BinQueue), que retorna o número <strong>de</strong> entradas nafila binomial. Note que head é o único atributo. Calcule a complexida<strong>de</strong> temporal do seualgoritmo, no melhor caso e no pior caso, justificando.3
6. [3 valores] Um carpinteiro tem uma tábua <strong>de</strong> ma<strong>de</strong>ira, com um <strong>de</strong>terminado comprimento,que tem <strong>de</strong> ser cortada nas posições p 1 , p 2 , . . . , p n (com n ≥ 1), on<strong>de</strong> p i é a distância aoextremo esquerdo da tábua (como se ilustra na figura).0 5 10 15 20 25 30 35 40 45 50 55 60 6510 15 30 40 60Note que, <strong>de</strong>pois <strong>de</strong> fazer o primeiro corte, o carpinteiro fica com duas tábuas <strong>de</strong> ma<strong>de</strong>ira;<strong>de</strong>pois do segundo corte, o carpinteiro fica com três tábuas <strong>de</strong> ma<strong>de</strong>ira, etc.Assuma que o custo <strong>de</strong> efectuar um corte numa tábua <strong>de</strong> ma<strong>de</strong>ira <strong>de</strong> comprimento c é igual ac, in<strong>de</strong>pen<strong>de</strong>ntemente da posição on<strong>de</strong> o corte é efectuado. Por exemplo, o custo <strong>de</strong> efectuarum corte qualquer na tábua da figura é 65.Apresente uma função recursiva que, dados o comprimento C da tábua <strong>de</strong> ma<strong>de</strong>ira ea sequência p 1 , p 2 , . . . , p n das posições on<strong>de</strong> <strong>de</strong>vem ser efectuados os cortes (com n ≥ 1 e0 < p 1 < p 2 < · · · < p n < C), calcula o custo mínimo <strong>de</strong> efectuar todos os n cortes. Indiqueclaramente o que representa cada uma das variáveis que utilizar e explicite a chamada inicial.Sugestão: Consi<strong>de</strong>re a sequência p 0 , p 1 , p 2 , . . . , p n , p n+1 , on<strong>de</strong> p 0 = 0 e p n+1 = C.4