UNIVERSIDADE FEDERAL DE CAMPINA GRANDE - UFCG CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA - CEEI COPIN. Monografia

Tamanho: px
Começar a partir da página:

Download "UNIVERSIDADE FEDERAL DE CAMPINA GRANDE - UFCG CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA - CEEI COPIN. Monografia"

Transcrição

1 UNIVERSIDADE FEDERAL DE CAMPINA GRANDE - UFCG CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA - CEEI COORDENAÇÃO DE PÓS-GRADUAÇÃO EM INFORMÁTICA - COPIN Monografia COMPUTAÇÃO PROBABILÍSTICA: MÁQUINA DE TURING PROBABILÍSTICA João Arthur Brunet Monteiro Mestrado em Ciência da Computação - CEEI/UFCG Campina Grande, Junho de 2007.

2 Sumário 1 Introdução 2 2 Metodologia 4 3 Computação Probabilística Um Exemplo de Computação Probabilística Exemplo de Aplicação de Computação Probabilística Algoritmos Genéticos Máquina de Turing Probabilística Definição Formal Computação de uma Máquina de Turing Probabilística Exemplo de Computação em uma Máquina Probabilística Poder Computacional de uma Máquina de Turing Probabilística 12 5 Algoritmos Probabilísticos Tipos de Algoritmos Probabilísticos Algoritmos Probabilísticos Numéricos Algoritmos de Monte Carlo Algoritmos de Las Vegas Gerador de Números Pseudo-aleatórios Complexidade Considerações Finais 16 Lista de Figuras 1 Estatísticas sobre a função f(x) Relações entre classes de complexidade prob. e não-prob

3 1 Introdução Este documento tem por objetivo apresentar um conteúdo introdutório sobre computação probabilística, apresentando o modelo de máquina de Turing probabilística bem como suas implicações diante do modelo clássico. Além disso, uma visão geral sobre os algoritmos probabilísticos e suas aplicações é apresentada. A máquina de Turing foi criada por Alan Turing [10] com o intuito de tentar responder alguns dos 23 problemas-desafio propostos por Hilbert [7]. Um destes problemas (Entscheidungsproblem) baseava-se na possibilidade ou não de existir um algoritmo que julgasse verdadeira ou falsa qualquer conjectura matemática. Assim, Turing criou um modelo que ele achava ser o desencadear do raciocínio de um matemático ao tentar provar uma conjectura matemática: A máquina de Turing. Embora as máquinas de Turing sejam similares a autômatos finitos e autômatos de pilha, sabemos que autômatos não podem ser considerados modelos para os computadores, uma vez que não são capazes de computar linguagens simples como L = a n b n ; n >= 0. Por sua vez, o modelo da máquina de Turing é mais genérico que os autômatos, podendo reconhecer essa e muitas outras linguagens mais complexas. Uma máquina de Turing consiste em um controle finito, uma fita e um cabeçote que pode ser usado para ler ou escrever na fita. Embora pareça simples, tentativas de substitui-lo como modelo de computador (máquina de Turing com múltiplas fitas e de acesso aleatório) não surtiram efeito ao longo do tempo. Até o momento, a idéia de que tudo que pode ser computável é computável por uma máquina de Turing ainda não foi refutada. Uma abordagem importante a ser destacada no contexto de máquinas de Turing é a construção deste modelo contemplando o não-determinismo em sua computação. À este modelo deu-se o nome de Máquina de Turing probabilística. Uma máquina de turing não-determinística é equivalente a uma máquina de Turing probabilística, exceto pelo fato de que ela acerta a resposta a cada vez. O objeto do estudo aqui exposto são as máquinas de Turing probabilísticas e as máquinas de Turing não-determinísticas. Este documento está estruturado como se segue. Inicialmente é apresentada uma visão geral sobre computação probabilística e suas aplicações. Após este primeiro passo, é apresentado o modelo da máquina de Turing probabilística e uma análise do procedimento utilizado por ele para computar entradas. Um exemplo de computação em uma máquina não-determinística é então demonstrado para melhor entendimento em uma máquina probabilística. Mais tarde, são discutidos os algoritmos probabilísticos e, além disso, uma discussão do poder computacional do modelo em relação ao mo- 2

4 delo de máquina determinística é conduzida. Por fim, conclui-se este documento com uma Seção contendo as considerações finais em relação ao assunto abordado. 3

5 2 Metodologia Com o intuito de atingir os objetivos deste trabalho, foi preciso desempenhar uma extensa revisão bibliográfica na área de teoria da computação e modelos computacionais. Nesta Seção é apresentada a metodologia utilizada para conduzir o processo de confecção deste documento. Depois de identificar o assunto alvo do documento (máquinas de Turing probabilísticas), foi necessário pesquisar por artigos e livros relacionados ao assunto para que fosse possível angariar o embasamento teórico necessário para a construção de um documento sobre o assunto. No inicio do processo, as chaves 1 de busca foram: Computação Probabilística Máquinas de Turing Probabilísticas Não-determinismo em máquinas de Turing Complexidade das máquinas probabilísticas Esta primeira pesquisa revelou as principais referências sobre o assunto. Identificamos que o livro Elementos da Teoria da Computação [8] é extremamente importante para a área, uma vez que contempla todo o assunto de maneira simples e com exemplos auto-explicativos. Por este motivo, este livro foi utilizado como base de conhecimento para a escrita deste documento. Os seguintes motores de busca foram utilizados na revisão bibliográfica: Depois de catalogar as principais referências sobre o assunto, iniciou-se o processo de leitura e revisão dos artigos e livros. A partir daí, deu-se início a escrita deste documento. 1 Obs.: Os termos também foram traduzidos para o inglês. 4

6 3 Computação Probabilística Computação probabilística é um termo cunhado para denotar a adição de probabilidade (randomicidade) na computação efetuada pelos modelos clássicos. O grande diferencial entre computação probabilística e não probabilística é o fato da primeira poder gerar diferentes saídas para uma mesma entrada, justamente por tomar decisões baseadas em eventos probabilísticos durante a computação. A computação probabilística é útil nos casos em que há certas computações que podem gerar saídas erradas. Neste cenário, associa-se uma probabilidade que mede a confiança do resultado da computação. 3.1 Um Exemplo de Computação Probabilística Suponha que um vetor de n posições está preenchido com n/2 as e n/2 bs. Um algoritmo determinístico para encontrar um a dentro do vetor consiste em percorre-lo linearmente e procurar pelo símbolo. Este algoritmo, no pior caso, precisa de n/2 passos para retornar a resposta correta. Agora suponha para o mesmo problema descrito acima, um algoritmo probabilístico que pesquisa randomicamente por a no vetor. Este algoritmo tem uma alta probabilidade de encontrar rapidamente o valor desejado. Uma pequena probabilidade está associada ao fato dele ter que percorrer mais passos do que o algoritmo determinístico. De fato, a eficiência do algoritmo depende da entrada. Um programa probabilístico P é dito ter uma saída y para uma entrada x, se a probabilidade de P ter uma computação com saída y com entrada x é maior que 1/2. Se não existe y, então a saída de P para a entrada x é indefinida. Um programa probabilístico P computa uma função f(x) se P em cada entrada x tem probabilidade 1 ɛ(x) para uma computação aceita com saída f(x) onde, 1. ɛ(x) 1/2 sempre que f(x) for definida. 2. ɛ(x) é indefinida sempre que f(x) for indefinida. ɛ(x) é dito ser a probabilidade de erro de P. A probabilidade de erro é dita ser limitada se existe uma contante e < 1/2 tal que e(x) e para todo x ao qual e(x) é definida. Um programa P é dito ser um programa probabilístico com erro limitado se ele possui uma probabilidade de erro limitada. 5

