Complexidade computacional – wikipédia, a enciclopédia livre

14
Complexidade computacional Origem: Wikipédia, a enciclopédia livre. A teoria da complexidade computacional é um ramo da teoria da computação em ciência da computação teórica e matemática que se concentra em classificar problemas computacionais de acordo com sua dificuldade inerente, e relacionar essas classes entre si. Neste contexto, um problema computacional é entendido como uma tarefa que é, em princípio, passível de ser resolvida por um computador (o que basicamente significa que o problema pode ser descrito por um conjunto de instruções matemáticas). Informalmente, um problema computacional consiste de instâncias do problema e soluções para essas instâncias do problema. Por exemplo, o teste de primalidade é o problema de determinar se um dado número é primo ou não. As instâncias deste problema são números naturais, e a solução para uma instância é sim ou não, dependendo se o número é primo ou não. Um problema é considerado como inerentemente difícil se a sua solução requer recursos significativos, qualquer que seja o algoritmo usado. A teoria formaliza esta intuição através da introdução de modelos matemáticos de computação para estudar estes problemas e quantificar os recursos necessários para resolvê-los, tais como tempo e armazenamento. Outras medidas de complexidade também são utilizadas, tais como a quantidade de comunicação (usada em complexidade de comunicação), o número de portas em um circuito (usado na complexidade de circuito) e o número de processadores (usados em computação paralela). Um dos papéis da teoria da complexidade computacional é determinar os limites práticos do que os computadores podem e não podem fazer. Campos intimamente relacionados com a ciência da computação teórica são a análise de algoritmos e a teoria da computabilidade. Uma distinção chave entre a análise de algoritmos e teoria da complexidade computacional é que a primeira é dedicada a analisar a quantidade de recursos necessários para um determinado algoritmo resolver um problema, enquanto o segundo faz uma pergunta mais geral sobre todos os possíveis algoritmos que podem ser usados para resolver o mesmo problema. Mais precisamente, ele tenta classificar os problemas que podem ou não podem ser resolvidos com os recursos devidamente restritos. Por sua vez, impondo restrições sobre os recursos disponíveis é o que distingue a complexidade computacional da teoria da computabilidade: a segunda pergunta que tipos de problemas podem, em princípio, ser resolvidos através de algoritmos. Índice 1 Problemas Computacionais 1.1 Instâncias de Problema 1.2 Representando instâncias de problema 1.3 Problemas de decisão como linguagens formais 1.4 Problemas de função 1.5 Medição do tamanho de uma instância 2 Modelos de máquinas e medidas de complexidade 2.1 Máquina de Turing 2.2 Outros modelos de máquinas 2.3 Medidas de complexidade 2.4 Melhor, pior e caso médio de complexidade 2.5 Limites superior e inferior da complexidade dos problemas 3 Classes de complexidade 3.1 Definição de classes de complexidade Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional 1 de 14 19/05/2013 12:36

description

 

Transcript of Complexidade computacional – wikipédia, a enciclopédia livre

Page 1: Complexidade computacional – wikipédia, a enciclopédia livre

Complexidade computacionalOrigem: Wikipédia, a enciclopédia livre.

A teoria da complexidade computacional é um ramo da teoria da computação em ciência da computaçãoteórica e matemática que se concentra em classificar problemas computacionais de acordo com suadificuldade inerente, e relacionar essas classes entre si. Neste contexto, um problema computacional éentendido como uma tarefa que é, em princípio, passível de ser resolvida por um computador (o quebasicamente significa que o problema pode ser descrito por um conjunto de instruções matemáticas).Informalmente, um problema computacional consiste de instâncias do problema e soluções para essasinstâncias do problema. Por exemplo, o teste de primalidade é o problema de determinar se um dado númeroé primo ou não. As instâncias deste problema são números naturais, e a solução para uma instância é sim ounão, dependendo se o número é primo ou não.

Um problema é considerado como inerentemente difícil se a sua solução requer recursos significativos,qualquer que seja o algoritmo usado. A teoria formaliza esta intuição através da introdução de modelosmatemáticos de computação para estudar estes problemas e quantificar os recursos necessários pararesolvê-los, tais como tempo e armazenamento. Outras medidas de complexidade também são utilizadas, taiscomo a quantidade de comunicação (usada em complexidade de comunicação), o número de portas em umcircuito (usado na complexidade de circuito) e o número de processadores (usados em computação paralela).Um dos papéis da teoria da complexidade computacional é determinar os limites práticos do que oscomputadores podem e não podem fazer.

Campos intimamente relacionados com a ciência da computação teórica são a análise de algoritmos e a teoriada computabilidade. Uma distinção chave entre a análise de algoritmos e teoria da complexidadecomputacional é que a primeira é dedicada a analisar a quantidade de recursos necessários para umdeterminado algoritmo resolver um problema, enquanto o segundo faz uma pergunta mais geral sobre todosos possíveis algoritmos que podem ser usados para resolver o mesmo problema. Mais precisamente, ele tentaclassificar os problemas que podem ou não podem ser resolvidos com os recursos devidamente restritos. Porsua vez, impondo restrições sobre os recursos disponíveis é o que distingue a complexidade computacionalda teoria da computabilidade: a segunda pergunta que tipos de problemas podem, em princípio, ser resolvidosatravés de algoritmos.

Índice

1 Problemas Computacionais1.1 Instâncias de Problema1.2 Representando instâncias de problema1.3 Problemas de decisão como linguagens formais1.4 Problemas de função1.5 Medição do tamanho de uma instância

2 Modelos de máquinas e medidas de complexidade2.1 Máquina de Turing2.2 Outros modelos de máquinas2.3 Medidas de complexidade2.4 Melhor, pior e caso médio de complexidade2.5 Limites superior e inferior da complexidade dos problemas

3 Classes de complexidade3.1 Definição de classes de complexidade

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

1 de 14 19/05/2013 12:36

Page 2: Complexidade computacional – wikipédia, a enciclopédia livre

Um caminho ótimo para o

cacheiro viajante passando pelas15 maiores cidades da Alemanha.

É o menor caminho entre as43.589.145.600 possibilidades

de se visitar cada cidadeexatamente uma única vez.

3.2 Importantes classes de complexidade3.3 Teoremas de hierarquia3.4 Redução

