Melhores momentos AULA PASSADA. Complexidade Computacional p. 205

Documentos relacionados
Melhores momentos AULA PASSADA. Complexidade Computacional p. 136

Análise de Algoritmos

Análise de Algoritmos

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 25

Computabilidade e Complexidade (ENG10014)

Melhores momentos AULA 1. Algoritmos p.38/86

Draft-v0.1. Máquinas de Turing Máquinas de Turing

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT)

Universidade Federal de Alfenas

ECO026 TEORIA DA COMPUTAÇÃO. Prof: Rafael Santos Site:

Aula 10: Tratabilidade

Máquinas de Turing 3

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

Complexidade de Tempo

Análise de algoritmos. Parte I

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

PCC104 - Projeto e Análise de Algoritmos

Aula 1. Teoria da Computação III

Teoria da Computação. Capítulo 1. Máquina de Turing. Prof. Wanderley de Souza Alencar, MSc.

MAC5722 Complexidade Computacional

Análise de algoritmos

Teoria da Computação. Computabilidade e complexidade computacional

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 18. Cap O Problema da Parada

Apostila 06. Objetivos: Estudar a Computabilidade Estudar a Decidibilidade Estudar a Redutibilidade

Modelos de Computação Folha de trabalho n. 10

Universidade Federal de Alfenas

Computabilidade e Complexidade (ENG10014)

Teoria da Computação. Máquinas de Turing: variações

Redutibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)

5. Invólucros Convexos no Plano (cont )

Universidade Federal de Uberlândia Mestrado em Ciência da Computação

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Turing e Complexidade

ANÁLISE DE ALGORITMOS

Decidibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)

AULA 24. Algoritmos p.856/905

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais

Teoria da Computação 27 de Maio de 2015 Teste 2A Duração: 1h30

ANÁLISE DE ALGORITMOS: PARTE 3

Modelos Universais de Computação

Primeira Lista de Exercícios 2005/1... Exercício 1 Desenhe Diagrama de Estados para Máquinas que Decidem as Linguagens:

AULA 17. Melhores momentos. Segmento de soma máxima. Segmento de soma máxima. Conclusões. Algumas técnicas

Faculdade de Computação

Conjuntos disjuntos dinâmicos

1. Uma linguagem de uma máquina de Turing

Capítulo 8: O problema da parada. Decidibilidade e computabilidade. José Lucas Rangel Introdução.

SCC Capítulo 3 Linguagens Sensíveis ao Contexto e Autômatos Limitados Linearmente

Variedades Adicionais das Máquinas de Turing

Máquina de Turing. Controle finito

Máquinas de Turing - Computabilidade

Universidade Federal de Alfenas

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Introdução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.

Teoria da Computação. Unidade 3 Máquinas Universais. Referência Teoria da Computação (Divério, 2000)

Linguagens recursivamente enumeráveis

Uma forma de classificação

Universidade Federal de Alfenas

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Problemas Computáveis

Teoria da Computação 31 de Maio de 2017 Teste 2A Duração: 1h30

Marcos Castilho. DInf/UFPR. 16 de maio de 2019

SCC-5832 Teoria da Computação

Projeto e Análise de Algoritmos

Máquina de Turing Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente

Análise e Projeto de Algoritmos

Quantidade de memória necessária

Aula 9: Máquinas de Turing

Teoria da Computação Aula 9 Noções de Complexidade

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II

Estruturas de Dados Algoritmos

Linguaguens recursivamente enumeráveis

Análise de algoritmos

SCC Teoria da Computação e Linguagens Formais

Teoria da Computação. Computabilidade e complexidade computacional

Análise de algoritmos. Parte I

Linguagens Regulares. Prof. Daniel Oliveira

Projeto e Análise de Algoritmos NP Completude Parte 2. Prof. Humberto Brandão

Técnicas de Extensão de MT

Aula 10: Decidibilidade

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Instituto Superior Técnico Teoria da Computação - LEIC 2013/2014 Aula prática 1

Complexidade computacional

Linguagens Formais e Autômatos P. Blauth Menezes

Análise de Algoritmos

Linguagens Formais e Problemas de Decisão

BCC202 - Estrutura de Dados I

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Projeto e Análise de Algoritmos Prof. Ruy Luiz Milidiú

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Problemas Intratáveis ou computação eficiente X computação ineficiente