7 3.2 Exemplo de Aplicação de Computação Probabilística Algoritmos Genéticos Um algoritmo genético consiste em uma técnica de aproximação em problemas de otimização e busca. Eles reusam conceitos como mutação, seleção natural e recombinação (ou crossing over). A evolução se inicia, geralmente, através de um conjunto criado aleatoriamente. Os algoritmos genéricos são classificados como exemplo de computação probabilística pois, ao contrário dos algoritmos clássicos, eles usam transições probabilísticas e não regras determinísticas. Além disso, os resultados são apresentados como uma população de soluções e não como uma solução única [6]. O Algoritmo 1, extraído de [1], mostra um trecho de pseudo-código descrevendo um algoritmo genético, onde a função objetivo passada como parâmetro é o objeto da otimização e o indivíduo é o portador de seu código genético. A probabilidade está inserida na função seleção, que normalmente ordena os individuos de acordo com a função objetivo e lhes atribui probabilidades descrescentes de serem escolhidos. Pseudocode 1 Exemplo (pseudo-código) de um algoritmo genético 1 funç~ao AlgoritmoGenético(populaç~ao, funç~ao-objetivo) saídas: indivíduo 2 entradas: populaç~ao -> uma lista de indivíduos 3 funç~ao-objetivo -> uma funç~ao que recebe um indivíduo e retorna um número real. 4 repetir 5 lista de pais := seleç~ao(populaç~ao, funç~ao-objetivo) 6 populaç~ao := reproduç~ao(lista de pais) 7 enquanto nenhuma condiçao de parada for atingida 8 retorna o melhor indivíduo da populaç~ao de acordo com a funç~ao-objetivo Atualmente não se conhece algoritmos eficientes para encontrar solução exata para os problemas NP [3]. De fato, muitas pessoas acreditam não existir tais algoritmos e procuram por soluções alternativas. Uma dessas soluções é o uso de algoritmos genéticos. 6

8 4 Máquina de Turing Probabilística Lewis e Papadimitriou [8] mostram que quando autômatos finitos agem não-deterministicamente, nenhum aumento resulta no poder computacional (exceto que exponencialmente menos estados podem ser necessários para a mesma tarefa), embora os automatos de pilha não-determinísticos sejam mais poderosos que os determinísticos. Neste contexto, podemos também levar em consideração máquinas de Turing que não agem deterministicamente, podendo ter, dependendo do estado, mais de uma ação possível. Na teoria da computação, uma máquina de Turing probabilística é uma máquina de Turing não-determinística que decide randomicamente (passos lançamento-de-moeda) entre transições habilitadas seguindo uma determinada distribuição de probabilidade. Ou seja, além de passar a considerar o não-determinismo na computação de uma máquina de Turing [2], passa-se a considerar probabilidade de ocorrência de eventos. É importante ressaltar que máquinas de Turing probabilísticas são especializações de máquinas de Turing não-determinísticas. Este modelo possui várias implicações em relação ao modelo clássico de máquinas de Turing. Nesta seção será abordada a definição deste modelo, bem como algumas considerações a seu respeito. 4.1 Definição Formal Formalmente, uma máquina de Turing não-determinística pode ser descrita como uma quíntupla (K, Σ,, s, H), onde K, Σ, s eh são como para as máquinas de Turing padrão e é um subconjunto de ((K H)XΣ)X(KX(Σ {, })) em vez de uma função de (K H)XΣ para KX(Σ {, })). Ainda, as configurações e relações M e M* são definidas de modo natural. No entanto, M não precisa assumir um único valor, ou seja, uma configuração pode produzir várias outras em um único passo. Uma máquina de Turing probabilística é o modelo descrito acima adicionando-se probabilidades à computação de cada ramificação da máquina não determinística. Se na computação de uma entrada ω é gerado um caminho de execução (ramificação) b e, neste, foram dados k lançamentos de moedas, então a probabilidade do caminho é 1/2 k. Já a probabilidade de aceitação de uma entrada ω é dada por P [M accept ω] = Σ P [b]], ou seja, a soma de todos os caminhos de execução que aceitam a palavra ω. Desta observação concluímos também que P [M reject ω] = 1 P [M accept ω]. A máquina M continua reconhecendo linguagens apenas quando aceita todas as palavras da mesma e rejeita caso contrário. No entanto, levando em consideração o modelo probabilístico, é permitido uma pequena probabilidade de erro: 0 ɛ 0.5. Desta maneira, diz-se que M aceita uma 7

9 linguagem L com probabilidade de erro ɛ se: ω L P [M accept ω] 1 ɛ ω L P [M reject ω] 1 ɛ Uma consequência do modelo descrito acima é que a máquina de Turing probabilística pode gerar diferentes estados finais para a computação de uma mesma entrada. Além disso, este modelo gera respostas com determinadas probabilidades de estarem certas ou erradas. Este modelo vai de encontro ao modelo clássico de Turing. Na próxima Seção há uma discussão sobre como se dá a computação de uma entrada em uma máquina de Turing probabilística e qual as implicações no tocante ao poder computacional deste modelo. 4.2 Computação de uma Máquina de Turing Probabilística Com dito anteriormente, máquinas de Turing probabilísticas podem gerar diferentes saídas para a computação de uma mesma entrada. Por esta razão, é preciso cautela ao definir o que é o resultado de uma computação neste modelo. Papadimitriou e Lewis optaram por uma maneira simples de conduzir essa análise. Os autores acreditam ser mais simples considerar uma máquina de Turing mão-determinística que semidecide uma linguagem, justamente pelo fato de várias saídas poderem ser geradas pela computação de uma mesma entrada. Primeiro é preciso considerar a computação de máquinas não-determinísticas para depois tecer uma análise referente às máquinas probabilísticas. Deste modo, considerando M = ((K, Σ,, s, H)) uma máquina de Turing não-determinística, dizemos que M aceita uma entrada ω (Σ, )* se (s, ω) M (h, uaω) para algum h H e a Σ, u, ω Σ*. É possível notar que uma máquina de Turing probabilística aceita uma entrada ω mesmo que haja muitas computações relacionadas à entrada. Assim, dizemos que M semidecide a linguagem L (Σ {, }) se para todos os ω (Σ {, }) : ω L, se, e somente se, M aceita ω. Caso a probabilidade de uma transição seja igual a outra, podemos definir o modelo como uma máquina determinística com uma função adicional write onde o valor da função é uniformemente distribuído no alfabeto da máquina. No caso do alfabeto binário, é equivalente a escrever 0 ou 1 na fita. Como podemos analisar, uma máquina de Turing probabilística pode gerar resultados estocásticos; para uma dada entrada, o modelo pode aceita-la em uma execução e rejeita-la na outra. 8

10 No entanto, há ainda a necessidade de definir o que significa uma máquina de Turing não-determinística decidir uma linguagem ou computar uma função. Suponha que M = ((K, Σ,, s, y, n)) seja a máquina de Turing não-determinística. Dizemos que M decide a linguaguem L (Σ {, }) se as duas condições seguintes aplicam-se para todos os ω (Σ {, }). 1. Há um número natural n N, dependendo de M e ω, tal que não haja uma configuração C que satisfaz (s, ω) N/MC 2. ω L, se, e somente se, (s, ω) m(y, auv) para algum u, v Σ, a Σ. Por fim, dizemos que M computa a função f : (Σ {, }) (Σ {, }) se as seguintes duas condições aplicam-se para todos os ω (Σ {, }) : (a) Há um N, dependendo de M e ω, tal que não há configuração C satisfazendo (s, ω) C (b) (s, ω) m(h, uav), se, e somente se, ua = e v = f(w) Várias observações podem ser feitas ao analisarmos as definições acima. A primeira delas está relacionada a condição (a) descrita acima. Dela, podemos interpretar que para uma máquina de Turing não-determinística decidir uma linguagem e computar uma função, exigimos que todas as suas computações parem: Esta observação é feita postulando que não há computação em andamento após N passos, onde N é um limite superior dependente da máquina e da entrada. A outra observação a ser feita está relacionado ao modelo decidir uma linguagem: Para M decidir uma linguagem, somente é exigido que pelo menos uma de suas possíveis computações finais aceite a entrada. Ou seja, mesmo que haja computações rejeitadas para a entrada em determinados momentos, basta que apenas uma computação seja aceita para que M decida a linguagem. Por isso, para criar uma máquina probabilística que decida o complemento da linguagem, não basta apenas inverter os papéis dos estados y e n (uma vez que a máquina pode ter ambas as computações, de aceitação e de rejeição, para algumas entradas). Para mostrar que a classe das linguagens decididas por uma máquina de Turing não-determinística é fechada por complemento é preciso passar por uma máquina determinística equivalente: Se uma máquina de Turing mão-determinística M semidecide uma linguagem ou decide uma linguagem ou computa uma função, então há uma máquina de Turing padrão M semidecidindo ou decidindo a mesma linguagem ou computando uma função. A prova deste teorema, inclusa no livro Elements of the Theory of Computation, é a que se segue: É preciso descrever a construção para o caso no 9