4 Importantes problemas em aberto4.1 O problema P versus NP4.2 Problemas em NP que não se sabe se pertencem a P ou a NP-completo4.3 Separações entre outras classes de complexidade

5 Intratabilidade6 Teoria da complexidade contínua7 História8 Veja também9 Notas10 Referências

10.1 Bibliografia10.2 Surveys

11 Ligações externas

Problemas Computacionais

Instâncias de Problema

Um problema computacional pode ser visto como uma coleção infinitade instâncias em conjunto com uma solução para cada instância. Asequência de entrada para um problema computacional é referido comouma instância do problema, e não deve ser confundido com o problemaem si. Na teoria da complexidade computacional, um problema se refereà questão abstrata para ser resolvido. Em contraste, uma instância desteproblema é uma expressão concreta, que pode servir como entrada paraum problema de decisão. Por exemplo, considere o problema de teste deprimalidade. A instância é um número (por exemplo, 15) e a solução é"sim" se o número é primo e "não" se for o contrário (neste caso "não").Alternativamente, a instância é uma entrada especial para o problema, e asolução é a saída correspondente à entrada.

Para realçar ainda mais a diferença entre um problema e uma instância,considere a seguinte instância da versão de decisão do problema docaixeiro viajante: Existe um percurso de, no máximo, 2000 km decomprimento passando por todas as 15 maiores cidades da Alemanha? Aresposta a esta determinada instância do problema é de pouca utilidadepara a resolução de outras instâncias do problema, como pedir uma ida evolta através de todos os lugares de Milão cujo comprimento total é no máximo 10 km. Por esta razão, ateoria da complexidade aborda problemas computacionais e não instâncias particulares do problema.

Representando instâncias de problema

Ao considerar problemas computacionais, uma instância de problema é uma cadeia sobre um alfabeto.Normalmente, o alfabeto é considerado como sendo o alfabeto binário (ou seja, o conjunto {0,1}), e, assim,as cadeias são bitstrings. Como em um computador do mundo real, objetos matemáticos que não sãobitstrings devem ser devidamente codificados. Por exemplo, números inteiros podem ser representados emnotação binária, e grafos podem ser codificados diretamente via suas matrizes de adjacência, ou por

nb 1

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

2 de 14 19/05/2013 12:36

Page 3: Complexidade computacional – wikipédia, a enciclopédia livre

Um problema de decisão tem

apenas duas saídas possíveis, sim

ou não (ou alternativamente 1 ou

0) para qualquer entrada.

codificação de suas listas de adjacência em binário.

Apesar de algumas provas de complexidade-teórica de teoremas regularmente assumir alguma escolhaconcreta de codificação de entrada, tenta-se manter a discussão abstrata o suficiente para ser independente daescolha da codificação. Isto pode ser conseguido assegurando que diferentes representações possam sertransformadas em outra de forma eficiente.

Problemas de decisão como linguagens formais

Problemas de decisão são um dos objetos de estudo centrais na teoria dacomplexidade computacional. Um problema de decisão é um tipoespecial de problema computacional cuja resposta é sim ou não, oualternativamente 1 ou 0. Um problema de decisão pode ser visto comouma linguagem formal, onde os membros da linguagem são instânciascuja resposta é sim, e os não membros da linguagem são aquelasinstâncias cuja saída é não. O objetivo é decidir, com a ajuda de umalgoritmo, se uma dada sequência de entrada é um membro da linguagemformal em consideração. Se o algoritmo decidir este problema, eleretorna a resposta sim, diz-se que o algoritmo aceita a sequência deentrada, caso contrário, diz-se que rejeita a entrada.

Um exemplo de um problema de decisão é o seguinte. A entrada é umgrafo arbitrário. O problema consiste em decidir se o dado grafo éconexo ou não. A linguagem formal associada a este problema dedecisão é então o conjunto de todos os grafos conexos—obviamente, para obter uma definição precisa dessalinguagem, é preciso decidir como grafos são codificados como cadeias binárias.

Problemas de função

Um problema de função é um problema computacional, onde uma única saída (de uma função total) éesperada para cada entrada, mas a saída é mais complexa do que a de um problema de decisão, isto é, não éapenas sim ou não. Exemplos notáveis incluem o problema do caixeiro viajante e o problema de fatoração deinteiros.

É tentador pensar que a noção de problemas de função é muito mais rica do que a noção de problemas dedecisão. No entanto, o caso realmente não é esse, já que problemas de função podem ser reformulados comoproblemas de decisão. Por exemplo, a multiplicação de dois números inteiros pode ser expressa como oconjunto (a, b, c) tal qual a relação a × b = c descreve. Decidir se uma dada tripla é membro deste conjuntocorresponde a resolver o problema da multiplicação de dois números.

Medição do tamanho de uma instância

Para medir a dificuldade de resolver um problema computacional, pode-se desejar ver quanto tempo o melhoralgoritmo necessita para resolver o problema. No entanto, o tempo de execução pode, em geral, depender dainstância. Em particular, instâncias maiores exigirão mais tempo para resolver. Assim, o tempo necessáriopara resolver um problema (ou o espaço necessário, ou qualquer outra medida de complexidade) é calculadoem função do tamanho da instância. Isso geralmente leva em consideração o tamanho da entrada em bits. ATeoria da Complexidade está interessada em como os de algoritmos crescem com um aumento no tamanhoda entrada. Por exemplo, no problema de descobrir se um grafo é conectado, quanto tempo a mais leva pararesolver um problema para um grafo com 2n vértices comparado ao tempo levado para um grafo com nvértices?

Se o tamanho da entrada é n, o tempo gasto pode ser expresso como uma função de n. Já que o tempo gastoem diferentes entradas de mesmo tamanho pode ser diferente, o pior caso em complexidade de tempo T(n) é

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

3 de 14 19/05/2013 12:36

Page 4: Complexidade computacional – wikipédia, a enciclopédia livre

Uma representação artística de umamáquina de Turing

definido como sendo o tempo máximo dentre todas as entradas de tamanho n. Se T(n) é um polinômio em n,então o algoritmo é dito ser um algoritmo de tempo polinomial. A tese de Cobham diz que um problema podeser resolvido com uma quantidade factível de recursos se ele admite um algoritmo de tempo polinomial.

Modelos de máquinas e medidas de complexidade

