Você está na página 1de 3

6) Uma máquina de Turing com um representado como um sétupla ordenada, é dita

máquina de turing tradicional ou clássica, porém, no decorrer dos estudos sobre


procedimentos finitos, buscou-se variantes da mesma. Em tais estudos propôs-se
Máquinas de Turing ditas não determinísticas, as quais admitem mais de uma
transição possível para um mesmo estado e símbolo dado. Com isso é possível haver
várias computações possíveis para processamento de uma mesma palavra, isso confere
o caráter não determinístico a máquina tradicional.

8
No ano de 1900 o matemático David Hilbert Elaborou 23 problemas dos quais
vislumbrava que seriam importantes para o século seguinte. Dentre esses problemas
encontrava-se o problema com o seguinte enunciado: Descreve em um número finito de
passos se uma dada equação diofantina tem raíz(es) inteira(s). A partir dessa
problemática dois pesquisadores, paralelamente trabalharam sobre tal problema. Um
deles, Alonzo Church, valendo-se do seu conceito de procedimento efetivo baseado em
sua teoria lambda cálculo apresentou o conceito de algoritmo(número de passos
finitos capaz de desempenhar uma tarefa). Valendo-se do artigo publicado em 1936
por Church, Alan Turing, já com sua pesquisa e noção intuitiva denominada Máquina
de Turing pronta, realizou uma comparação que mostrava equivalência entre o
conceito de procedimento efetivo apresentado por Church e sua elaboração.
Demonstrando que toda classe de funções computáveis por um algoritmo também eram
computável por uma máquina de turing. Esta relação de equivalência ficou conhecida
como Tese de Church Turing.

Com a equivalência entre as noções intuitivas entre as teses de Church e Turing,


foi possível derivar consequências aos formalismos referentes a funções
computáveis. Pois, uma vez provado que todos os problemas solúveis pelo lambda
cálculo também eram passíveis de resposta por uma Máquina de Turing foi possível
estabelecer o conceito de computabilidade sobre o qual se apoiam todos os demais
teorias da computação. Outrossim é o fato de que, valendo-se da Tese de Church-
Turing, com aplicação sobre o Entscheidungsproblem , foi possível mensurar os
limites teóricos da computação. Bem como estabelecer a impossibilidade de decisão
de algumas classes de linguagens.

Lista 2

5) Em teoria da computação, na esfera que lida com os limites teóricos,


consideram-se duas categorias de problemas especialmente importantes, para os quais
as instâncias possuem solução,são elas problemas tratáveis e intratáveis. A
primeira categoria trata de problemas para os quais há um algoritmo determinístico
que o resolve em tempo polinomial. Já para a segunda categoria admite-se uma
solução não determinística para resolução em tempo polinomial. A principal
diferença está no fato de que, para essa última categoria (NP), há uma limitação
sobre a decidibilidade, isto é, é possível verificar se uma solução atende ao
problema, porém, não é possível descobrir essa solução. Tal como uma comparação
entre um verificador e um solucionador de problemas, assim encontra-se a diferença
fundamental entre essas categorias de problemas, como sendo o fato de problemas
verificáveis serem passíveis apenas de verificação(conferência) sobre as
instâncias, enquanto que problemas solucionáveis(tratáveis) possuem métodos
determinísticos para sua resolução.

6) Quando se pensa em classificar problemas de acordo com a natureza de sua


resolução, faz-se necessário a definição de três classe fundamentais, P, NP, NP-
Completo. Os problemas tidos como P são assim chamados pelo fato de que podem ser
resolvidos em tempo polinomial por algoritmos determinísticos,ou seja, tidos como
computáveis tanto teoricamente quanto de maneira realística, em tempo plausível.
Outra classe de problemas importante são os NP, isto é, problemas para os quais é
possível verificar resolução em tempo polinomial, ou seja, o algoritmo para o
decidir conta com uma etapa não determinística, onde pressupõe ou obtém possíveis
respostas a fim de verificá-las sobre o problema. Em suma, problemas NP são aqueles
sobre os quais existe um algoritmo determinístico que os soluciona em tempo
polinomial. Por fim, há um subconjunto dos problemas NP denominado NP-completo que
pode ser definido como um problema que pertence a classe NP, e que todos os demais
problemas de NP podem ser reduzidos a ele.

7)
Demonstrar que P C NP é, de maneira genérica, uma tarefa simples dado que problemas
determinísticos consistem em casos particulares de não determinismo, para tanto,
pode-se pensar em um algoritmo de tempo polinomial que solucione uma instância de
problema da classe P, como um algoritmo não-determinístico com fase inicial vazia,
isto é, fase não determinística nula.
Caso fosse provado que NP C P, considerando a veracidade da inversão de tal
proposição, seria provado que P = NP, dado que possuírem os mesmos elementos.
Considerando, tal fato como verdadeiro, seria possível através de métodos de
redutibilidade encontrar algoritmos determinísticos para resolverem problemas
cotidianos ditos NP em tempo polinomial, tais como dobramento de proteínas entre
outros.
Caso seja encontrado um algoritmo determinístico de tempo polinomial para um
problema NP, seria possível provar que NP = P portanto possuem os mesmo elementos e
consequentemente demais problemas da classe NP, também possuem, por redução,
algoritmos determinísticos de tempo polinomial que são capazes de resolver os
demais problemas tidos anteriormente em NO