SCC Capítulo 5 Computabilidade e Complexidade

Linguagens Formais e Autômatos (LFA)

Teoria dos Grafos Aula 7

Variantes de Máquinas de Turing

Máquinas de Turing 3

Medida do Tempo de Execução de um Programa

Computação efectiva. Que linguagens podem ser reconhecidas por algum tipo de autómato?

Linguaguens recursivamente enumeráveis e recursivas

Transcrição:

Melhores momentos AULA PASSADA Complexidade Computacional p. 205

MT multifita por MT fita única Duas máquinas são equivalentes se elas reconhecem a mesma linguagem. Teorema. Dada uma máquina de Turing multifita M, podemos construir uma uma máquina de Turing S com uma única fita e equivalente a M. Além disso, se tendo como entrada uma cadeia de comprimento n a máquina M faz não mais do que t(n) n passos, então S faz O(t 2 (n)) passos. Complexidade Computacional p. 206

Máquinas de Turing não-determinísticas Para cada estado q e símbolo a, δ(q,a) é um conjunto finito de ternos: (q 1,a 1,L), (q 2,a 2,R),...,(q b,a b,r) A computação da MT se ramifica dependendo das possibilidades da função δ. Se algum ramo atinge o estado de aceitação, a máquina aceita a entrada. Chamamos uma máquina de Turing não-determinística de decisora se todos os possíveis ramos de computação param em todas as entradas. Complexidade Computacional p. 207

Número de passos rejeita número de passos aceita aceita/rejeita determinismo rejeita não-determinismo Complexidade Computacional p. 208

Não-determinístico por determinísmo Teorema. Dada uma máquina de Turing não-determinística decisora N, podemos construir uma máquina de Turing determinística D equivalente a N. Além disso, se tendo como entrada uma cadeia de comprimento n a máquina N faz não mais do que t(n) n passos, então D faz 2 O(t(n)) passos. Complexidade Computacional p. 209

Conclusões Corolário. Uma linguagem é Turing-reconhecível se e somente se alguma máquina de Turing não-determinística a reconhece. Corolário. Uma linguagem é decidível se e somente se alguma máquina de Turing não-determinística a decide. Complexidade Computacional p. 210

AULA 6 Complexidade Computacional p. 211

Enumeradores MS 3.2 Complexidade Computacional p. 212

Enumeradores Enumerador cabeças 0 x 0 # 0 0 x # fita de trabalho 0 0 1 0 1 1 1 1 fita de saída Complexidade Computacional p. 213

Enumeradores Na fita de saída é somente permitido a escrita e mover para a direita. A linguagem enumerada por um enumerador E é o conjunto das cadeias que E escreve na fita de saída, começando com suas fitas vazias. As cadeias são separadas por s. Complexidade Computacional p. 214

Linguagens enumeráveis Teorema. Uma linguagem é Turing-reconhecível se e somente se ela é a linguagem enumerada por algum enumerador. Prova: ( ) Primeiro mostramos que se a linguagem L é enumerada por um enumerador E, então uma MT M reconhece L. M = com entrada w: 1. Simule E. Cada vez que E termina de escrever uma cadeia na fita de saída, a compare com w. 2. Se E escreve alguma vez w na fita de saída, aceite. Complexidade Computacional p. 215

( ) Agora suponha que L é reconhecida por M. Na descrição abaixo s 1,s 2,s 3,... é uma lista das cadeias em Σ em ordem lexicográfica (primeiro os mais curtos, etc). E = ignore a entrada. 1. Repita os seguintes passos para i = 1, 2, 3,... 2. Simule M por i passos em cada entrada s 1,s 2,...,s i. 3. Se alguma computação aceita, escreva a cadeia correspondente na fita de saída. Complexidade Computacional p. 216

Tese de Church-Turing MS 3.2 Complexidade Computacional p. 217

Definição de Algoritmo Décimo problema de Hilbert (1900): projetar um algoritmo para decidir se um dado polinômio de coeficientes inteiros tem uma raiz inteira. Exemplos: 10x 2 y + 10yz + 5z tem raiz inteira x = 3, y = 1 e z = 6 x 2 5 não tem raiz inteira. Como definir algoritmo? Complexidade Computacional p. 218