Máquina de Turing

Uma máquina de Turing é um modelo matemático de uma máquina decomputação em geral. É um dispositivo teórico que manipulasímbolos contidos em uma tira de fita. Máquinas de Turing nãopretendem ser uma tecnologia de computação na prática, mas simuma experiência de pensamento que representa uma máquina decomputação. Acredita-se que se um problema pode ser resolvido porum algoritmo, então existe uma máquina de Turing que resolve oproblema. Na verdade, esta é a afirmação da tese de Church-Turing.Além disso, sabe-se que tudo o que pode ser computado em outrosmodelos de computação conhecido por nós hoje, como uma máquinaRAM, Jogo da Vida de Conway, autômato celular ou qualquerlinguagem de programação pode ser computado em uma máquina de Turing. Como as máquinas de Turingsão fáceis de analisar matematicamente, e acredita-se que sejam tão poderosas quanto qualquer outro modelode computação, a máquina de Turing é o modelo mais comumente usado em teoria da complexidade.

Muitos tipos de máquinas de Turing são usados para definir as classes de complexidade, tais como máquinasde Turing determinísticas, máquinas de Turing probabilísticas, máquinas de Turing não-determinísticas,máquinas de Turing quânticas, máquinas de Turing simétricas e máquinas de Turing alternadas. Todas elassão igualmente poderosas, em princípio, mas quando os recursos (tais como tempo e espaço) são limitados,algumas destas podem ser mais poderosas do que outras.

Uma máquina de Turing determinística é a máquina de Turing do tipo mais básico, que utiliza um conjuntofixo de regras para determinar suas ações futuras. Uma máquina de Turing probabilística é uma máquina deTuring determinística com um suprimento extra de bits aleatórios. A capacidade de tomar decisõesprobabilísticas muitas vezes ajuda algoritmos a resolverem problemas de forma mais eficiente. Algoritmosque usam bits aleatórios são chamados algoritmos probabilísticos. A máquina de Turing não-determinística éuma máquina de Turing determinística com uma característica adicional de não-determinismo, que permiteque uma máquina de Turing tenha várias possíveis ações futuras a partir de um determinado estado. Umamaneira de entender o não-determinismo é visualizar os ramos da máquina de Turing como os várioscaminhos computacionais possíveis a cada passo, e se ela resolve o problema em qualquer um desses ramos,diz-se ter resolvido o problema. Evidentemente, este modelo não pretende ser um modelo fisicamenterealizável, é apenas uma máquina abstrata teoricamente interessante que dá origem a classes de complexidadeparticularmente interessantes. Por exemplo, veja algoritmo não-determinístico.

Outros modelos de máquinas

Muitos modelos de máquinas diferentes do padrão de máquinas de Turing multi-fitas têm sido propostos naliteratura, por exemplo, máquinas de acesso aleatório. Talvez surpreendentemente, cada um desses modelospode ser convertido para outro, sem fornecer qualquer poder computacional extra. O consumo de tempo ememória desses modelos alternativos pode variar. O que todos estes modelos têm em comum é que asmáquinas funcionam de forma determinística.

No entanto, alguns problemas computacionais são mais fáceis de analisar em termos de recursos maisincomuns. Por exemplo, uma máquina de Turing não-determinística é um modelo computacional em que épermitido ramificar-se para verificar muitas possibilidades diferentes de uma só vez. A máquina de Turing

1

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

4 de 14 19/05/2013 12:36

Page 5: Complexidade computacional – wikipédia, a enciclopédia livre

Visualização do algoritmo quicksort que

tem no caso médio desempenho.

não-determinística tem muito pouco a ver com a forma como nós queremos fisicamente computar algoritmos,mas a sua ramificação capta exatamente muitos dos modelos matemáticos que queremos analisar, de modoque o tempo não-determinístico é um recurso muito importante na análise de problemas computacionais.

Medidas de complexidade

Para uma definição precisa do que significa resolver um problema utilizando uma determinada quantidade detempo e espaço, um modelo computacional tal como a máquina de Turing determinística é utilizado. O tempoexigido por uma máquina de Turing determinística M na entrada x é o número total de transições de estado,ou etapas, que a máquina faz antes de parar e responder com a saída ("sim" ou "não"). Diz-se que a máquinade Turing M opera dentro do tempo f(n), se o tempo exigido por M em cada entrada de comprimento n é nomáximo f(n). Um problema de decisão A pode ser resolvido em tempo f(n) se existe uma operação damáquina de Turing em tempo f(n) que resolve o problema. Como a teoria da complexidade está interessadaem classificar problemas com base na sua dificuldade, definem-se conjuntos de problemas com base emalguns critérios. Por exemplo, o conjunto de problemas solucionáveis no tempo f(n) em uma máquina deTuring determinística é então indicado por DTIME(f(n)).

Definições análogas podem ser feitas para os requisitos de espaço. Embora o tempo e o espaço sejam os maisconhecidos recursos de complexidade, qualquer medida de complexidade pode ser vista como um recursocomputacional. Medidas de complexidade são geralmente definidas pelos axiomas de complexidade deBlum. Outras medidas de complexidade utilizadas na teoria da complexidade incluem a complexidade decomunicação, a complexidade do circuito e a complexidade da árvore de decisão.

Melhor, pior e caso médio de complexidade

O melhor, o pior e o caso médio de complexidade referem-se atrês maneiras diferentes de medir a complexidade de tempo (ouqualquer outra medida de complexidade) de entradas diferentesdo mesmo tamanho. Uma vez que algumas entradas de tamanhon podem ser mais rápidas para resolver do que outras, definimosas seguintes complexidades:

Complexidade no melhor caso: Esta é a complexidade deresolver o problema para a melhor entrada de tamanho n.Complexidade no pior caso: Esta é a complexidade deresolver o problema para a pior entrada de tamanho n.Complexidade no caso médio: Esta é a complexidade deresolver o problema na média. Essa complexidade só édefinida com relação a uma distribuição de probabilidadesobre as entradas. Por exemplo, se todas as entradas domesmo tamanho são consideradas terem a mesma probabilidade de aparecer, a complexidade do casomédio pode ser definida com relação à distribuição uniforme sobre todas as entradas de tamanho n.