11 qual M semidecide uma linguagem L; as construções para o caso de decidir se uma linguagem computa uma função são muito similares. Assim, suponha que M = (K, Σ,, s, H) seja uma máquina de Turing não-determinística semidecidindo uma linguagem L. Dada uma entrada ω, M irá executá-la sistematicamente em todas as possíveis computações por M1 procurando por uma que pare. Quando e se ele descobre uma computação de parada, ele também irá parar. Assim M pararia se e somente se M parar, como era exigido. A simulação de uma máquina de Turing não-determinística por uma determinística não consiste em uma simulação passo-a-passo. Em vez disso, ela segue por todas as possíveis computações da máquina de Turing nãodeterminística. Como um resultado, é necessário um número de passos exponencial em n para simular uma computação de n passos em uma máquina probabilística. Por fim, para uma máquina não-determinística computar uma função, é exigido que todas as possíveis computações estejam de acordo quanto ao resultado. Se não for possível decidir qual é o valor correto da função ( no caso de decidir ou semidecidir uma linguagem, a incerteza é resolvida postulando que a resposta positiva prevalece.) As considerações feitas até aqui também são válidas quando referenciamos máquinas de Turing probabilísticas, uma vez que essas máquinas se comportam como máquinas de Turing não-determinísticas com probabilidades associadas aos caminhos de execução Exemplo de Computação em uma Máquina Probabilística Para melhor entendimento de como conduz-se o processo de computação de uma entrada em uma máquina probabilística, é introduzido nesta Seção um exemplo simples de execução de máquina não-determinísticas, baseado na computação de números compostos. Um número composto é um número não-primo diferente de 1 ou de 0. Suponha que C = {100, 110, 1000, 1010,..., } seja o conjunto de rodas as representações binárias de números compostos s. Construir um algoritmo que decida C é um problema bastante conhecido em computação pela sua complexidade e importância. Isto porque baseia-se na fatoração de um número. Um algoritmo guloso para descobrir os fatores de um número dado é percorrer exaustivamente todos os números menores que a raiz quadrada deste número. De fato, saberíamos os seus fatores. No entanto, esta solução não é eficiente. O problema é que parece não existir nenhum método mais direto e eficiente. O fato é que podemos usar o não-determinismo para projetar uma máquina 10

12 para semidecidir C de maneira relativamente simples. A computação consiste em adivinhar os fatores, caso haja: Escolhe-se não-deterministicamente dois números binários p e q maiores que um e escreve sua representação binária ao lado da entrada. Ultiliza uma máquina de multiplicação para substituir a representação binária de p e q pelo seu produto. Verifica se os dois inteiros, n e p X q, são os mesmos. Pára se os dois inteiros forem iguais; c. c., continua sem fim de algum modo. Agora vamos simular a computação desta máquina com a entreda 66 ( ). É possível perceber que o passo 1 causará muitas rejeições, visto que existem muitas escolhas de p e q que multiplicados não são iguais a 66. No entanto, como 66 é um número coposto, haverá pelo menos uma computação p e q que será igual a 66 e M acabará a sua computação aceitando a entrada. Lembre-se que uma máquina probabilística semidecide uma linguagem se uma de suas computações é aceita. De fato, haverá mais que uma configuração de p e q as quais a máquina aceita. Em uma máquina probabilística a computação é semelhante. No entanto a resposta seria dada com uma certa probabilidade de estar correta ou não, visto que os passos a serem seguidos foram escolhidos randomicamente. O fato importante em relação a este problema é que esta máquina descrita acima pode ser substituída por uma máquina determinística que decide a linguagem. É importante destacar que o número de possíveis computações de uma máquina não determinística é limitado. A exploração destes vários caminhos é feita utilizando-se o procedimento do rabo de pombo. A observação crucial é a seguinte: Apesar de haver várias configurações C dada uma configuração inicial C, o número de configurações C é limitado e dependente somente de M e não de C. Para o caso do exemplo acima, esse número é computado da seguinte maneira: Suponha que um dado inteiro n possui l bits. Suponha que N1 seja o número máximo de passos em qualquer comptação pela máquina multiplicadora em qualquer entrada de comprimento 2l + 1 ou menos; este é um número finito, o máximo de uma quantidade finita de naturais. Suponha que N2 seja o número de passos que ele leva para comparar duas strings de, no máximo, 3l de comprimento cada. Então, qualquer computação por M terminará após N1 + N2 + 3l + 6 passos, certamente um número finito dependente somente da máquina e da entrada. 11

13 4.3 Poder Computacional de uma Máquina de Turing Probabilística É preciso separar os conceitos de poder computacional e eficiência antes de prosseguirmos com a análise das máquinas de Turing probabilísticas. Poder computacional está relacionado ao aumento no número de linguagens que uma máquina pode reconhecer, enquanto que eficiência está relacionado a rapidez que uma máquina computa uma entrada. Intuitivamente pode parecer que o não-determinismo das máquinas probabilísticas faz com que esse modelo seja mais poderoso computacionalmente que o modelo clássico, visto que eles podem executar muitas possíveis computações para uma entrada, requerendo apenas que uma dessas computações leve a um estado de aceitação. No entanto: Qualquer linguagem que pode ser reconhecida por uma máquina de Turing não-determinística também pode ser reconhecida por uma máquina de Turing determinística. Uma das questões centrais na teoria de complexidade computacional é se a randomicidade inerente às máquinas de Turing não-determinística aumenta a eficiência do modelo clássico, isto é, existe um problema que pode ser resolvido em tempo polinomial por uma máquina de Turing não-determinística mas não pode ser resolvido por uma máquina de Turing determinística. Isto é equivalente a perguntar se uma máquina determinística pode simular eficientemente todas as máquinas não-determinísticas. De fato, sabemos que uma máquina determinística pode simular (como demonstrado na Seção anterior) cada transição de uma máquina probabilística, fazendo múltiplas cópias do estado simulado quando múltiplas transições forem possíveis, e simulando-as em paralelo (não confundir com execução paralela de processos). Esta simulação pode consumir tempo considerável. O fato é que este tempo não é conhecido em geral. Em outras palavras, é equivalente à definição de P = NP, tão conhecida quando o assunto complexidade computacional é referenciado. É importante lembrar que a tese de Church-Turing [4] afirma que: Se um problema não tem solução polinomial em uma máquina de Turing não-determinística então não tem solução eficiente em outro dispositivo de computação. Este fato está relacionado à eficiência e não ao poder computacional. Ainda, a classe das linguagens reconhecida por uma máquina nãodeterminística é igual a classe das linguagens reconhecida por uma máquina determinística. 12

