Questão para a prova oral 087

Enunciado:
Suponha que sejam dadas n atividades, cada uma com um instante de início si e um instante de término fi. As atividades encontram-se ordenadas por ordem crescente de instante de término. Deseja-se selecionar um subconjunto de tamanho máximo de atividades mutuamente compatíveis , isto é, que não se sobreponham no tempo. Considere a solução para este problema dada pela chamada RECURSIVE-ACTIVITY-SELECTOR(s, f, 0, n+1), onde fazemos f0 igual a menos infinito e o código da função RECURSIVE-ACTIVITY-SELECTOR é dado abaixo:

RECURSIVE-ACTIVITY-SELECTOR(s, f, i, j)
 1  m = i + 1
 2  while m < j e sm < fi
 3    do m = m + 1
 4  if m < j
 5    then return {am} U RECURSIVE-ACTIVITY-SELECTOR(s, f, m, j)
 6    else return conjunto_vazio

Comparando este algoritmo com uma solução equivalente que utilize programação dinâmica, escolha a alternativa correta:

A) A chamada recursiva da linha 5 baseia-se em um critério de escolha de no máximo um subproblema para solucionar, ao contrário da programação dinâmica que poderia envolver a seleção de mais de um subproblema.

B) Por decidir antecipadamente o subproblema que irá resolver, a solução gulosa pode levar mais tempo que a equivalente em programação dinâmica, se os palpites forem inexatos.

C) Tal como neste exemplo, qualquer outro problema que pode ser resolvido por programação dinâmica também pode ser resolvido pela estratégia gulosa.

D) As linhas 2 e 3 tem a função de detectar subproblemas superpostos, tal como acontece na programação dinâmica.

E) NDA

Autor(a): André Santanchè