Sei sulla pagina 1di 8

POSCOMP_2018 – RESPOSTAS DE EXEMPLO

Pode aceder ao documento completo em:


https://respostasprovas.com

Desenvolvido por:
José Meléndez

Tradução
Liliane Matsumoto

Proprietário
Emelzi Ltda. – respotasprovas.com

© 2019 Emelzi – www.respostasprovas.com | Todos os direitos reservados


QUESTÃO 11 – Considere a proposição abaixo:

“Em toda turma da minha universidade, existe pelo menos um aluno canhoto.”

A negação da proposição acima é logicamente equivalente à proposição:

A) Existe uma turma na minha universidade na qual há, no máximo, um aluno canhoto.
B) Há, pelo menos, uma turma da minha universidade na qual não existe aluno canhoto.
C) Não há turma na minha universidade na qual todos os alunos sejam canhotos.
D) Em cada uma das turmas da minha universidade, não há aluno algum que seja canhoto.
E) Em nenhuma turma da minha universidade, há algum aluno que seja canhoto.

Para resolver esta pergunta é fundamental conhecer a lógica de primeira ordem (cálculo de predicados
de primeira ordem), especialmente os seguintes conceitos:

• Quantificador universal ∀𝑥 : significa “para todo x”, ou “todos os x” ou “em todos os x”.
• Quantificador existencial ∃𝑥 : significa “existe pelo menos um x” ou “alguns x”.
A negação de um quantificador universal corresponde a: ~[∀𝑥 : 𝑃(𝑥)] = ∃𝑥 | ~𝑃(𝑥). O
quantificador universal muda para o existencial, o “verifica-se que (:)” muda para “tal que (l)” o
predicado P(x) é negado. Exemplo: Exemplo: todos os homens são honestos. Então o universo
U seriam todos os seres humanos. O predicado P(x) seria “x é honesto”, e seria simbolizado
como ∀𝑥 ∈ 𝑈: 𝑃(𝑥). A negação do anterior seria ∃𝑥 ∈ 𝑈| ~𝑃(𝑥), ao realizar a conversão
obteríamos: “existe ao menos um homem que não é honesto”, ou também, “alguns homens
não são honestos”.
• A negação de um quantificador existencial é parecida a anterior: ~[∃𝑥 |𝑃(𝑥)] = ∀𝑥 : ~𝑃(𝑥).

Nota: O “tal que” está relacionado ao quantificador existencial e o “verifica-se que” está relacionado ao
quantificado universal.

Agora sim podemos desenvolver o exercício, e temos o seguinte predicado:

“Em toda turma da minha universidade, existe pelo menos um aluno canhoto”.

Podemos observar que na frase anterior encontramos presente tanto o quantificador universal, como o
existencial. O quantificador universal inclui ao quantificador existencial de tal maneira que: ∀𝑦 : ∃𝑥 ∈
𝑈|𝑃(𝑥). Podemos ler o anterior como:

Para toda turma “y” da universidade: ∀𝑦


Existe pelo menos um estudante “x” (pertence aos alunos da faculdade): ∃𝑥 ∈ 𝑈
O estudante “x” e canhoto: 𝑃(𝑥)

Ao aplicar uma negação, primeiro teríamos que negar o quantificador universal, trocando-o pelo
quantificador existencial. Depois, o “verifica-se que” seria trocado por “tal que”, e posteriormente
negamos o predicado, que nesse caso inclui um quantificador existencial, de tal maneira que ao aplicar

© 2019 Emelzi – www.respostasprovas.com | Todos os direitos reservados


a negação sobre o quantificador existencial este muda para um quantificador universal, o “tal que” é
muda para “verifica-se que” e o predicado P(x) fica negado. O resultado seria o seguinte:

∃𝑦 |∀𝑥 ∈ 𝑈: ~𝑃(𝑥)

Ao realizar a conversão, teríamos:

∃𝑦 : Há, pelo menos, uma turma da minha universidade


| na qual
∀𝑥 ∈ 𝑈: Todos os alunos
: se verifica que
~𝑃(𝑥): não são canhotos