14 5 Algoritmos Probabilísticos Existem várias instâncias de problemas que são resolvidos com algoritmos randômicos e probabilísticos de maneira eficiente e que não existem bons algoritmos determinísticos que executem a mesma tarefa com eficiência semelhante. Os algoritmos probabilísticos são aqueles que utilizam a probabilidade como parte de sua computação. Isto tem como consequência o fato de que a máquina que implementa o algoritmo deve acessar um gerador de números pseudo-aleatórios. O algoritmo utiliza-se de bits aleatórios como viés para definir o seu comportamento. Ao contrário dos algoritmos convencionais, um algoritmo probabilístico, dada uma mesma entrada, não necessariamente levará a um mesmo estado final após a computação desta entrada. Muitos algoritmos probabilísticos possuem o one-side error; ou seja, se a palavra de entrada está contida no conjunto, então o algoritmo a aceita com alta probabilidade; mas se a palavra não está contida no conjunto, então o algoritmo sempre a rejeita. 5.1 Tipos de Algoritmos Probabilísticos Algoritmos Probabilísticos Numéricos Faz parte da categoria que não garante a exatidão no resultado. Este tipo de algoritmo calcula a resposta com uma determinada precisão associada à computação. O resultado gerado é comumente apresentado em forma de intervalo de confiança, uma vez que não é possível determinar com exatidão o resultado da computação. Quanto maior o número de execuções do algoritmo, mais preciso será o resultado. Um exemplo de algoritmo deste tipo é o calculo do valor de Π Algoritmos de Monte Carlo Este algoritmo sempre produz uma mesma resposta para uma determinada entrada. No entanto, a resposta pode não ser correta. Se o algoritmo é dito p-correto, então dizemos que a resposta é correta com probabilidade p para uma determina entrada. Não há como assegurar se uma dada resposta é correta utilizando este tipo de algoritmo. Um exemplo de algoritmo deste tipo é determinar se uma dado número é primo ou não. 13

15 5.1.3 Algoritmos de Las Vegas Fazem parte da categoria de algoritmos que garantem a exatidão da resposta. A execução do algoritmo sempre retorna uma resposta correta. No entanto, o tempo de execução do mesmo é probabilístico. Isto porque escolhas probabilísticas são feitas com o intuito de escolher o menor caminha da computação. O algoritmo assume que falhou quando uma resposta incorreta é achada. Um exemplo de algoritmo deste tipo é o quicksort com escolha do pivo aleatória. 5.2 Gerador de Números Pseudo-aleatórios Uma das aplicações de algoritmos probabilísticos é a geração de números pseudo-aleatórios através de funções matemáticas pré-definidas. Um gerador de número pseudo-aleatório é um algoritmo que gera uma sequência de números, os quais são aproximadamente independentes um dos outros. É importante destacar que a saída de um algoritmo gerador de números aleatórios não é verdadeiramente aleatória; ela somente aproxima algumas das propriedades dos números aleatórios. Números verdadeiramente aleatórios só podem ser gerados usando dispositivos de hardware. No entanto, números pseudo-aleatórios cumprem um importante papel na ciência da computação. Números pseudo-aleatórios são uma parte crítica da computação moderna, da criptografia até o método de Monte Carlo passando por sistemas de simulação. Uma cuidadosa análise matemática é necessária para assegurar que a geração dos números seja suficientemente aleatória. O problema consiste em gerar sequências de números, que correspondam a valores a partir de uma distribuição uniforme tendo como limites 0 e 1, isto é, uma função densidade de probabilidade assim definida: F (x) = 0 se x < 0, x se 0 x 1, 1 se x > 1 A média, variância, bem como o aspecto da função de distribuição de probabilidade podem ser visualizados na Figura 5.2. As técnicas mais comuns para geração de números pseudoaleatórios são os métodos congruenciais: Gerador congruencial linear ou misto (Lehmer): Zi = (azi 1 + c)(modm) Gerador congruencial multiplicativo: Zi = azi 1(modm) 14

16 Figura 1: Estatísticas sobre a função f(x) Gerador Aditivo: Zi = (Zi 1 + Zi k)(modm), onde (K=2, corresponde à sequência de Fibonacci) 5.3 Complexidade A classe das linguagens que são reconhecidas por uma máquina de Turing probabilística (em tempo polinomial) com um erro no interval [0, 0.5) é denominada BPP [5, 9]. No entanto, este erro pode ser amenizado utilizando um lema, denominado lema da aplicaficação, que diz que para toda máquina probabilística (em tempo polinomial = polin(n)) M1 que opera com erro Σ, existe uma máquina equivalente M2 que opera com uma probabilidade de erro de 2 - polin(n). Isto pode ser provado dado que M2 pode simular a máquina M1, executá-la um número polinomial de vezes e fazer uma escolha majoritária entre as respostas computadas. Existe um algoritmo probabilístico para teste de primalidade pertencente a BPP. RP á a classe das linguagens que são reconhecidas por uma máquina de Turing probabilística (em tempo polinomial) no qual as entradas pertencentes a linguagem são aceitas com probabilidade de no mínimo 0.5 e entradas não pertencentes a linguagem são rejeitadas com probabilidade 1. Este tipo de erro, denominado erro de um único lado, é muito comum nos algoritmos probabilísticos. Nesta classe também é possível a redução exponencial do erro cometido. ZPP engloba os problemas que possuem algoritmos que resolvem em tempo polinomial (no caso médio) e dará sempre uma resposta correta, mesmo que possam não parar em alguns casos. A Figura 2 ilustra as relações entre as classes de complexidade probabilísticas e não probabilísticas. 15

17 Figura 2: Relações entre classes de complexidade prob. e não-prob. 6 Considerações Finais Computação probabilística foi abordada neste documento de maneira simples e direta. O modelo de máquina de Turing probabilística é mais uma tentativa de aumentar o poder computacional do modelo clássico de máquina de Turing. No entanto, vimos que todas as linguagens aceitas por uma máquina de Turing probabilística também são aceitas por uma máquina determinística. A relação entre máquinas não-determinísticas e máquinas probabilísticas foi delineada neste documento. Foi demonstrado também, através de um simples exemplo, como se dá o processo de computação em uma máquina probabilística. Outra contribuição importante deste documento é a demonstração de que para toda máquina de Turing não-determinística existe uma máquina determinística equivalente. Além disso, definições formais foram expostas afim de não gerar ambiguidades na leitura das mesmas. Outro ponto destacado neste documento foi o conceito de algoritmo probabilístico. Uma listagem dos vários tipos de algoritmos probabilísticos foi feita, apresentando exemplos de cada um desses tipos. Analisou-se também o ganho em complexidade que os algoritmos probabilísticos trazem à computação. Por fim, acredita-se que este documento possa servir de referência para aqueles que necessitam de material introdutório relacionado à máquinas de Turing probabilísticas. 16

18 Referências [1] Algoritmos genéticos, [2] M. Atallah. Algorithms and Theory of Computation Handbook. CRC Press, [3] S. Cook. The P versus NP Problem. The Millennium Prize Problems, [4] B. Copeland. The Church-Turing Thesis [5] D. Deutsch, A. Ekert, and R. Lupacchini. Machines, logic and quantum physics. Bulletin of Symbolic Logic, 6(3): , [6] D. Goldberg. Genetic Algorithms in Search, Optimization and Machine Learning. Addison-Wesley Longman Publishing Co., Inc. Boston, MA, USA, [7] P. Halmos. A Hilbert Space Problem Book. Springer-Verlag, [8] H. Lewis and C. Papadimitriou. Elements of the Theory of Computation. ACM SIGACT News, 29(3):62 78, [9] M. Sipser. Introduction to the Theory of Computation. [10] A. Turing. On computable numbers, with an application to the Entscheidungsproblem. Proceedings of the London Mathematical Society, 42(2): ,

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Seção 5.1 Problemas indecidíveis. Slides originais gentilmente cedidos pela Profa. Ariane Machado Lima

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Seção 5.1 Problemas indecidíveis. Slides originais gentilmente cedidos pela Profa. Ariane Machado Lima ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO Seção 5.1 Problemas indecidíveis Slides originais gentilmente cedidos pela Profa. Ariane Machado Lima 1 Na aula passada... A MT é indecidível (usando diagonalização)

Leia mais

2. Método de Monte Carlo

2. Método de Monte Carlo 2. Método de Monte Carlo O método de Monte Carlo é uma denominação genérica tendo em comum o uso de variáveis aleatórias para resolver, via simulação numérica, uma variada gama de problemas matemáticos.

Leia mais

Outras Máquinas de Turing

Outras Máquinas de Turing Capítulo 10 Outras Máquinas de Turing 10.1. Pequenas variações da TM padrão 10.2. MT s com dispositivos de armazenamento mais complexos 10.3. MT s não-determinísticas 10.4. A Máquina de Turing Universal

Leia mais

Complemento IV Introdução aos Algoritmos Genéticos