Por exemplo, considere o algoritmo de ordenação quicksort. Isso resolve o problema de ordenar uma lista deinteiros que é dada como entrada. O pior caso é quando a entrada já está ordenada ou está em ordem inversa,e o algoritmo leva tempo O(n ) para este caso. Se assumirmos que todas as permutações possíveis da lista deentrada são igualmente prováveis, o tempo médio necessário para a ordenação é O(n log n). O melhor casoocorre quando cada pivô divide a lista pela metade, também precisando tempo O(n log n).

Limites superior e inferior da complexidade dos problemas

Para classificar o tempo de computação (ou recursos semelhantes, como o consumo de espaço), é necessárioprovar os limites superiores e inferiores sobre a quantidade mínima de tempo exigida pelo algoritmo mais

2

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

5 de 14 19/05/2013 12:36

Page 6: Complexidade computacional – wikipédia, a enciclopédia livre

eficiente para resolver um determinado problema. A complexidade de um algoritmo é geralmente entendidacomo a sua complexidade de pior caso, a menos que seja especificado o contrário. A análise de umdeterminado algoritmo cai sob o campo de análise de algoritmos. Para mostrar um limite superior T(n) sobrea complexidade de tempo de um problema, é necessário mostrar apenas que há um determinado algoritmocom tempo de funcionamento, no máximo, T(n). No entanto, provar limites inferiores é muito mais difícil,uma vez que limites inferiores fazem uma declaração sobre todos os possíveis algoritmos que resolvem umdeterminado problema. A frase "todos os algoritmos possíveis" inclui não apenas os algoritmos conhecidoshoje, mas qualquer algoritmo que possa ser descoberto no futuro. Para mostrar um limite inferior de T(n) paraum problema requer mostrar que nenhum algoritmo pode ter complexidade de tempo menor do que T(n).

Limites superiores e inferiores são geralmente indicados usando a notação O-grande, que desconsiderafatores constantes e termos menores. Isso faz com que os limites independam dos detalhes específicos domodelo computacional utilizado. Por exemplo, T(n) = 7n + 15n + 40, em notação O-grande seria escrito daseguinte forma T(n) = O(n ).

Classes de complexidade

Definição de classes de complexidade

Uma classe de complexidade é um conjunto de problemas de complexidade relacionados. As classes maissimples de complexidade são definidas pelos seguintes fatores:

O tipo de problema computacional: Os problemas mais comumente utilizados são problemas dedecisão. No entanto, classes de complexidade podem ser definidas com base em problemas de função,problemas de contagem, problemas de otimização, problemas de promessa, etc.O modelo de computação: O modelo mais comum de computação é a máquina de Turingdeterminística, mas muitas classes de complexidade são baseadas em máquinas de Turingnão-determinísticas, circuitos Booleanos, máquinas de Turing quânticas, circuitos monótonos, etc.O recurso (ou recursos) que está sendo limitado e os limites: Essas duas propriedades são geralmentedeclaradas em conjunto, tais como "tempo polinomial", "espaço logarítmico", "profundidadeconstante", etc.

É claro, algumas classes de complexidade têm definições complexas que não se encaixam nesse quadro.Assim, uma classe de complexidade típica tem uma definição como a seguinte:

O conjunto de problemas de decisão solúveis por uma máquina de Turing determinística dentro dotempo f(n). (Esta classe de complexidade é conhecida como DTIME(f(n))).

Mas limitar o tempo de computação acima por alguma função concreta f(n) muitas vezes produz classes decomplexidade que dependem do modelo da máquina escolhida. Por exemplo, a linguagem {xx | x é umasequência binária qualquer} pode ser resolvida em tempo linear em uma máquina de Turing multi-fitas, masnecessariamente exige tempo quadrático no modelo de máquinas de Turing single-fita. Se permitirmosvariações no tempo polinomial em execução, a tese de Cobham-Edmonds afirma que "as complexidades dotempo em quaisquer dois modelos razoáveis e gerais de computação são polinomialmente relacionados"(Goldreich 2008, Chapter 1.2). Isto forma a base para a classe de complexidade P, que é o conjunto deproblemas de decisão solúveis por uma máquina de Turing determinística dentro do tempo polinomial. Oconjunto correspondente de problemas de função é FP.

Importantes classes de complexidade

Muitas classes de complexidade importantes podem ser definidas por limitando o tempo ou espaço usadopelo algoritmo. Algumas importantes classes de complexidade de problemas de decisão definidas destamaneira são as seguintes:

2

2

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

6 de 14 19/05/2013 12:36

Page 7: Complexidade computacional – wikipédia, a enciclopédia livre

Uma representação da relação entre as classes de

complexidade

Classe decomplexidade

Modelo decomputação

Limitaçãode recursos

DTIME(f(n))Máquina de TuringDeterminística

Tempo f(n)

PMáquina de TuringDeterminística

Tempopoly(n)

EXPTIMEMáquina de TuringDeterminística

Tempo2

NTIME(f(n))Máquina de TuringNão-Determinística

Tempo f(n)

NPMáquina de TuringNão-Determinística

Time poly(n)

NEXPTIMEMáquina de TuringNão-Determinística

Tempo2

DSPACE(f(n))Máquina de TuringDeterminística

Espaço f(n)

LMáquina de TuringDeterminística

EspaçoO(log n)

PSPACEMáquina de TuringDeterminística

Espaçopoly(n)

EXPSPACEMáquina de TuringDeterminística

Espaço2

NSPACE(f(n))Máquina de TuringNão-Determinística

Espaço f(n)

NLMáquina de TuringNão-Determinística

EspaçoO(log n)

NPSPACEMáquina de TuringNão-Determinística

Espaçopoly(n)

NEXPSPACEMáquina de TuringNão-Determinística

Espaço2

Acontece que PSPACE = NPSPACE e EXPSPACE = NEXPSPACE pelo teorema de Savitch.

Outras classes de complexidade importantes incluem BPP, ZPP e RP, que são definidas usando máquinas deTuring probabilística; AC e NC, que são definidas usando circuitos booleanos e BQP e QMA, que sãodefinidas usando máquinas de Turing quânticas. #P é uma importante classe complexidade de problemas decontagem (que não são problemas de decisão). Classes como IP e AM são definidas usando sistemas deprova interativa. ALL é a classe de todos os problemas de decisão.

Teoremas de hierarquia