Há, pelo menos, uma turma da minha universidade na qual todos os alunos não são canhotos. O
anterior é equivalente a: Há, pelo menos, uma turma da minha universidade na qual não existe aluno
canhoto.

A opção correta é a alternativa B

© 2019 Emelzi – www.respostasprovas.com | Todos os direitos reservados


QUESTÃO 14 – Seja um código de Hamming sistemático com a seguinte matriz de comprovação tal
que 𝐻 = −𝑃𝑇 |𝐼𝑟 :

1 1 0 ∗ ∗ ∗ ∗
𝐻 = (0 1 1 ∗ ∗ ∗ ∗)
1 0 1 ∗ ∗ ∗ ∗

Transmite-se a palavra código Y=0000000 e, durante a transmissão, se produzem erros nas


posições 2, 3, 4 e 5. Que mensagem de usuário descodificaríamos?

O enunciado indica que o código de Hamming é sistemático, isso significa que na palavra código em
que são gerados os primeiros "k” bits contêm a mensagem original que foi transmitida. Neste caso,
como é Hamming (7.4), onde a palavra código tem 7 bits (4 bits de dados e 3 bits de paridade), os
primeiros 4 bits correspondem à mensagem original descodificada.

A palavra código transmitida é Y = 0000000, e ocorre um erro nas primeiras posições 2, 3, 4 e 5,


portanto a palavra código “y” que é recebida é Y’ = 0111100.

O código Hamming só permite corrigir um bit errôneo, por esse motivo, ainda que apliquemos a
correção, a palavra recebida seguirá com erros.

Para obter o bit errôneo que será corrigido, calcula-se a síndrome, que resulta da multiplicação da
palavra código pela matriz de comprovação H. O vetor coluna resultante indica a posição em H do bit
que deve ser corrigido. No entanto, podemos ver que a matriz H tem alguns valores indefinidos, então
devemos preenchê-la com os 0s e os 1s que faltam.

Para preencher esses espaços, devemos levar em conta que cada coluna representa uma posição de
bit da palavra código, portanto, a coluna é uma representação binária de um número entre 1 e 7. Na
matriz H, já temos o valor das três primeiras colunas:

1 1 0 ∗ ∗ ∗ ∗
𝐻 = (0 1 1 ∗ ∗ ∗ ∗)
1 0 1 ∗ ∗ ∗ ∗

Esses valores correspondem a 5, 6 y 3:

1
𝐶𝑜𝑙𝑢𝑛𝑎 1 = (0) = 5 = (101)
1

1
𝐶𝑜𝑙𝑢𝑛𝑎 2 = (1) = 6 = (110)
0

0
𝐶𝑜𝑙𝑢𝑛𝑎 3 = (1) = 3 = (011)
1
Portanto, os valores faltantes são 1, 2, 4 e 7. Como esses valores são distribuídos em H?
© 2019 Emelzi – www.respostasprovas.com | Todos os direitos reservados
Sabemos que um dos componentes da matriz H é uma matriz de identidade, por meio da equação 𝐻 =
(−𝑃𝑇 |𝐼𝑟 ) podemos determinar que essa matriz de identidade ocupa as três últimas colunas, assim:

1 1 0 ∗ 1 0 0
𝐻 = (0 1 1 ∗ 0 1 0)
1 0 1 ∗ 0 0 1

Percebendo o acima, nós já colocamos as posições 4 = 100, 2 = 010 e 1 = 001. Nós só precisamos da
posição 7 = 111 que corresponderia à única coluna que estava disponível

1 1 0 1 1 0 0
𝐻 = (0 1 1 1 0 1 0)
1 0 1 1 0 0 1

Uma vez que temos H, multiplicamos pelo vetor de coluna da palavra de código com erros que foram
recebidos (0 1 1 1 1 0 0), e assim obtemos a síndrome:
0
1
1 1 0 1 1 0 0 1 3
𝑆(𝑌 ′ ) = 𝑌 ′ 𝐻 = (0 1 1 1 0 1 0) . 1 = (3)
1 0 1 1 0 0 1 1 2
0
(0)
No vetor resultante, que corresponde à síndrome, se um número é par então ele corresponde a um
zero e, se for ímpar, corresponde a 1:

0
1
1 1 0 1 1 0 0 1 3 1
𝑆(𝑌 ′ ) = 𝑌 ′ 𝐻 = (0 1 1 1 0 1 0) . 1 = (3) = (1)
1 0 1 1 0 0 1 1 2 0
0
(0)
O sistema indica que o erro está na posição 1 1 0, no caso de H, corresponde à segunda coluna. Então,
o sistema corrigirá o segundo bit da palavra de código incorreta que foi recebida, permanecendo assim:

𝑌 ′ = 0 1 1 1 1 0 0 𝑠𝑒𝑔𝑢𝑛𝑑𝑜 𝑏𝑖𝑡 é 𝑐𝑜𝑟𝑟𝑖𝑔𝑖𝑑𝑜 → 𝑌 = 0011100

Como os primeiros 4 bits são aqueles correspondentes à palavra x enviada, então x = 0011. Como
mencionado acima, o código de Hamming somente permite corrigir um erro, portanto, a palavra x
recebida ainda teria erros em relação àquela que realmente foi enviada.

Portanto, a resposta correta é alternativa C.

© 2019 Emelzi – www.respostasprovas.com | Todos os direitos reservados


QUESTÃO 22 – Dado o trecho de código

Assumindo que a instrução c=c+1 é 𝑂(1), a expressão que melhor define a ordem de complexidade
desse trecho é:

Sabemos que para determinar a complexidade de um algoritmo de dois bucles for aninhados, como no
caso atual, calculamos a complexidade de ambos os bucles for e multiplicamos.

O primeiro bucle for inicia a iteração desde o um e aumenta duas vezes na próxima iteração, então
podemos ver que ele cresce exponencialmente na base dos. Isso implica que o número de iterações
necessárias para atingir o limite n depende de quantas vezes temos que elevar o número 2 para
alcançar esse número. Levando em conta o anterior, podemos ter uma ideia de qual é a operação
matemática que nos permite calcular esse valor, efetivamente, precisamos dos logaritmos, neste caso
seria um logaritmo na base dois para obter o número de iterações do primeiro bucle for.
Ilustraremos com o seguinte exemplo:

Se n fosse igual a 32, i assumiria os seguintes valores antes de atingir 32 – não incluímos o 32 porque
a condição de parada é i < n, y Log232 = 5, que no nosso caso corresponde ao número de iterações
necessárias. Embora o 32 não esteja incluído, devemos ter em mente que o bucle começa em 1, que
é igual a 20, essa iteração do expoente 0 compensa que o limite seja aberto.

1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64

Se n não fosse um múltiplo exponencial de 2, não haveria problema, o número de iterações


corresponderia à parte inteira do logaritmo. Por exemplo, se n = 37, então Log237 = 5,209, ou seja, 5
iterações seriam necessárias, como pode ser visto na figura a seguir, na sexta iteração i seria igual a
64, então i > n e essa iteração não ocorreria.

© 2019 Emelzi – www.respostasprovas.com | Todos os direitos reservados


1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64

Tendo em conta o que foi exposto acima, pode concluir-se que a complexidade do primeiro bucle for é
Log2n.

O segundo bucle for, é muito mais fácil de deduzir, a variável j vai desde 1 até o valor de n e aumenta
de 1 a 1, portanto, a complexidade desse bucle for é n.

Multiplicando as duas complexidades, obtemos o nLog2n. A resposta correta é a alternativa A.

Observação: Como a complexidade de c = c + 1 é constante, isso não contribui significativamente para


a complexidade do algoritmo, portanto, é subtraído da fórmula de complexidade. A complexidade de
um algoritmo com notação Big-O é definida pelo termo que mais contribui para o número de iterações
desses.

QUESTÃO 32 – Assinale a alternativa correta sobre as definições básicas de grafos.

Alternativa A. FALSA. A principal característica dos hipergrafos é que suas aristas podem conectar
mais de dois vértices. Fonte [14]: https://pt.wikipedia.org/wiki/Hipergrafo