Complemento IV Introdução aos Algoritmos Genéticos Complemento IV Introdução aos Algoritmos Genéticos Esse documento é parte integrante do material fornecido pela WEB para a 2ª edição do livro Data Mining: Conceitos, técnicas, algoritmos, orientações e

Leia mais

Introdução à Simulação

Introdução à Simulação Introdução à Simulação O que é simulação? Wikipedia: Simulação é a imitação de alguma coisa real ou processo. O ato de simular algo geralmente consiste em representar certas características e/ou comportamentos

Leia mais

Máquinas de Turing 1

Máquinas de Turing 1 Máquinas de Turing 1 Agenda Máquinas de Turing (TM) Alan Turing Motivação Tese de Church-Turing Definições Computação Configuração de TM Reconhecedores vs. Decisores 2 Alan Turing Alan Turing é um dos

Leia mais

Faculdade de Computação

Faculdade de Computação UNIVERSIDADE FEDERAL DE UBERLÂNDIA Faculdade de Computação Disciplina : Teoria da Computação Professora : Sandra de Amo Solução da Lista de Exercícios n o 6 - Problemas Indecidiveis Exercicio 7-5.5 do

Leia mais

O trabalho pioneiro nesta área remonta a Ulam, que o teria inventado em 1946 ao estudar as possibilidades de ganhar no jogo de cartas Solitário.

O trabalho pioneiro nesta área remonta a Ulam, que o teria inventado em 1946 ao estudar as possibilidades de ganhar no jogo de cartas Solitário. Prof. Lorí Viali, Dr. viali@mat.ufrgs.br http://www.ufrgs.br/~viali/ Números aleatórios (NA) são elementos básicos necessários na simulação de quase todos os sistemas discretos. Eles podem ser utilizados

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

Limitações dos Computadores

Limitações dos Computadores Limitações dos Computadores Baseado em Computers Ltd. What they really can t do, David Harel. Oxford University Press, 2000. Computadores e Redes de Comunicação Mestrado em Gestão de Informação, FEUP 2004/07

Leia mais

MODELAGEM COM EQUAÇÕES DIFERENCIAIS DE PRIMEIRA ORDEM E APLICAÇÕES À ECONOMIA

MODELAGEM COM EQUAÇÕES DIFERENCIAIS DE PRIMEIRA ORDEM E APLICAÇÕES À ECONOMIA MODELAGEM COM EQUAÇÕES DIFERENCIAIS DE PRIMEIRA ORDEM E APLICAÇÕES À ECONOMIA PAULO, João Pedro Antunes de Universidade Estadual de Goiás UnU de Iporá jpadepaula@hotmail.com RESUMO Esta pesquisa foi feita

Leia mais

2 Máquinas de Estados em Jogos Eletrônicos

2 Máquinas de Estados em Jogos Eletrônicos 2 Máquinas de Estados em Jogos Eletrônicos Máquinas de Estados são um conceito importante em várias áreas da ciência. Em particular, a engenharia e a computação utilizam Máquinas de Estados como ferramentas

Leia mais

Geração de Números Aleatórios e Simulação

Geração de Números Aleatórios e Simulação Departamento de Informática Geração de Números Aleatórios e imulação Métodos Quantitativos LEI 26/27 usana Nascimento (snt@di.fct.unl.pt) Advertência Autores João Moura Pires (jmp@di.fct.unl.pt) usana

Leia mais

Simulação Estocástica

Simulação Estocástica Simulação Estocástica O que é Simulação Estocástica? Simulação: ato ou efeito de simular Disfarce, fingimento,... Experiência ou ensaio realizado com o auxílio de modelos. Aleatório: dependente de circunstâncias

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores INTRODUÇÃO AOS ALGORITMOS E À PROGRAMAÇÃO DE COMPUTADORES PARTE 1 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Programas e Programação

Leia mais

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem: 1 As notas de aula que se seguem são uma compilação dos textos relacionados na bibliografia e não têm a intenção de substituir o livro-texto, nem qualquer outra bibliografia. Introdução O Cálculo Numérico

Leia mais

Os limites da computação algorítmica

Os limites da computação algorítmica Capítulo 12 Os limites da computação algorítmica 12.1. Problemas que não podem ser resolvidos pelas MT. 12.2. Problemas indecidíveis para LRE 12.3. Problema da correspondência de Post 12.4. Problemas indecidíveis

Leia mais

Disciplina de Projetos e Análise de Algoritmos. Aula 1 - Apresentação aos Algoritmos Computacionais

Disciplina de Projetos e Análise de Algoritmos. Aula 1 - Apresentação aos Algoritmos Computacionais Aula 1 - Apresentação aos Algoritmos Computacionais O que é a Disciplina? Disciplina de Projeto e Análise de Algoritmos Esta é uma disciplina de Algoritmos em nível de Pós-Graduação! Temas a serem abordados:

Leia mais

Algoritmos Randomizados: Introdução

Algoritmos Randomizados: Introdução Algoritmos Randomizados: Introdução Celina Figueiredo Guilherme Fonseca Manoel Lemos Vinícius Sá 26º Colóquio Brasileiro de Matemática IMPA Rio de Janeiro Brasil 2007 Resumo Definições Monte Carlo Variáveis

Leia mais

Pesquisa Operacional

Pesquisa Operacional GOVERNO DO ESTADO DO PARÁ UNIVERSIDADE DO ESTADO DO PARÁ CENTRO DE CIÊNCIAS NATURAIS E TECNOLOGIA DEPARTAMENTO DE ENGENHARIA Pesquisa Operacional Tópico 4 Simulação Rosana Cavalcante de Oliveira, Msc rosanacavalcante@gmail.com

Leia mais

1.1. Organização de um Sistema Computacional

1.1. Organização de um Sistema Computacional 1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes

Leia mais

2. Objetivos do Sistema

2. Objetivos do Sistema Desenvolvimento de Um Programa Interpretador e Resolvedor para Máquinas de Estado Finito Adriana Postal 1, Ana Paula Fredrich 1, Cassiano Cesar Casagrande 1, Evaristo Wychoski Benfatti 1, Josué Pereira

Leia mais

INFORMÁTICA E TEORIA DA COMPUTAÇÃO

INFORMÁTICA E TEORIA DA COMPUTAÇÃO CAPA INFORMÁTICA E TEORIA DA COMPUTAÇÃO 2014 SUMARÉ Índice Informática... 02 Etimologia... 02 Origem e Concepção... 03 Teoria da Computação... 03 Conclusão... 04 Informática A informática é um termo usado

Leia mais

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem: 1 UNIVERSIDADE FEDERAL DE VIÇOSA Departamento de Matemática - CCE Cálculo Numérico - MAT 271 Prof.: Valéria Mattos da Rosa As notas de aula que se seguem são uma compilação dos textos relacionados na bibliografia

Leia mais

Avaliação de Desempenho

Avaliação de Desempenho Avaliação de Desempenho Aulas passadas Modelagem de sistemas via cadeias de Markov Aula de hoje Introdução à simulação Gerando números pseudo-aleatórios 1 O Ciclo de Modelagem Sistema real Criação do Modelo

Leia mais

O que queremos. Processamento Estatístico da Linguagem Natural. Parsing Morfológico. Regras Simples. Adicionando palavras. Regras Derivacionais

O que queremos. Processamento Estatístico da Linguagem Natural. Parsing Morfológico. Regras Simples. Adicionando palavras. Regras Derivacionais Processamento Estatístico da Linguagem Natural Aula 5 Professora Bianca (Sala 302 Bloco E) bianca@ic.uff.br http://www.ic.uff.br/~bianca/peln/ O que queremos Algo que faça automaticamente um mapeamento

Leia mais

Lista n 0 1 de Exercícios de Teoria da Computação

Lista n 0 1 de Exercícios de Teoria da Computação Lista n 0 1 de Exercícios de Teoria da Computação UFU-Curso de Bacharelado em Ciência da Computação - 7 0 período Profa. Sandra de Amo Exercícios de Revisão : Autômatos e Gramáticas 1. Mostre que a linguagem

Leia mais

Máquinas de Turing. Juliana Kaizer Vizzotto. Disciplina de Teoria da Computação. Universidade Federal de Santa Maria