Para as classes de complexidade definidas desta forma, é desejável provar que relaxar os requisitos emfunção (digamos) do tempo de computação realmente define um conjunto maior de problemas. Em particular,embora DTIME(n) esteja contido em DTIME(n ), seria interessante saber se a inclusão é estrita. Pararequisitos de tempo e de espaço, a resposta a tais perguntas é dada pelo teorema de hierarquia para acomplexidade de tempo e pelo teorema de hierarquia para a complexidade de espaço, respectivamente. Elessão chamados teoremas de hierarquia porque induzem uma hierarquia adequada sobre as classes definidas,

poly(n)

poly(n)

poly(n)

poly(n)

2

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

7 de 14 19/05/2013 12:36

Page 8: Complexidade computacional – wikipédia, a enciclopédia livre

restringindo os respectivos recursos. Assim, existem pares de classes de complexidade tal que uma estápropriamente contida na outra. Depois de ter deduzido assim as relações de pertinência estrita de conjuntos,podemos continuar a fazer declarações quantitativas sobre quanto mais tempo adicional ou espaço énecessário para aumentar o número de problemas que podem ser resolvidos.

Mais precisamente, o teorema de hierarquia de tempo afirma que:

.

O teorema de hierarquia de espaço afirma que:

.

Os teoremas de hierarquia de tempo e de espaço formam a base para a maioria dos resultados de separação declasses de complexidade. Por exemplo, o teorema da hierarquia de tempo nos diz que P está estritamentecontida em EXPTIME, e o teorema hierarquia do espaço nos diz que L está estritamente contida emPSPACE.

Redução

Muitas classes de complexidade são definidas usando o conceito de redução. Uma redução é umatransformação de um problema em outro problema. Ela captura a noção informal de um problema que sejapelo menos tão difícil quanto outro problema. Por exemplo, se um problema X pode ser resolvido usando umalgoritmo para Y, X não é mais difícil do que Y, e dizemos que X se reduz a Y. Existem muitos tipos diferentesde redução, com base no método de redução, como reduções de Cook, reduções de Karp e reduções Levin, eno limite da complexidade das reduções, como reduções de tempo polinomial ou reduções log-space.

A redução mais comumente usada é uma redução em tempo polinomial. Isso significa que o processo deredução leva tempo polinomial. Por exemplo, o problema do quadrado de um inteiro pode ser reduzido para oproblema da multiplicação de dois números inteiros. Isso significa que um algoritmo para multiplicar doisinteiros pode ser usado para o quadrado de um inteiro. De fato, isso pode ser feito dando a mesma entradapara ambas as entradas do algoritmo de multiplicação. Assim, vemos que o problema do quadrado de uminteiro não é mais difícil do que o problema da multiplicação, já que o problema do quadrado de um inteiropode ser reduzido ao problema da multiplicação.

Isso motiva o conceito de um problema que ser difícil para uma classe de complexidade. Um problema X édifícil para uma classe de problemas C se todo problema em C pode ser reduzido a X. Assim, nenhumproblema em C é mais difícil do que X, uma vez que um algoritmo para X nos permite resolver qualquerproblema em C. É claro que a noção de problemas difíceis depende do tipo de redução a ser utilizado. Para asclasses de complexidade maiores do que P, reduções em tempo polinomial são comumente usados. Emparticular, o conjunto de problemas que são difíceis para NP é o conjunto de problemas NP-difícil.

Se um problema X está em C e é difícil para C, então diz-se que X é completo para C. Isto significa que X é oproblema mais difícil em C. (Uma vez que muitos problemas poderiam ser igualmente difíceis, pode-se dizerque X é um dos os problemas mais difíceis em C.) Assim, a classe de problemas NP-completo contém osproblemas mais difíceis em NP, nesse sentido eles são os mais propensos a não estarem em P. Como oproblema P = NP não foi resolvido, ser capaz de reduzir um conhecido problema NP-completo, Π , paraoutro problema, Π , indicaria que não há nenhuma solução conhecida em tempo polinomial para Π . Issoocorre porque uma solução em tempo polinomial para Π renderia uma solução em tempo polinomial paraΠ . Da mesma forma que todos os problemas NP podem ser reduzidos ao conjunto, encontrar um problemaNP-completo que pudesse ser resolvido em tempo polinomial significaria que P = NP.

Importantes problemas em aberto

2

1 1

1

22

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

8 de 14 19/05/2013 12:36

Page 9: Complexidade computacional – wikipédia, a enciclopédia livre

Diagrama de classes de complexidade

assumindo que P ≠ NP. A existência deproblemas em NP fora tanto de P quanto

de NP-completo, neste caso, foiestabelecida por Ladner.

O problema P versus NP

A classe de complexidade P é muitas vezes vista como umaabstração matemática de modelagem dessas tarefascomputacionais que admitem um algoritmo eficiente. Estahipótese é chamada de tese de Cobham-Edmonds. A classe decomplexidade NP, por outro lado, contém muitos problemas queas pessoas gostariam de resolver de forma eficiente, mas para osquais nenhum algoritmo eficiente é conhecido, como o problemada satisfatibilidade booleana, o problema do caminhohamiltoniano e o problema da cobertura de vértices. Como asmáquinas de Turing determinística são máquinas de Turingnão-determinísticas especiais, é fácil observar que cada problemaem P também é membro da classe NP.

A questão de saber se P é igual a NP é uma das questões mais importantes em aberto na ciência dacomputação teórica por causa da gama de implicações de uma solução. Se a resposta for sim, para muitosproblemas importantes pode ser mostrado que há soluções mais eficientes para eles. Estes incluem váriostipos de problemas de programação inteira em investigação operacional, muitos problemas na área delogística, previsão da estrutura de proteínas na biologia, e capacidade de encontrar provas formais deteoremas da matemática pura. O problema P versus NP é um dos Problemas do Prêmio Millenium(Millenium Prize Problems) proposto pelo Instituto Clay de Matemática (Clay Mathematics Institute). Existeum prêmio de um milhão de dólares para resolver o problema.

Problemas em NP que não se sabe se pertencem a P ou a NP-completo