Tese de Church-Turing Noção intuitiva de algoritmo igual a máquinas de Turing Tese de Church-Turing (1936) A Tese de Church-Turing é uma tese e não um teorema, não é um resultado matemático. Ela simplesmente afirma que o conceito informal de algoritmo corresponde ao objeto matemático chamado maquina de Turing. Complexidade Computacional p. 219

Linguagens indecídiveis Yuri Matijasevi c (1970): não existe algoritmo para o décimo problema de Hilbert. Seja D = { p : p é um polinômio com raiz inteira}. A linguagem D é indecidível. Porém, é Turing-reconhecível. Seja D 1 = { p : p é um polinômio sobre x com raiz inteira}. Máquina de Turing que reconhece D 1 : M 1 = com entrada p: Calcule o valor de p(x) para x = 0, 1, 1, 2, 2,... Se em algum ponto o valor der zero, aceite. Complexidade Computacional p. 220

Para a linguagem D podemos projetar uma máquina de Turing parecida. D 1 é na verdade decidível: podemos limitar um valor máximo que a raiz pode ter em função dos coeficientes de p. Complexidade Computacional p. 221

Descrição de máquinas de Turing Discussão: nível de detalhes para descrever máquinas de Turing; codificação de objetos. Objeto O é representado como uma cadeia O. Complexidade Computacional p. 222