Máquinas de Turing. Juliana Kaizer Vizzotto. Disciplina de Teoria da Computação. Universidade Federal de Santa Maria Universidade Federal de Santa Maria Disciplina de Teoria da Computação Roteiro Definição Formal de Máquina de Turing Mais exemplos Definição Formal de Máquina de Turing Uma máquina de Turing é uma 7-upla,

Leia mais

ECO039 Linguagens Formais

ECO039 Linguagens Formais Prof a.dra.thatyana de Faria Piola Seraphim Universidade Federal de Itajubá thatyana@unifei.edu.br Introdução ˆ As três principais áreas da teoria da computação (Autômatos, Computabilidade e Complexidade)

Leia mais

CIÊNCIA DA COMPUTAÇÃO E SISTEMAS DA INFORMAÇÃO

CIÊNCIA DA COMPUTAÇÃO E SISTEMAS DA INFORMAÇÃO CIÊNCIA DA COMPUTAÇÃO E SISTEMAS DA INFORMAÇÃO MATERIAL INSTRUCIONAL ESPECÍFICO Tomo V 1 Questão 1 Questão 1. 1 O problema P versus NP é um problema ainda não resolvido e um dos mais estudados em Computação.

Leia mais

INF 1771 Inteligência Artificial

INF 1771 Inteligência Artificial Edirlei Soares de Lima INF 1771 Inteligência Artificial Aula 04 Algoritmos Genéticos Introdução Algoritmos genéticos são bons para abordar espaços de buscas muito grandes e navegálos

Leia mais

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante Cálculo Numérico Aula : Computação numérica. Tipos de Erros. Aritmética de ponto flutuante Computação Numérica - O que é Cálculo Numérico? Cálculo numérico é uma metodologia para resolver problemas matemáticos

Leia mais

Aula 01. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson.

Aula 01. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios Aula 01 Slide 1 BIBLIOGRAFIA SCHILDT H. C Completo e Total, Makron Books. SP, 1997. Curso de linguagem C da UFMG. ZIVIANI,

Leia mais

Resíduos Quadráticos e Fatoração: uma aplicação à criptoanálise do RSA

Resíduos Quadráticos e Fatoração: uma aplicação à criptoanálise do RSA Resíduos Quadráticos e Fatoração: uma aplicação à criptoanálise do RSA Charles F. de Barros 20 de novembro de 2008 Resumo Faremos uma breve introdução ao conceito de resíduos quadráticos, descrevendo em

Leia mais

Notas de aula número 1: Otimização *

Notas de aula número 1: Otimização * UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL UFRGS DEPARTAMENTO DE ECONOMIA CURSO DE CIÊNCIAS ECONÔMICAS DISCIPLINA: TEORIA MICROECONÔMICA II Primeiro Semestre/2001 Professor: Sabino da Silva Porto Júnior

Leia mais

ALGORITMOS GENÉTICOS: UMA VISÃO EXPLANATÓRIA

ALGORITMOS GENÉTICOS: UMA VISÃO EXPLANATÓRIA 136 ALGORITMOS GENÉTICOS: UMA VISÃO EXPLANATÓRIA FILITTO, Danilo 1 Resumo: Os algoritmos Genéticos inspiram-se no processo de evolução natural e são utilizados para resolver problemas de busca e otimização

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos Classes de Complexidades de Problemas Prof. Osvaldo Luiz de Oliveira Estas anotações devem ser complementadas por apontamentos em aula. Tempo polinomial Um algoritmo A, com entrada

Leia mais

Aritmética Binária e. Bernardo Nunes Gonçalves

Aritmética Binária e. Bernardo Nunes Gonçalves Aritmética Binária e Complemento a Base Bernardo Nunes Gonçalves Sumário Soma e multiplicação binária Subtração e divisão binária Representação com sinal Sinal e magnitude Complemento a base. Adição binária

Leia mais

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto Computabilidade 2012/2013 Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto Capítulo 1 Computabilidade 1.1 A noção de computabilidade Um processo de computação

Leia mais

CI165 Introdução. André Vignatti. 31 de julho de 2014

CI165 Introdução. André Vignatti. 31 de julho de 2014 Introdução 31 de julho de 2014 Antes de mais nada... Os slides de 6 aulas (introdução, insertion sort, mergesort, quicksort, recorrências e limitantes de ordenação) foram originalmente feitos pelos Profs.

Leia mais

Avaliação de Desempenho de Sistemas Discretos

Avaliação de Desempenho de Sistemas Discretos Avaliação de Desempenho de Sistemas Discretos Parte IV: Simulação Professor: Reinaldo Gomes reinaldo@dsc.ufcg.edu.br Parte 4 Simulação P A R T E Etapas básicas em um estudo de simulação Geração de números

Leia mais

CAPÍTULO 9 Exercícios Resolvidos

CAPÍTULO 9 Exercícios Resolvidos CAPÍTULO 9 Exercícios Resolvidos R9.1) Diâmetro de esferas de rolamento Os dados a seguir correspondem ao diâmetro, em mm, de 30 esferas de rolamento produzidas por uma máquina. 137 154 159 155 167 159

Leia mais

3 ALGORITMOS GENÉTICOS : CONCEITOS BÁSICOS E EXTENSÕES VINCULADAS AO PROBLEMA DE MINIMIZAÇÃO DE PERDAS

3 ALGORITMOS GENÉTICOS : CONCEITOS BÁSICOS E EXTENSÕES VINCULADAS AO PROBLEMA DE MINIMIZAÇÃO DE PERDAS 3 ALGORITMOS GENÉTICOS : CONCEITOS BÁSICOS E EXTENSÕES VINCULADAS AO PROBLEMA DE MINIMIZAÇÃO DE PERDAS 3.1 - Conceitos Básicos Entendemos como algoritmo um conjunto predeterminado e bem definido de regras

Leia mais

Primeira Lista de Exercícios de Estatística

Primeira Lista de Exercícios de Estatística Primeira Lista de Exercícios de Estatística Professor Marcelo Fernandes Monitor: Márcio Salvato 1. Suponha que o universo seja formado pelos naturais de 1 a 10. Sejam A = {2, 3, 4}, B = {3, 4, 5}, C =

Leia mais

2. Representação Numérica

2. Representação Numérica 2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos

Leia mais

Técnicas e Instrumentos Utilizados na Pesquisa Científica Cavalcanti

Técnicas e Instrumentos Utilizados na Pesquisa Científica Cavalcanti Técnicas e Instrumentos Utilizados na Pesquisa Científica Técnicas de Pesquisa Técnica: Conjunto de preceitos ou processos de que se serve uma ciência. Toda ciência utiliza inúmeras técnicas na obtenção

Leia mais

Algoritmos Genéticos (GA s)

Algoritmos Genéticos (GA s) Algoritmos Genéticos (GA s) 1 Algoritmos Genéticos (GA s) Dado um processo ou método de codificar soluções de um problema na forma de cromossomas e dada uma função de desempenho que nos dá um valor de

Leia mais

Empresa de Pesquisa Energética (EPE) 2014. Analista de Projetos da Geração de Energia

Empresa de Pesquisa Energética (EPE) 2014. Analista de Projetos da Geração de Energia Empresa de Pesquisa Energética (EPE) 2014 Analista de Projetos da Geração de Energia Oi, pessoal! Vou resolver as quatro questões de Estatística (53 a 56) da prova elaborada pela banca Cesgranrio para

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Roteiro Inspeção Defeitos dos Software Classificação dos Erros Técnica de Leitura Ad-hoc Checklist Exercício Inspeção Inspeção de Software Definição É um método de análise estática

Leia mais

Análise e Projeto de Algoritmos

Análise e Projeto de Algoritmos Análise e Projeto de Algoritmos Prof. Eduardo Barrére www.ufjf.br/pgcc www.dcc.ufjf.br eduardo.barrere@ice.ufjf.br www.barrere.ufjf.br Complexidade de Algoritmos Computabilidade: Um problema é computável

Leia mais

MODELO DE AVALIAÇÃO EM PROJETOS DE INVESTIMENTO DE CAPITAL

