MO417 - Prova I1

Criada: 2003-05-03

Data da prova: 2003-04-30. Enunciado: aqui

Soluções e Critérios de Nota:

  1. BINARY-SEARCH(A, x)
    
    1  if x < A[1] then
    2     return 0
    3  if x ≥ A[n] then
    4     return n
    5  // aqui A[1] ≤ x < A[n]
    6  start ← 1
    7  end ← n
    8  // invariante: A[start] ≤ x < A[end]
    9  while start + 1 < end do 
    10    middle ← (start + end)/2
    11    if A[middle] ≤ x then
    12       startmiddle
    13    else
    14       endmiddle
    15 return start
    
    

    O objetivo desta questão era testar o que os alunos apenderam sobre loop invariantes. Infelizmente, vários fizeram recursivo e não deu para atingir este objetivo. Apenas para esclarecer, no caso de um algoritmo recursivo podemos dizer que seu invariante é uma afirmação que é sempre verdadeira no início de cada chamada recursiva.

    O critério adotado foi:

  2. A recorrência poderia ser resolvida pelo método mestre, o que daria O(n).

    O critério adotado foi:

    Uma palavra para quem tentou árvore de recursão. É fácil calcular as folhas, que dá O(n) mas somar o tempo gasto em cada nível era mais complicado, infelizmente. Eu fiz em casa mas confesso que tive que usar técnicas de somatório não vistas no curso. É que eu esperava que o pessoal usasse o mestre mesmo.

  3. Solução:

    AlgoritmoComplexidade média Complexidade Pior Caso
    Insertion SortO(n2)O(n2)
    Selection SortO(n2)O(n2)
    Quicksort O(n lg n)O(n2)
    Mergesort O(n lg n)O(n lg n)
    Heapsort O(n lg n)O(n lg n)

    Os pontos foram atribuídos da seguinte forma:

  4. Uma solução para este problema pode ser obtida com programação dinâmica da seguinte forma. Ordene as atividades por instante de término, em ordem crescente (ou não-decrescente). Defina v[i] = duração total máxima de um subconjunto de atividades compatíveis contendo ai necessariamente e opcionalmente atividades que terminam antes de ai.

    O vetor v pode ser calculado pela recorrência:

    Após obter todos os v[i], basta tomar o máximo como sendo a resposta final. Isto tudo dá um algoritmo O(n2). Não é o melhor que pode ser feito, há algoritmos O(n lg n).

    Os pontos foram atribuídos da seguinte forma:

    É claro que a correção e a complexidade só podem ser determinadas caso o algoritmo esteja claramente descrito, daí a importância da clareza na avaliação. Em alguns casos, embora a descrição não estivesse totalmente clara, o estudante ganhou pontos referentes a correção e/ou complexidade se a descrição fosse suficientemente clara para permitir o jugamento destes quesitos.


© 2003 João Meidanis