Alternativa B. FALSA. Um grafo ponderado pode ser direcionado ou não direcionado, e não precisa
que todos os pares de vértices sejam adjacentes entre si (esse só é obrigatório para os grafos tipo
completo). Fonte: Lipschutz, S., Lipson, M., Quezada Batalla, M. and Villagómez Velázquez, H. (2009).
Matemáticas discretas. 1st ed. México, D.F.: McGraw-Hill. Pagina 162.

Alternativa C. FALSA. Esta definição corresponde as árvores. No caso, se o grafo for acíclico, mas não
conexo, ele é chamado de floresta. Fonte: SZWARCFITER, Jayme Luiz (1988). Grafos e algoritmos
computacionais. Rio de Janeiro: Campus. p. 43-45.

Alternativa D. FALSA. A árvore livre precisar ser conectado. Fonte [15]:


http://www.dsc.ufcg.edu.br/~abrantes/CursosAnteriores/TG051/arvores.pdf

Alternativa E. VERDADEIRA. Fonte: Lipschutz, S., Lipson, M., Quezada Batalla, M. and Villagómez
Velázquez, H. (2009). Matemáticas discretas. 1st ed. México, D.F.: McGraw-Hill. Pagina 204.

A resposta correta é a alternativa E.

© 2019 Emelzi – www.respostasprovas.com | Todos os direitos reservados


QUESTÃO 44 – Considere um computador no qual o interpretador do nível 0 (hardware interpretando
ou microcódigo) gasta 20 nanossegundos (20x10-9 segundos) por micro-instrução, e o interpretador
do nível 1 (microcódigo interpretando a linguagem de máquina convencional) necessita de 25
microinstruções para interpretar a instrução de máquina convencional. Um programa teste, já em
linguagem de máquina convencional, leva 50 segundos para executar.

a) Quanto tempo levará o programa teste para executar se o tempo para executar uma micro-instrução
for aumentado para 30 nanossegundos?
b) Quanto tempo levará o programa teste para executar se uma instrução de máquina convencional
necessitar de somente 15 microinstruções para ser interpretada?

O primeiro que devemos nos perguntar é quantas microinstruções o teste consome. Levando em conta
que são necessários 50 segundos para executar e que cada micro-instrução consome 20
nanossegundos (20x10-9 segundos), o número de microinstruções é definido por:

50𝑠
𝑁𝑜. 𝑑𝑒 𝑚𝑖𝑐𝑟𝑜𝑖𝑛𝑠𝑡𝑟𝑢çõ𝑒𝑠 = = 2,5 ∗ 109 𝑚𝑖𝑐𝑟𝑜𝑖𝑛𝑠𝑡𝑟𝑢çõ𝑒𝑠
20 ∗ 10−9 𝑠⁄
𝑀𝑖𝑐𝑟𝑜𝑖𝑛𝑠𝑡.

Agora, se cada instrução aumenta para 30 nanossegundos, teríamos um tempo de execução de:

−9
𝑇𝑎 = 2,5 ∗ 109 𝑚𝑖𝑐𝑟𝑜𝑖𝑛𝑠𝑡. ∗ 30 ∗ 10 𝑠⁄𝑚𝑖𝑐𝑟𝑜𝑖𝑛𝑠𝑡. = 75 ∗ 109−9 𝑠 = 75 ∗ 100 𝑠 = 75𝑠

Neste ponto, já sabemos que a resposta correta é D. Agora, para saber quanto tempo o programa
levará se você precisar apenas de 15 microinstruções, é considerado o seguinte:
O programa leva 50 segundos para rodar com 25 microinstruções, se reduzido a 15 microinstruções,
temos que:

15 𝑚𝑖𝑠𝑐𝑟𝑜𝑖𝑛𝑠𝑡
∗ 100% = 60%
25 𝑚𝑖𝑐𝑟𝑜𝑖𝑛𝑠𝑡

Apenas 60% da quantidade de instruções originais são necessárias, assumindo que o consumo de
tempo é linearmente proporcional ao número de instruções, o novo tempo consumido seria dado por:

𝑇𝑏 = 50𝑠 ∗ 60% = 30𝑠

A opção correta é a alternativa D.

© 2019 Emelzi – www.respostasprovas.com | Todos os direitos reservados

Potrebbero piacerti anche