MODELO DE AVALIAÇÃO EM PROJETOS DE INVESTIMENTO DE CAPITAL MODELO DE AVALIAÇÃO EM PROJETOS DE INVESTIMENTO DE CAPITAL Marcelo Maciel Monteiro Universidade Federal Fluminense, Engenharia de Produção Rua Martins Torres 296, Santa Rosa, Niterói, RJ, Cep 24240-700

Leia mais

Programação I. Introdução a Lógica de Programação

Programação I. Introdução a Lógica de Programação Engenharia de Controle e Automação Programação I Introdução a Lógica de Programação Lara Popov Zambiasi Bazzi Oberderfer Ementa Introdução a lógica de programação e algoritmos. Constantes, variáveis e

Leia mais

Simulação Transiente

Simulação Transiente Tópicos Avançados em Avaliação de Desempenho de Sistemas Professores: Paulo Maciel Ricardo Massa Alunos: Jackson Nunes Marco Eugênio Araújo Dezembro de 2014 1 Sumário O que é Simulação? Áreas de Aplicação

Leia mais

Projeto e Análise de Algoritmos Projeto de Algoritmos Heurísticas e Algoritmos Aproximados

Projeto e Análise de Algoritmos Projeto de Algoritmos Heurísticas e Algoritmos Aproximados Projeto e Análise de Algoritmos Projeto de Algoritmos Heurísticas e Algoritmos Aproximados Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Universidade Federal de Alfenas Departamento de Ciências

Leia mais

Guia do professor. Ministério da Ciência e Tecnologia. Ministério da Educação. Secretaria de Educação a Distância.

Guia do professor. Ministério da Ciência e Tecnologia. Ministério da Educação. Secretaria de Educação a Distância. números e funções Guia do professor Objetivos da unidade 1. Analisar representação gráfica de dados estatísticos; 2. Familiarizar o aluno com gráfico de Box Plot e análise estatística bivariada; 3. Utilizar

Leia mais

A Otimização Colônia de Formigas

A Otimização Colônia de Formigas A Otimização Colônia de Formigas Estéfane G. M. de Lacerda Departamento de Engenharia da Computação e Automação UFRN 22/04/2008 Índice A Inspiração Biológica O Ant System Aplicado ao PCV O Ant System Aplicado

Leia mais

Pontifícia Universidade Católica do Rio Grande do Sul FACULDADE DE INFORMÁTICA

Pontifícia Universidade Católica do Rio Grande do Sul FACULDADE DE INFORMÁTICA DEPARTAMENTO: Fundamentos da Computação CURSO: Bacharelado em Sistemas de Informação DISCIPLINA: Fundamentos da Computação CÓDIGO: 4610H CRÉDITOS: 04 CARGA HORÁRIA: 60 horas-aula VALIDADE: a partir de

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 04: Análise de Algoritmos (Parte 1) Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes

Leia mais

Em um sistema de numeração de base b qualquer, um número positivo é representado pelo polinômio:

Em um sistema de numeração de base b qualquer, um número positivo é representado pelo polinômio: ELETRÔNICA DIGITAl I 1 SISTEMAS DE NUMERAÇÃO INTRODUÇÃO A base dos sistemas digitais são os circuitos de chaveamento (switching) nos quais o componente principal é o transistor que, sob o ponto de vista

Leia mais

Bacharelado em Ciência e Tecnologia Bacharelado em Ciências e Humanidades. Representação Gráfica de Funções

Bacharelado em Ciência e Tecnologia Bacharelado em Ciências e Humanidades. Representação Gráfica de Funções Bacharelado em Ciência e Tecnologia Bacharelado em Ciências e Humanidades BC 0005 Bases Computacionais da Ciência Representação Gráfica de Funções Prof a Maria das Graças Bruno Marietto graca.marietto@ufabc.edu.br

Leia mais

Universidade Federal de Alfenas

Universidade Federal de Alfenas Universidade Federal de Alfenas Projeto e Análise de Algoritmos Aula 02 Um pouco da história da computação humberto@bcc.unifal-mg.edu.br Última aula... Fundamentos de Matemática; Medida do Tempo de Execução

Leia mais

Cálculo numérico. ln 1 = 0. Representação numérica. Exemplo. Exemplos. Professor Walter Cunha. ln 1. I s

Cálculo numérico. ln 1 = 0. Representação numérica. Exemplo. Exemplos. Professor Walter Cunha. ln 1. I s Representação numérica Cálculo numérico Professor Walter Cunha Um conjunto de ferramentas ou métodos usados para se obter a solução de problemas matemáticos de forma aproximada. Esses métodos se aplicam

Leia mais

Resolução de problemas e desenvolvimento de algoritmos

Resolução de problemas e desenvolvimento de algoritmos SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de

Leia mais

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Uma visão de Intratabilidade, Classes P e NP - redução polinomial - NP-completos e NP-difíceis Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com

Leia mais

- Computação Evolutiva -

- Computação Evolutiva - - Computação Evolutiva - Prof. Dr. Cícero Garrozi DEINFO - UFRPE PPGIA@UFRPE cicerog@gmail.com Site da disciplina: http://cicerog.blogspot.com Sumário Situando a Computação Evolucionária Metáfora principal

Leia mais

Capítulo 1. x > y ou x < y ou x = y

Capítulo 1. x > y ou x < y ou x = y Capítulo Funções, Plano Cartesiano e Gráfico de Função Ao iniciar o estudo de qualquer tipo de matemática não podemos provar tudo. Cada vez que introduzimos um novo conceito precisamos defini-lo em termos

Leia mais

Criptografia e Teoria da Complexidade

Criptografia e Teoria da Complexidade Denise Goya (dhgoya@ime.usp.br) Joel Uchoa (joelsu@ime.usp.br) DCC - IME - USP MAC 5722 - Complexidade Computacional Prof. José Augusto Ramos Soares Seminário - novembro/2008 Sumário Introdução 1 Introdução

Leia mais

ALP Algoritmos e Programação. . Linguagens para Computadores

ALP Algoritmos e Programação. . Linguagens para Computadores ALP Algoritmos e Programação Iniciação aos computadores. Linguagens para Computadores. Compiladores, Interpretadores. Ambientes de Programação 1 Linguagens para Computadores. Linguagem binária: Dispositivos

Leia mais

Algoritmos e Programação I

Algoritmos e Programação I Algoritmos e Programação I Introdução a Computação Prof. Fernando Maia da Mota mota.fernandomaia@gmail.com CPCX/UFMS Fernando Maia da Mota 1 Computadores são dispositivos que só sabem fazer um tipo de

Leia mais

1. Método Simplex. Faculdade de Engenharia Eng. Celso Daniel Engenharia de Produção. Pesquisa Operacional II Profa. Dra. Lílian Kátia de Oliveira

1. Método Simplex. Faculdade de Engenharia Eng. Celso Daniel Engenharia de Produção. Pesquisa Operacional II Profa. Dra. Lílian Kátia de Oliveira Faculdade de Engenharia Eng. Celso Daniel Engenharia de Produção. Método Simple.. Solução eata para os modelos de Programação Linear O modelo de Programação Linear (PL) reduz um sistema real a um conjunto

Leia mais

Logo, para estar entre os 1% mais caros, o preço do carro deve ser IGUAL OU SUPERIOR A:

Logo, para estar entre os 1% mais caros, o preço do carro deve ser IGUAL OU SUPERIOR A: MQI 00 ESTATÍSTICA PARA METROLOGIA - SEMESTRE 008.0 Teste 6/05/008 GABARITO PROBLEMA O preço de um certo carro usado é uma variável Normal com média R$ 5 mil e desvio padrão R$ 400,00. a) Você está interessado

Leia mais

Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO

Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO Problemas & Algoritmos Para resolver um problema através dum computador é necessário encontrar em primeiro lugar uma maneira de descrevê-lo

Leia mais

Portas Lógicas Básicas Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 2h/60h

Portas Lógicas Básicas Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 2h/60h Portas Lógicas Básicas Prof. Rômulo Calado Pantaleão Camara Carga Horária: 2h/60h Colegiado de Engenharia da Computação CECOMP Introdução à Algebra de Boole Em lógica tradicional, uma decisão é tomada