Foi mostrado por Ladner que, se P ≠ NP, então existem problemas em NP que não estão nem em P nem emNP-completo. Tais problemas são chamados de problemas NP-intermediário. O problema do isomorfismode grafos, o problema do logaritmo discreto e o problema de fatoração de inteiros são exemplos de problemasque acredita-se que sejam NP-intermediário. Eles são alguns dos muito poucos problemas NP que não se sabese estão em P ou em NP-completo.

O problema do isomorfismo de grafos é o problema computacional para determinar se dois grafos finitos sãoisomorfos. Um importante problema não resolvido na teoria da complexidade é se o problema doisomorfismo de grafos está em P, NP-completo, ou NP-intermediário. A resposta não é conhecida, masacredita-se que o problema não seja, pelo menos, NP-completo. Se o isomorfismo de grafos forNP-completo, a hierarquia de tempo polinomial colapsa para seu segundo nível. Uma vez que acredita-seveemente que a hierarquia polinomial não colapse para nenhum nível finito, acredita-se que o isomorfismo degrafos não seja NP-completo. O melhor algoritmo para este problema, de acordo com Laszlo Babai e EugeneLuks tem tempo de execução 2 para grafos com n vértices.

O problema da fatoração de inteiros é o problema computacional para determinar a fatoração prima de umdado inteiro. Formulado como um problema de decisão, é o problema para decidir se a entrada tem um fatormenor que k. Nenhum algoritmo de fatoração de inteiro eficiente é conhecido, e este fato é a base de váriossistemas criptográficos modernos, como o algoritmo RSA. O problema da fatoração de inteiros está em NP eem co-NP (e até mesmo em UP e co-UP ). Se o problema é NP-completo, a hierarquia de tempo polinomialcolapsará para seu primeiro nível (ou seja, NP será igual a co-NP). O melhor algoritmo conhecido parafatoração de inteiros é o GNFS (general number field sieve), que leva tempo O(e

) para fatorar um inteiro de n-bit. No entanto, o melhor algoritmo quântico conhecido para este problema,o algoritmo de Shor, é executado em tempo polinomial. Infelizmente, este fato não diz muito sobre onde estáo problema com relação a classes de complexidade não-quântica.

Separações entre outras classes de complexidade

3

2

4

5

6

3

7

8

O(√(n log(n)))

9

(64/9) (n.log 2) (log (n.log1/3 1/3

2))2/3

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

9 de 14 19/05/2013 12:36

Page 10: Complexidade computacional – wikipédia, a enciclopédia livre

Muitas classes de complexidade conhecidas são suspeitas de não serem iguais, mas isso não foi provado. Porexemplo, P ⊆ NP ⊆ PP ⊆ PSPACE, mas é possível que P = PSPACE. Se P não for igual a NP, então P nãoserá igual à PSPACE também. Uma vez que existem muitas classes de complexidade conhecidas entre P ePSPACE, tais como RP, BPP, PP, BQP, MA , PH, etc, é possível que todas estas classes de complexidadecolapsem para uma única classe. Provar que qualquer uma destas classes não são iguais seria um grandeavanço na teoria da complexidade.

Na mesma linha, co-NP é a classe que contém os problemas do complemento (ou seja, problemas com asrespostas sim / não invertidsa) dos problemas NP. Acredita-se que NP não seja igual a co-NP, no entanto,ainda não foi comprovado. Tem sido mostrado que, se essas duas classes de complexidade não são iguais,então P não é igual a NP.

Da mesma forma, não se sabe se L (o conjunto de todos os problemas que podem ser resolvidos no espaçologarítmico) está contido estritamente em P ou é igual a P. Novamente, existem muitas classes decomplexidade entre elas, tais como NL e NC, e não se sabe se elas são classes iguais ou distintas.

Suspeita-se que P e BPP sejam iguais. No entanto, é um problema em aberto, no momento, se BPP = NEXP.

Intratabilidade

Problemas que podem ser resolvidos na teoria (por exemplo, dado um tempo infinito), mas que na práticalevam muito tempo para as suas soluções sejam úteis, são conhecidos como problemas intratáveis. Nateoria da complexidade, os problemas que não apresentam soluções em tempo polinomial são consideradosintratáveis por mais pequenas que sejam suas entradas. Na verdade, a tese de Cobham-Edmonds afirma queapenas os problemas que podem ser resolvidos em tempo polinomial podem ser computados de maneirafactível por algum dispositivo computacional. Problemas que são conhecidos por serem intratáveis nestesentido incluem aqueles que são EXPTIME-difícil. Se NP não é o mesmo que P, então os problemasNP-completo são também intratáveis neste sentido. Para ver porque algoritmos de tempo exponencial podemser impraticáveis, considere um programa que faz 2 operações antes de parar. Para n pequeno, digamos 100,e assumindo, por exemplo, que o computador faz 10 operações por segundo, o programa seria executadopor cerca de 4 × 10 anos, que é aproximadamente a idade do universo. Mesmo com um computador muitomais rápido, o programa só seria útil para casos muito pequenos e, nesse sentido, a intratabilidade de umproblema é um tanto independente do progresso tecnológico. No entanto, um algoritmo de tempo polinomialnão é sempre prático. Se seu tempo de execução é, digamos n , não é razoável considerá-lo eficiente e aindaé inútil, salvo em casos de pequeno porte.

O que intratabilidade significa na prática está aberto em debate. Dizer que um problema não está em P nãoimplica que todos os grandes casos de problemas são difíceis ou até mesmo que a maioria deles são. Porexemplo, o problema da decisão na Aritmética de Presburger tem demonstrado não estar em P, ainda foramescritos algoritmos que resolvem o problema em tempos razoáveis na maioria dos casos. Da mesma forma, osalgoritmos podem resolver o problema da mochila NP-completo em uma ampla faixa de tamanhos em menosque o tempo quadrático e resolvedores de SAT rotineiramente lidam com grandes instâncias do problema desatisfatibilidade booleana NP-completo.

Teoria da complexidade contínua

A teoria da complexidade contínua pode se referir à teoria da complexidade dos problemas que envolvemfunções contínuas que são aproximadas por discretizações, como estudado em análise numérica. Umaabordagem para a teoria da complexidade da análise numérica é a complexidade baseada em informação(IBC).

A teoria da complexidade contínua também pode se referir à teoria da complexidade do uso da computaçãoanalógica, que utiliza sistemas dinâmicos contínuos e equações diferenciais. A teoria de controle pode ser

10

11

n

12

10

15

12