Exemplo de codificação Grafo a b e f h j G c d g i Cadeia: ({a,b,c,d,e,f,g,h,i,j}, {{bd}, {eg}, {ac}, {hi}, {ab}, {ef}, {bc}} Comprimento da cadeia: 59 Complexidade Computacional p. 223

Grafos conexos L = { G : G é um grafo conexo}. Máquina M que decide L. M = com entrada G, a codificação de G: 1. Selecione o primeiro nó de G e o marque. 2. Repita o seguinte até que nenhum novo nó possa ser marcado: 3. Para cada nó em G, marque o nó se ele é ligado por um aresta a um nó já marcado. 4. Verifique se todos os nós de G estão marcados. Se estão, aceite; se não, rejeite. Complexidade Computacional p. 224

Mais detalhes de implementação M deve verificar se G codifica apropriadamente um grafo. Deve haver duas listas, a primeira com números distintos e a segunda com pares de números da primeira lista. Máquina M 4 pode ajudar para verificar se os números são distintos. Depois de completar essas verificações, M vai para o passo 1. Para o passo 1, podemos marcar o primeiro nó com um ponto em seu primeiro símbolo. Complexidade Computacional p. 225

Ainda mais detalhes de implementação Para o passo 2, M pode percorrer a lista de vértices para encontrar um nó não está pontuado u 1 e marcá-lo, digamos, sublinhando seu primeiro símbolo. Agora M percorre a lista de novo para encontrar um nó pontuado u 2 e o sublinha também. Agora a lista de arestas é percorrida para ver se existe uma aresta conectando u 1 e u 2. Se existe, M pontua u 1, remove os sublinhados e volta ao início do passo 2. Se não existe tal aresta, então M move o sublinhado de u 2 para o próximo nó pontuado, e percorre a lista de arestas outra vez. Se não existe mais vértices pontuados então M muda o sublinhado de u 1 para o próximo nó não pontuado e repete, voltando ao início do parágrafo. Se não há mais nós não pontuados, M vai ao passo 4. Complexidade Computacional p. 226

Ainda mais detalhes de implementação Para o passo 4, M percorre a lista de nós para determinar se todos estão pontuados. Se estão, aceite; se não, rejeite. Complexidade Computacional p. 227

Conexo genérico Recebe um grafo G = (N,E) e decide se G é ou não conexo. CONEXO-GENÉRICO (N, E) 0 para cada v em V faça 1 T T {v} 2 s nó qualquer em V 3 S {s} T T {s} 4 enquanto existe uv E com u S e v T faça 5 S S {v} 6 T T {v} 7 se T = 8 então o grafo é conexo aceite G 9 senão o grafo não é conexo rejeite G Complexidade Computacional p. 228

Complexidade de tempo MS 7.1 Complexidade Computacional p. 229

Complexidade de tempo Seja M uma máquina de Turing determinística que pára sobre todas as entradas. O tempo de execução ou complexidade de tempo ou consumo de tempo de M é a função t de Z em Z tal que t(n) é o número máximo de passos de M com uma entrada de comprimento n. Se t(n) é o tempo de execução de M, dizemos que M roda em tempo t(n) e que M é uma máquina de Turing de tempo t(n). Complexidade Computacional p. 230

Exemplo de MT Descrição alto nível de um máquina M 1 que decide A = {0 k 1 k : k 0}. M 1 = Com entrada w: 1. Faça um varredura na fita e rejeite se for encontrado algum 0 à direita de um 1. 2. Repita se existem 0s e 1s na fita: corte um único 0 e um único 1. 3. Se sobrarem 0s após todos os 1s terem sido cortados ou existerem 1s após todos os 0s serem cortados, rejeite. Caso contrário, aceite Complexidade Computacional p. 231

Consumo de tempo O passo 1 consome tempo O(n). O passo 2 consome tempo O(n 2 ). O passo 3 consome tempo O(n). A complexidade de tempo de M 1 é O(n 2 ) ou ainda M 1 consome tempo O(n 2 ). Complexidade Computacional p. 232

Classes de complexidade Seja t(n) uma função de Z em Z. A classe de complexidade de tempo TIME(t(n)) é formada por todas as linguagens que são decidíveis por uma máquina de Turing uma fita que consome tempo O(t(n)): Exemplos: TIME(t(n)) = {L : L é decidida por uma MT que roda em tempo O(t(n))}. A = {0 k 1 k : k 0} está em TIME(n 2 ) {0 2k : k 0} está em TIME(n lg n) (AULA 2) {z : z {0, 1},z = z R } está em TIME(n) (AULA 4) Complexidade Computacional p. 233

A está em TIME(n lg n) M 2 = Com entrada w: 1. Faça um varredura na fita e rejeite se for encontrado algum 0 à direita de um 1. 2. Repita se existem 0s e 1s na fita: (a) Faça uma varredura na fita verificando se o número total de 0s e 1s sobrando é par ou ímpar. Se for ímpar, rejeite. (b) Faça um varredura na fita, cortando alternadamente um 0 sim e outro não e cortando um 1 sim e outro não. 3. Se sobrarem 0s após todos os 1s terem sido cortados ou existerem 1s após todos os 0s serem cortados, rejeite. Caso contrário, aceite. Complexidade Computacional p. 234

Consumo de tempo O passo 1 consome tempo O(n). Cada execução do passo 2(a) consome tempo O(n). Cada execução do passo 2(b) consome tempo O(n). O passo 3 consome tempo O(n). Número de repetições de passo 2 é O(lg n). A complexidade de tempo de M 2 é O(n lg n) ou ainda M 2 consome tempo O(n lg n). Complexidade Computacional p. 235

A está em TIME(n) Descrição alto nível de um máquina M 3 com duas fitas que decide A = {0 k 1 k : k 0}. M 2 = Com entrada w: 1. Faça um varredura na fita 1 e rejeite se for encontrado algum 0 à direita de um 1. 2. Faça um varredura na fita 1 copiando os 0s para a fita 2 3. Faça uma varredura dos 1s na fita 1 e para cada 1 corte um 0 da fita 2. Se todos os 0s forem cortandos antes de todos os 1s serem lidos, rejeite. 4. Se todos os 0s da fita 2 foram cortados aceite. Caso contrário, rejeite Complexidade Computacional p. 236

Consumo de tempo O passo 1 consome tempo O(n). O passo 2 consome tempo O(n). O passo 3 consome tempo O(n). O passo 4 consome tempo O(n). A complexidade de tempo de M 3 é O(n) ou ainda M 3 consome tempo O(n). Complexidade Computacional p. 237

A classe P MS 7.2 Complexidade Computacional p. 238

Classe P P é classe de linguagens decidíveis em tempo polinomial por uma máquina de Turing determinística de uma fita: P = k TIME(n k ). A classe P é importante pois 1. P é invariante para todos os modelos de computação polinomialmente equivalentes a uma MT com uma fita. 2. P contém a classe dos problemas que são resolvidos eficientemente. Complexidade Computacional p. 239

Irmãos de O CLRS 3.1 Complexidade Computacional p. 311

Definição Dizemos que T(n) é Ω(f(n)) se existem constantes positivas c e n 0 tais que c f(n) T(n) para todo n n 0. T(n) consumo de tempo c f(n) tamanho da entrada n 0 Complexidade Computacional p. 312

Mais informal T(n) = Ω(f(n)) se existe c > 0 tal que c f(n) T(n) para todo n suficientemente GRANDE. T(n) consumo de tempo c f(n) tamanho da entrada n 0 Complexidade Computacional p. 313

Exemplos Exemplo 1 Se T(n) 0.001n 2 para todo n 8, então T(n) é Ω(n 2 ). Prova: Aplique a definição com c = 0.001 e n 0 = 8. Complexidade Computacional p. 314

Exemplo 2 Se T(n) é Ω(f(n)), então f(n) é O(T(n)). Prova: Se T(n) é Ω(f(n)), então existem constantes positivas c e n 0 tais que para todo n n 0. Logo, c f(n) T(n) f(n) 1/c T(n) para todo n n 0. Portanto, f(n) é O(T(n)). Complexidade Computacional p. 315

Definição Sejam T(n) e f(n) funções dos inteiros no reais. Dizemos que T(n) é Θ(f(n)) se T(n) é O(f(n)) e T(n) é Ω(f(n)). c 2 f(n) T(n) consumo de tempo c 1 f(n) n 0 tamanho da entrada Complexidade Computacional p. 316

Definição Dizemos que T(n) é Θ(f(n)) se se existem constantes positivas c 1,c 2 e n 0 tais que c 1 f(n) T(n) c 2 f(n) para todo n n 0. c 2 f(n) T(n) consumo de tempo c 1 f(n) tamanho da entrada n 0 Complexidade Computacional p. 317

Intuitivamente Comparação assintótica, ou seja, para n ENORME. comparação T(n) f(n) T(n) f(n) T(n)=f(n) comparação assintótica T(n) é O(f(n)) T(n) é Ω(f(n)) T(n) é Θ(f(n)) Complexidade Computacional p. 318

Tamanho máximo de problemas Suponha que cada operação consome 1 microsegundo (1µs). consumo de Tamanho máximo de problemas (n) tempo(µs) 1 segundo 1 minuto 1 hora 400n 2500 150000 9000000 20 n lg n 4096 166666 7826087 2n 2 707 5477 42426 n 4 31 88 244 2 n 19 25 31 Michael T. Goodrich e Roberto Tamassia, Projeto de Algoritmos, Bookman. Complexidade Computacional p. 319

Crescimento de algumas funções n lg n n n lg n n 2 n 3 2 n 2 1 1,4 2 4 8 4 4 2 2 8 16 64 16 8 3 2,8 24 64 512 256 16 4 4 64 256 4096 65536 32 5 5,7 160 1024 32768 4294967296 64 6 8 384 4096 262144 1,8 10 19 128 7 11 896 16384 2097152 3,4 10 38 256 8 16 1048 65536 16777216 1,1 10 77 512 9 23 4608 262144 134217728 1,3 10 154 1024 10 32 10240 1048576 1,1 10 9 1,7 10 308 Complexidade Computacional p. 320

Nomes de classes Θ classe nome Θ(1) constante Θ(log n) logarítmica Θ(n) linear Θ(n log n) n log n Θ(n 2 ) quadrática Θ(n 3 ) cúbica Θ(n k ) com k 1 polinomial Θ(2 n ) exponencial Θ(a n ) com a > 1 exponencial Complexidade Computacional p. 321

Exercícios Exercício 6.A Mostre que o consumo de tempo do algoritmo ORDENA-POR-INSERÇÃO é Ω(n). Exercício 6.B Mostre que o consumo de tempo do algoritmo ORDENA-POR-INSERÇÃO é Ω(n 2 ) no pior caso. Exercício 6.C Mostre que o consumo de tempo do algoritmo ORDENA-POR-INSERÇÃO é O(n) no melhor caso. Complexidade Computacional p. 322

Mais exercícios Exercício 6.D Prove que n 2 + 10n + 20 = Ω(n 2 ). Prove que n 2 10n 20 = Θ(n 2 ). Exercício 6.E Prove que n = Ω(lg n). Exercício 6.F Prove que lg n = Θ(log 10 n). Exercício 6.G É verdade que 2 n = Ω(3 n )? Exercício 6.H É verdade que 2n 3 + 5 n = Θ(n 3 )? Complexidade Computacional p. 323

Mais exercícios ainda Exercício 6.I Suponha que os algoritmos A e B só dependem de um parâmetro n. Suponha ainda que A consome S(n) unidades de tempo enquanto B consome T(n) unidades de tempo. Quero provar que algoritmo A é pelo menos tão eficiente quanto o algoritmo B (no sentido assintótico). Devo mostrar que existe f(n) tal que S(n) = O(f(n)) e T(n) = O(f(n))? S(n) = O(f(n)) e T(n) = Ω(f(n))? S(n) = Ω(f(n)) e T(n) = O(f(n))? S(n) = Ω(f(n)) e T(n)Ω(f(n))? Que devo fazer para mostrar que A é mais eficiente que B? Exercício 6.J Mostre que o consumo de tempo do algoritmo INTERCALA é Θ(n), sendo n o número de elementos do vetor que o algoritmo recebe. Complexidade Computacional p. 324

Primos de O CLRS 3.1 Complexidade Computacional p. 325

Definição Sejam T(n) e f(n) funções dos inteiros nos reais. Dizemos que T(n) é o(f(n)) se PARA TODA constante positiva c EXISTE uma constante inteira n 0 tal que T(n) < c f(n) para todo n n 0. c f(n) consumo de tempo T(n) n tamanho da entrada Complexidade Computacional p. 326

Exemplos T(n) é o(f(n)) lê-se T(n) é ó pequeno de f(n) Exemplo 1 12n 2 + 6n é o(n 3 ). Complexidade Computacional p. 327

Exemplos T(n) é o(f(n)) lê-se T(n) é ó pequeno de f(n) Exemplo 1 12n 2 + 6n é o(n 3 ). Prova: Seja c > 0 uma constante. Tome n 0 := (12 + 6 + 1)/c. Temos que para todo n n 0. 12n 2 + 6n < 12n 2 + 6n 2 = (12 + 6)n 2 < c n 3 Complexidade Computacional p. 327

Exemplos T(n) é o(f(n)) lê-se T(n) é ó pequeno de f(n) Exemplo 2 12n 2 + 6n não é o(n 2 ). Complexidade Computacional p. 328

Exemplos T(n) é o(f(n)) lê-se T(n) é ó pequeno de f(n) Exemplo 2 12n 2 + 6n não é o(n 2 ). Prova: Para c := 12 temos que para todo n 0. 12n 2 + 6n 12n 2 = c n 2 Complexidade Computacional p. 328

Definição Sejam T(n) e f(n) funções dos inteiros no reais. Dizemos que T(n) é ω(f(n)) se para PARA TODA constante positiva c EXISTE uma constante inteira n 0 tal que T(n) > c f(n) para todo n n 0. T(n) consumo de tempo c f(n) n tamanho da entrada Complexidade Computacional p. 329

Exemplos T(n) é ω(f(n)) lê-se T(n) é omega pequeno de f(n) Exemplo 1 12n 2 + 6n é ω(n). Complexidade Computacional p. 330

Exemplos T(n) é ω(f(n)) lê-se T(n) é omega pequeno de f(n) Exemplo 1 12n 2 + 6n é ω(n). Prova: Seja c > 0 uma constante. Tome n 0 := c/12. Temos que 12n 2 + 6n > 12n 2 c n para todo n n 0. Complexidade Computacional p. 330

Exemplos T(n) é ω(f(n)) lê-se T(n) é omega pequeno de f(n) Exemplo 2 12n 2 + 6n não é ω(n 2 ). Complexidade Computacional p. 331

Exemplos T(n) é ω(f(n)) lê-se T(n) é omega pequeno de f(n) Exemplo 2 12n 2 + 6n não é ω(n 2 ). Prova: Para c := 18 temos que para todo n 0. 12n 2 + 6n 18n 2 = c n 2 Complexidade Computacional p. 331

Intuitivamente Comparação assintótica, ou seja, para n ENORME. comparação T(n) f(n) T(n) f(n) T(n)=f(n) T(n)<f(n) T(n)>f(n) comparação assintótica T(n) é O(f(n)) T(n) é Ω(f(n)) T(n) é Θ(f(n)) T(n) é o(f(n)) T(n) é ω(f(n)) Complexidade Computacional p. 332