Leia mais

6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto

6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto Capítulo 6. Autômatos com Pilha 6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto Nos exemplos da seção anterior, vimos que os autômatos com pilha existem para

Leia mais

Autómatos Finitos Determinísticos

Autómatos Finitos Determinísticos Ficha 2 Autómatos Finitos Determinísticos 2.1 Introdução Se olharmos, de forma simplificada, para um computador encontramos três componentes principais: a) A unidade de processamento central b) As unidades

Leia mais

Modelamento e simulação de processos

Modelamento e simulação de processos Modelamento e simulação de processos 4. Método de Monte Carlo Prof. Dr. André Carlos Silva 1. INTRODUÇÃO O Método de Monte Carlo (MMC) é um método estatístico utilizado em simulações estocásticas com diversas

Leia mais

Estratégias de Pesquisa

Estratégias de Pesquisa Estratégias de Pesquisa Ricardo de Almeida Falbo Metodologia de Pesquisa Departamento de Informática Universidade Federal do Espírito Santo Agenda Survey Design e Criação Estudo de Caso Pesquisa Ação Experimento

Leia mais

Dispositivo que de alguma maneira descreve o comportamento do sistema

Dispositivo que de alguma maneira descreve o comportamento do sistema Sistema: Conceito primitivo (intuitivo) Tentativas de definição: Agregação ou montagem de coisas, combinadas pelo homem ou pela natureza de modo a formar um todo unificado. Grupo de itens interdependente

Leia mais

Projeto e Análise de Algoritmos Projeto de Algoritmos Tentativa e Erro. Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br

Projeto e Análise de Algoritmos Projeto de Algoritmos Tentativa e Erro. Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Projeto e Análise de Algoritmos Projeto de Algoritmos Tentativa e Erro Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Laboratório de Pesquisa e Desenvolvimento Universidade Federal de Alfenas versão

Leia mais

Faculdade de Computação

Faculdade de Computação UNIVERSIDADE FEDERAL DE UBERLÂNDIA Faculdade de Computação Disciplina : Teoria da Computação Professora : Sandra Aparecida de Amo Lista de Exercícios n o 2 Exercícios sobre Modelos de Máquinas de Turing

Leia mais

Autómatos finitos não determinísticos (AFND)

Autómatos finitos não determinísticos (AFND) Autómatos finitos não determinísticos (AFND) [HMU00](Cap 2.3) Computações não determinísticas: o estado seguinte não é univocamente determinado pelo estado actual.num autómato finito (não-determínistico):

Leia mais

SISTEMAS DE NUMERAÇÃO

SISTEMAS DE NUMERAÇÃO Atualizado em Prof. Rui Mano E mail: rmano@tpd.puc rio.br SISTEMAS DE NUMERAÇÃO Sistemas de Numer ação Posicionais Desde quando se começou a registrar informações sobre quantidades, foram criados diversos

Leia mais

Otimização de Funções Não Lineares por Meio do Algoritmo Árvore da Montanha

Otimização de Funções Não Lineares por Meio do Algoritmo Árvore da Montanha Otimização de Funções Não Lineares por Meio do Algoritmo Árvore da Montanha Amarildo de Vicente Colegiado do Curso de Matemática Centro de Ciências Exatas e Tecnológicas da Universidade Estadual do Oeste

Leia mais

CURSO ON-LINE PROFESSOR GUILHERME NEVES 1

CURSO ON-LINE PROFESSOR GUILHERME NEVES 1 CURSO ON-LINE PROFESSOR GUILHERME NEVES 1 Olá pessoal! Resolverei neste ponto a prova de Matemática e Estatística para Técnico Administrativo para o BNDES 2008 organizado pela CESGRANRIO. Sem mais delongas,

Leia mais

Resolução de Problemas Com Procura. Capítulo 3

Resolução de Problemas Com Procura. Capítulo 3 Resolução de Problemas Com Procura Capítulo 3 Sumário Agentes que resolvem problemas Tipos de problemas Formulação de problemas Exemplos de problemas Algoritmos de procura básicos Eliminação de estados

Leia mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário

Leia mais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais Notas da Aula 4 - Fundamentos de Sistemas Operacionais 1. Threads Threads são linhas de execução dentro de um processo. Quando um processo é criado, ele tem uma única linha de execução, ou thread. Esta

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Otimização de Recuperação de Informação usando Algoritmos Genéticos

Otimização de Recuperação de Informação usando Algoritmos Genéticos Otimização de Recuperação de Informação usando Algoritmos Genéticos Neide de Oliveira Gomes, M. Sc., nog@inpi.gov.br Prof. Marco Aurélio C. Pacheco, PhD Programa de Doutorado na área de Métodos de Apoio

Leia mais

Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1

Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1 Projeto e Análise de Algoritmos Profa. Juliana Kaizer Vizzotto Projeto e Análise de Algoritmos - Aula 1 Roteiro Introdução Exemplo: ordenação Introdução Análise de Algoritmos Estudo teórico da performance

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

5COP096 TeoriadaComputação

5COP096 TeoriadaComputação Sylvio 1 Barbon Jr barbon@uel.br 5COP096 TeoriadaComputação Aula 14 Prof. Dr. Sylvio Barbon Junior Sumário - Problemas Exponenciais - Algoritmos Exponenciais usando Tentativa e Erro - Heurísticas para

Leia mais

CAPÍTULO 1 INTRODUÇÃO 1.1 INTRODUÇÃO

CAPÍTULO 1 INTRODUÇÃO 1.1 INTRODUÇÃO CAPÍTULO 1 INTRODUÇÃO 1.1 INTRODUÇÃO Em quase todas as nossas atividades diárias precisamos enfrentar filas para atender as nossas necessidades. Aguardamos em fila na padaria, nos bancos, quando trafegamos

Leia mais

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos 1. INTRODUÇÃO A ALGORITMOS O uso de algoritmos é quase tão antigo quanto a matemática. Com o passar do tempo, entretanto, ele foi bastante esquecido pela matemática. Com o advento das máquinas de calcular

Leia mais

Introdução às Máquinas de Turing (TM)

Introdução às Máquinas de Turing (TM) Comparação com computadores: Introdução às Máquinas de Turing (TM) um modelo matemático simples de um computador Semelhanças: lê e escreve em posições arbitrarias de memoria Diferenças: sem limite no tamanho

Leia mais

Segue-se o estudo da forma como os computadores armazenam e acedem às informações contidas na sua memória.

Segue-se o estudo da forma como os computadores armazenam e acedem às informações contidas na sua memória. 4. Variáveis Para a execução de qualquer tipo de programa o computador necessita de ter guardados os diferentes tipos de dados, já estudados. Esses dados estão guardados na sua memória. Segue-se o estudo

Leia mais

Linguagens Formais e Autômatos. Alfabetos, Palavras, Linguagens e Gramáticas

Linguagens Formais e Autômatos. Alfabetos, Palavras, Linguagens e Gramáticas Linguagens Formais e Autômatos Alfabetos, Palavras, Linguagens e Gramáticas Cristiano Lehrer, M.Sc. Introdução (1/3) A Teoria das Linguagens Formais foi originariamente desenvolvida na década de 1950 com

Leia mais

DIFERENCIAÇÃO IMPLÍCITA: VISUALIZANDO AS RETAS TANGENTES E NORMAIS COM O AUXÍLIO DO WINPLOT

DIFERENCIAÇÃO IMPLÍCITA: VISUALIZANDO AS RETAS TANGENTES E NORMAIS COM O AUXÍLIO DO WINPLOT DIFERENCIAÇÃO IMPLÍCITA: VISUALIZANDO AS RETAS TANGENTES E NORMAIS COM O AUXÍLIO DO WINPLOT Silmara Alexandra da Silva Vicente Universidade Presbiteriana Mackenzie Gisela Hernandes Gomes Universidade Presbiteriana

Leia mais

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas? Recorrências Muitas vezes não é possível resolver problemas de contagem diretamente combinando os princípios aditivo e multiplicativo. Para resolver esses problemas recorremos a outros recursos: as recursões

Leia mais