13

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

10 de 14 19/05/2013 12:36

Page 11: Complexidade computacional – wikipédia, a enciclopédia livre

considerada uma forma de computação e equações diferenciais são usadas na modelagem de sistemas detempo contínuo e híbridos de tempo discreto-contínuo.

História

Antes de a pesquisa propriamente dita explicitamente dedicada à complexidade dos problemas algorítmicoscomeçar, os numerosos fundamentos foram estabelecidos por vários pesquisadores. O mais influente entreestes foi a definição das máquinas de Turing por Alan Turing em 1936, que acabou por ser uma noção muitorobusta e flexível de computador.

Fortnow & Homer (2003) datam o início dos estudos sistemáticos em complexidade computacional com oimportante artigo "On the Computational Complexity of Algorithms" de Juris Hartmanis e Richard Stearns(1965), que estabeleceu as definições de complexidade de tempo e de espaço e provou os teoremas dehierarquia.

De acordo com Fortnow & Homer (2003), trabalhos anteriores que estudaram problemas solucionáveis pormáquinas de Turing com recursos específicos limitados inclui a definição de John Myhill de autômatoslinearmente limitados (Myhill 1960), o estudo de Raymond Smullyan sobre conjuntos rudimentares (1961),assim como o artigo de Hisao Yamada sobre computação em tempo real (1962). Um pouco mais cedo,Boris Trakhtenbrot (1956), um pioneiro no campo da URSS, estudou outra medida específica decomplexidade. Como lembra ele:

Contudo, [meu] interesse inicial [na teoria dos autômatos]era cada vez mais posto de lado em detrimento àcomplexidade computacional, uma excitante fusão demétodos combinatoriais, herdada da teoria da comutação,com o arsenal conceitual da teoria de algoritmos. Essasideias me ocorreram antes, em 1955, quando eu cunhei otermo "função de sinalização", que hoje é comumenteconhecido como "medida de complexidade".—Boris Trakhtenbrot

From Logic toTheoretical ComputerScience – An Update.In: Pillars ofComputer Science,LNCS 4800, Springer2008.

Em 1967, Manuel Blum desenvolveu uma teoria da complexidade axiomática com base em seus axiomas eprovou um resultado importante, o então chamado, teorema da aceleração de Blum (speed-up theorem). Ocampo realmente começou a florescer quando o pesquisador norte-americano Stephen Cook e, trabalhandoindependentemente, Leonid Levin na URSS, provaram que existem importantes problemas praticáveis quesão NP-completos. Em 1972, Richard Karp partiu desta ideia e deu um salto à frente com seu artigo histórico,"Reducibility Among Combinatorial Problems", no qual ele mostrou que 21 diferentes problemas decombinatória e problemas teóricos de grafos, famosos por sua intratabilidade computacional, sãoNP-completos.

Veja também

14

15

16

17

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

11 de 14 19/05/2013 12:36

Page 12: Complexidade computacional – wikipédia, a enciclopédia livre

Problemas em aberto da ciência da computaçãoCategoria:Teoria da computaçãoAnexo:Lista de termos relacionados aos algoritmos e estruturas de dados

Notas

↑ Escolha uma cidade, e pegue todas as ordenações possíveis das outras 14 cidades. Depois divida pordois, porque não importa em qual direção pelo tempo elas vêm uma após a outra: 14 / 2 =43.589.145.600.

1.

Referências

↑ Veja Arora & Barak 2009, Chapter 1: Thecomputational model and why it doesn't matter

1.