Lista 3

Quais das conjecturas abaixo são verdadeiras? Justifique sua resposta demonstrando
de modo
matemático a veracidade ou falsidade da igualdade proposta.

a) 10n = (n)
Essa afirmação é verdadeira. Quando é tratado o conceito de complexidade
computacional uma notação comum é Big OH que representa o limite superior de uma
função, ou seja, teto de uma função. Comumente para realizar a representação
assintótica de uma função, toma-se um valor representativo da função, denominado
termo dominante da função que é envolvido na notação. No caso da função 10n pode-se
observar que o termo dominante é n sendo 10 uma constante.

b) 10n² = O(n)

A afirmativa é falsa. A função 10n² conta com um termo dominante de ordem


quadrática, ou seja, a função tem uma constate 10, que de maneira geral pode ser
desconsiderada do cálculo de complexidade, viabilizando a maneira com que a função
cresce. Todavia o fato primordial é presença da potência quadrática sobre n, que
indica que essa função não tem como teto O(n²). Ou seja, 10n² é da ordem de no
máximo n². Os passos a seguir também podem ser utilizado

c) 10n⁵⁵ = O(n)

A afirmativa é falsa. A função 10n⁵⁵ conta com um termo dominante de ordem


equivalente a 55, ou seja, a função tem uma constate 10, que de maneira geral pode
ser desconsiderada do cálculo de complexidade, viabilizando a maneira com que a
função cresce. Todavia o fato primordial é presença da potência quadrática sobre n,
que indica que essa função não tem como teto O(n⁵⁵). Ou seja, 10n⁵⁵ é da ordem de
no máximo n². Os passos a seguir também podem ser utilizado
d) log2 n = O (log3 n)

A afirmação a seguir pode ser tida como uma afirmação verdadeira, pensando que a
notação Big Oh considera o formato com que a curva e não constantes portanto,
observando a função log3 n é possível observar que o valor 3 é uma constante que
pode ser suprimida pensando na função log(n)/log(3), sendo assim o termo dominante
da função é log n, visto que a função log 3 n varia de maneira semelhante a log n .
Portanto pode-se considerar que O(log3 n), é dominada por log3n, para um n⁰ > n,
com constante c.

e) log3 n = (log2 n)

A afirmação a seguir pode ser tida como uma afirmação verdadeira, pensando que a
notação Big Oh considera o formato com que a curva e não constantes portanto,
observando a função log2 n é possível observar que o valor 2 é uma constante que
pode ser suprimida pensando na função log(n)/log(2), sendo assim o termo dominante
da função é log n, visto que a função log 2 n varia de maneira semelhante a log n .
Portanto pode-se considerar que O(log2 n), é dominada por log2n, para um n⁰ > n,
com constante c.

7)

Lista 4

O pior caso do Insertion Sort ocorre quando os elementos do vetor estão em ordem
decrescente, pois a condição A[j] > elemento sempre será verdadeira. Logo, o laço
interno realizará a quantidade máxima de iterações. Nesse caso, o Insertion Sort
terá complexidade no tempo de O(n²).O melhor caso ocorre quando o vetor está
ordenado, pois, ao contrário do pior caso, a condição A[j] > elemento sempre será
falsa. Logo, o código do laço interno nunca será executado. Assim, teremos apenas
as n - 1 iterações do laço externo, portanto a complexidade no tempo é O(n).O caso
médio do Insertion Sort é O(n²). Lembrando que o caso médio é uma média entre todas
as entradas possíveis. Isso significa que, em geral, ele terá tempo quadrático,
estatisticamente falando.

Para avaliar o comportamento do algoritmo de ordenação é necessário compreender


como sua estrutura se comporta. O princípio do bubblesort é a troca de valores
entre posições adjacentes (valores lado a lado) numa lista de N elementos, fazendo
com que os valores mais altos sejam transportados para o final do vetor (no caso de
uma ordenação crescente). Este processo pode se repetir N vezes, até que o vetor
esteja completamente ordenado. A versão otimizada do bubblesort decrementa o
tamanho do vetor, uma vez que os maiores elementos de cada loop estarão
obrigatoriamente no final e através de um operador booleano, garante que não haverá
loops desnecessários caso o vetor já esteja ordenado. Não é difícil identificar que
seu tempo de execução no pior caso e de caso médio é O(n²), pois na média é
necessário percorrer o vetor de N elementos, N vezes (N-K vezes), para fazer a
ordenação (N*N = N²).

Você também pode gostar