Prévia do material em texto
Gabarito Semana 9 Escreva um pseudocódigo que, dados n inteiros com valores entre 1 e k, pré-processe esses inteiros e então responda perguntas da forma: “dados a, b, quantos dos n inteiros estão no intervalo [a , b]?” A resposta a esse tipo de perguntas deve ser feita em tempo O(1) e o pré-processamento deve ser feito em tempo O(n+k). O nome para cada um dos métodos deve ser ResponderQuery e PreProcessar, respectivamente. Resposta do aluno Renato Banzai levemente modificada PreProcessar(A, n, k) 1 para i ← 0 até k faça //Bastou usar o primeiro trecho de COUNTING-SORT (aula 10) 2 C[i] ← 0 //Θ(k) 3 para j ← 1 até n faça 4 C[A[j]] ← C[A[j]] + 1 //Θ(n) 5 para i ← 1 até k faça 6 C[i] ← C[i] + C[i − 1] //Θ(k) 7 devolva C // Total: Θ(n + k) ResponderQuery(A, n, k, a, b) 1. C = PreProcessar(A, n, k) //Θ(n+k) 2. devolva (C[b] - C[a-1]) //Θ(1) Observação: Assume 1 ≤ a ≤ b ≤ k e que o C é indexado a partir do 0.