↑ Veja Sipser 2006, Chapter 7: Time complexity2.↑ Ladner, Richard E. (1975), "On the structure ofpolynomial time reducibility"(http://delivery.acm.org/10.1145/330000/321877/p155-ladner.pdf?key1=321877&key2=7146531911&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618) (PDF),Journal of the ACM (JACM) 22 (1): 151–171,doi:10.1145/321864.321877 (http://dx.doi.org/10.1145%2F321864.321877),http://delivery.acm.org/10.1145/330000/321877/p155-ladner.pdf?key1=321877&key2=7146531911&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618.

3.

↑ Berger, Bonnie A.; Leighton, T (1998), "Proteinfolding in the hydrophobic-hydrophilic (HP) modelis NP-complete", Journal of Computational Biology5 (1): p27–40, doi:10.1089/cmb.1998.5.27(http://dx.doi.org/10.1089%2Fcmb.1998.5.27),PMID 9541869 (http://www.ncbi.nlm.nih.gov/pubmed/9541869).

4.

↑ Cook, Stephen (April 2000), The P versus NPProblem (http://www.claymath.org/millennium/P_vs_NP/Official_Problem_Description.pdf), Clay

5.

Mathematics Institute, http://www.claymath.org/millennium/P_vs_NP/Official_Problem_Description.pdf, visitado em2006-10-18.↑ Jaffe, Arthur M. (2006), "The Millennium GrandChallenge in Mathematics" (http://www.ams.org/notices/200606/fea-jaffe.pdf), Notices of the AMS53 (6), http://www.ams.org/notices/200606/fea-jaffe.pdf, visitado em 2006-10-18.

6.

↑ Arvind, Vikraman; Kurur, Piyush P. (2006),"Graph isomorphism is in SPP", Information andComputation 204 (5): 835–852,doi:10.1016/j.ic.2006.02.002 (http://dx.doi.org/10.1016%2Fj.ic.2006.02.002).

7.

↑ Uwe Schöning, "Graph isomorphism is in the lowhierarchy", Proceedings of the 4th AnnualSymposium on Theoretical Aspects of ComputerScience, 1987, 114–124; also: Journal of Computerand System Sciences, vol. 37 (1988), 312–323

8.

↑ Lance Fortnow. Computational Complexity Blog:Complexity Class of the Week: Factoring.September 13, 2002. http://weblog.fortnow.com/2002/09/complexity-class-of-week-factoring.html

9.

↑ Boaz Barak's course on ComputationalComplexity (http://www.cs.princeton.edu/courses/archive/spr06/cos522/) Lecture 2(http://www.cs.princeton.edu/courses/archive/spr06

10.

a b

a b

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

12 de 14 19/05/2013 12:36

Page 13: Complexidade computacional – wikipédia, a enciclopédia livre

/cos522/lec2.pdf)↑ Hopcroft, J.E., Motwani, R. and Ullman, J.D.(2007) Introduction to Automata Theory,Languages, and Computation, Addison Wesley,Boston/San Francisco/New York (page 368)

11.

↑ Complexity Theory and Numerical Analysis(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.33.4678&rep=rep1&type=pdf), Steve Smale, Acta Numerica, 1997 -Cambridge Univ Press

12.

↑ A Survey on Continuous Time Computations(http://arxiv.org/abs/arxiv:0907.3117), OlivierBournez, Manuel Campagnolo, New ComputationalParadigms. Changing Conceptions of What isComputable. (Cooper, S.B. and L{\"o}we, B. andSorbi, A., Eds.). New York, Springer-Verlag, pages383-423. 2008

13.

↑ Computational Techniques for the Verification ofHybrid Systems (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.70.4296&rep=rep1&type=pdf), Claire J. Tomlin, Ian Mitchell, AlexandreM. Bayen, Meeko Oishi, Proceedings of the IEEE,Vol. 91, No. 7, July 2003.

14.

↑ doi:10.1109/TEC.1962.5219459 (http://dx.doi.org/10.1109%2FTEC.1962.5219459)This citation will be automatically completed in thenext few minutes. You can jump the queue

(http://toolserver.org/~verisimilus/Bot/DOI_bot

/doibot.php?doi=10.1109%2FTEC.1962.5219459) or expand by

hand (//pt.wikipedia.org/w/index.php?title=Predefini%C3%A7

%C3%A3o:Cite_doi/10.1109.2FTEC.1962.5219459&

preload=Template:Cite_doi/preload&editintro=Template:Cite_doi

/editintro&action=edit)</span

15.

↑ Trakhtenbrot, B.A.: Signalizing functions andtabular operators. Uchionnye Zapiski PenzenskogoPedinstituta (Transactions of the PenzaPedagogoical Institute) 4, 75–87 (1956) (in Russian)

16.

↑ Richard M. Karp (1972), "Reducibility AmongCombinatorial Problems"(http://www.cs.berkeley.edu/~luca/cs172/karp.pdf),in R. E. Miller and J. W. Thatcher (editors),Complexity of Computer Computations, New York:Plenum, pp. 85–103, http://www.cs.berkeley.edu/~luca/cs172/karp.pdf

17.

Bibliografia

Arora, Sanjeev; Barak, Boaz (2009), ComputationalComplexity: A Modern Approach(http://www.cs.princeton.edu/theory/complexity/),Cambridge, ISBN 978-0-521-42426-4,http://www.cs.princeton.edu/theory/complexity/Downey, Rod; Fellows, Michael (1999),Parameterized complexity (http://www.springer.com/sgw/cda/frontpage/0,11855,5-0-22-1519914-0,00.html?referer=www.springer.de%2Fcgi-

bin%2Fsearch_book.pl%3Fisbn%3D0-387-94883-X), Berlin, New York: Springer-Verlag,http://www.springer.com/sgw/cda/frontpage/0,11855,5-0-22-1519914-0,00.html?referer=www.springer.de%2Fcgi-bin%2Fsearch_book.pl%3Fisbn%3D0-387-94883-XDu, Ding-Zhu; Ko, Ker-I (2000), Theory ofComputational Complexity, John Wiley & Sons,ISBN 978-0-471-34506-0Goldreich, Oded (2008), ComputationalComplexity: A Conceptual Perspective(http://www.wisdom.weizmann.ac.il/~oded/cc-book.html), Cambridge University Press,http://www.wisdom.weizmann.ac.il/~oded/cc-book.htmlvan Leeuwen, Jan, ed. (1990), Handbook oftheoretical computer science (vol. A): algorithmsand complexity, MIT Press, ISBN978-0-444-88071-0Papadimitriou, Christos (1994), ComputationalComplexity (1st ed.), Addison Wesley, ISBN0201530821Sipser, Michael (2006), Introduction to the Theoryof Computation (2nd ed.), USA: Thomson CourseTechnology, ISBN 0534950973Predefinição:Garey-Johnson

Surveys

Khalil, Hatem; Ulery, Dana (1976), A Review ofCurrent Studies on Complexity of Algorithms forPartial Differential Equations (http://portal.acm.org/citation.cfm?id=800191.805573), ACM '76Proceedings of the 1976 Annual Conference,pp. 197, doi:10.1145/800191.805573(http://dx.doi.org/10.1145%2F800191.805573),http://portal.acm.org/citation.cfm?id=800191.805573Cook, Stephen (1983), "An overview ofcomputational complexity", Commun. ACM (ACM)26 (6): 400–408, doi:10.1145/358141.358144(http://dx.doi.org/10.1145%2F358141.358144),ISSN 0001-0782 (http://worldcat.org/issn/0001-0782)Fortnow, Lance; Homer, Steven (2003), "A ShortHistory of Computational Complexity"(http://people.cs.uchicago.edu/~fortnow/papers/history.pdf), Bulletin of the EATCS 80: 95–133,http://people.cs.uchicago.edu/~fortnow/papers/history.pdfMertens, Stephan (2002), "ComputationalComplexity for Physicists", Computing in Scienceand Engg. (Piscataway, NJ, USA: IEEE EducationalActivities Department) 4 (3): 31–47,doi:10.1109/5992.998639 (http://dx.doi.org/10.1109%2F5992.998639), ISSN 1521-9615(http://worldcat.org/issn/1521-9615)

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

13 de 14 19/05/2013 12:36

Page 14: Complexidade computacional – wikipédia, a enciclopédia livre

Ligações externas

The Complexity Zoo (http://qwiki.stanford.edu/wiki/Complexity_Zoo)

Obtida de "http://pt.wikipedia.org/w/index.php?title=Complexidade_computacional&oldid=34934465"Categoria: Complexidade

Esta página foi modificada pela última vez à(s) 23h27min de 27 de março de 2013.Este texto é disponibilizado nos termos da licença Atribuição-Partilha nos Mesmos Termos 3.0 nãoAdaptada (CC BY-SA 3.0); pode estar sujeito a condições adicionais. Consulte as condições de usopara mais detalhes.

Complexidade computacional – Wikipédia, a enciclopédia livre http://pt.wikipedia.org/wiki/Complexidade_computacional

14 de 14 19/05/2013 12:36