É realmente possível provar limites mais baixos?


24

Dado qualquer problema computacional, a tarefa de encontrar limites mais baixos para esse cálculo é realmente possível? Suponho que tudo se resume a como um único passo computacional é definido e qual modelo usamos para a prova, mas, dado que, realmente provamos um limite inferior ao geral? O que quero dizer é que podemos provar algo como "o problema X não pode ser resolvido mais rápido que o tempo t(X) " em vez de "o problema X pode ser resolvido em um tempo t(X) ou mais rápido"?

Tentei encontrar informações especificamente sobre os limites inferiores e as provas deles, mas não consigo encontrar nenhum interesse, alguma recomendação sobre livros / documentos / sites sobre o assunto?

Respostas:


19

Podemos provar absolutamente essas coisas.

Muitos problemas têm limites inferiores triviais, como encontrar o mínimo de um conjunto de números (que não são classificados / estruturados de forma alguma) leva pelo menos Ω ( n ) tempo. A prova disso é simples: um algoritmo hipotético que é executado em o ( n ) tempo não pode examinar todos os números na entrada. Portanto, se rodássemos o algoritmo em alguma entrada, poderíamos observar que ele nunca examinou um elemento específico da entrada. Alterando esse elemento ao mínimo, podemos fazer com que o algoritmo falhe.nΩ(n)o(n)

Um limite inferior menos trivial é o limite inferior de para classificação no modelo baseado em comparação. A prova disso segue as seguintes linhas: dada uma entrada de n números, existem n ! saídas possíveis (a entrada pode ser qualquer permutação da lista classificada, portanto, a saída também pode ser qualquer permutação da entrada). Se estamos limitados a fazer apenas comparações, nosso algoritmo (em média) precisa executar pelo menos o log 2 ( nΩ(nlogn)nn!comparações de ! ) = Ω ( n log n ) para poder fornecer nlog2(n!)=Ω(nlogn)saídas diferentes.n!

Limites inferiores podem ser ainda mais fortes. Existem vários problemas (principalmente o -Hard problemas) para o qual existe um limite inferior exponencial. Os problemas desta classe incluem o cálculo de estratégias ideais para jogos como xadrez (generalizado), damas e jogar. A prova disso é através doTeorema da Hierarquia de Tempo, que declara (sujeito a algumas restrições em f ):EXPTIMEf

Dada uma função , existe um problema computacional que pode ser resolvido no tempo O ( f ( n ) )fO(f(n)) mas não pode ser resolvido no tempo .o(f(n)logn)

Então, basicamente, se você consegue pensar em uma função , existe um problema que requer muito tempo para ser resolvido.f

Finalmente, outra via de não necessariamente provar um limite de tempo mais baixo, mas algo ainda mais forte está mostrando a indecidibilidade de um problema (por exemplo, parada, pós-correspondência).


Tamanho da entrada ou saída são os limites inferiores mais comuns.
Raphael

14

Sim é possivel. O exemplo clássico é o fato de que qualquer algoritmo de classificação baseado em comparação requer Ω(nlogn) para classificar uma lista de comprimento .n

No entanto, limites inferiores parecem ser muito mais difíceis de provar do que limites superiores. Para provar que existe um algoritmo de classificação que requer comparações , você só precisa exibir esse algoritmo (classificação por mesclagem - voila !). Mas para um limite inferior, você precisa mostrar de alguma forma que nenhum algoritmo em uma classe específica pode resolver seu problema. A dificuldade de fazer isso é ilustrada pelo fato de sabermos apenas que LN LPN PP SO(nlogn) mesmo sabendo que pelo menos uma dessas inclusões é estrita ( LP S P A C E pelo teorema da hierarquia espacial) e a maioria das pessoas pensa quetodassãoestritas.

LNLPNPPSPACE,
LPSPACE

Por outro lado, Ryan Williams tem um bom artigo (e conversas, que ouvi algumas vezes) chamado Algoritmos para circuitos e Circuitos para algoritmos , nos quais ele argumenta que encontrar limites mais baixos e encontrar algoritmos não são fundamentalmente todos. tão diferente. Por exemplo, ele cita a prova da indecidibilidade do problema de parada como um exemplo de um algoritmo (a máquina de Turing universal) sendo usado exatamente para provar um limite inferior (indecidibilidade).


Eu acho que é isso que eu estou procurando "..você precisa mostrar que nenhum algoritmo de uma classe específica pode resolver seu problema." tal coisa, pelo menos em geral. Como @Tom van der Zanden descreveu a descoberta do número mínimo que eu entendo, mas essa abordagem é geral? Quero dizer geral como tendo esse tipo de argumento ao construir as provas? Obrigado pelo link também.
hsalin

1
@ user1288420 Você não está sozinho. Se alguém pudesse ver intuitivamente como provar que nenhum algoritmo de uma classe específica pode resolver algum problema, teríamos muitos mais resultados de limite inferior! Normalmente, você precisa criar algumas propriedades que todos os algoritmos da classe possuem e mostrar que essa propriedade impede que algum problema seja resolvido. Por exemplo, toda máquina de Turing que é executada em tempo sublinear tem a propriedade de que nem consegue ler todas as suas entradas. Isso significa que não pode resolver a maioria dos problemas. Isso é trivial; infelizmente, casos mais interessantes parecem impossivelmente difíceis.
David Richerby

3

n

No entanto, há um ponto na pergunta que exige mais observações sobre o limite inferior (ou os limites de complexidade em geral).

Na verdade, a escolha do que é uma única etapa computacional é irrelevante, desde que as etapas computacionais possam ser consideradas como tendo um limite superior constante (e limite inferior). O resultado da complexidade será o mesmo, pois é definido até uma constante. Tomar 3 comparações como operações unitárias, ou apenas uma única, não faz diferença.

O mesmo se aplica ao tamanho dos dados que servem de referência para avaliar o custo da computação. Tomar um único inteiro ou dois inteiros como unidade de tamanho não faz diferença.

No entanto, as duas opções devem estar relacionadas.

nlognO(logn)

Se uma operação pode ser considerada com custo unitário está fortemente relacionada a quais dados podem ser considerados com tamanho unitário. E isso depende do nível de abstração que você escolher para o seu modelo de computação.


A localização de todas as ocorrências de um padrão em uma sequência exige a leitura completa da sequência: se o padrão for "a", você não poderá encontrar todas as ocorrências sem verificar se todos os caracteres da sequência.
David Richerby

1
@DavidRicherby Na verdade, nem sempre. O algoritmo de Boyer-Moore começa no final do padrão, pulando assim na string. Se a tentativa de correspondência falhar, não será necessário ler o início da sequência. E também possui otimização semelhante ao algoritmo de Knuth-Morris-Pratt para ignorar tentativas com falha de dominar devido à estrutura do padrão. Obviamente, existem padrões que exigem a leitura de toda a string.
21415

@DavidRicherby Por que você perguntou, sabia disso?
babou

Eu não entendo o seu segundo comentário. Sua resposta original continha uma reivindicação incorreta. É claro que sabia que estava incorreto: foi assim que consegui apontar! Outras pessoas talvez não soubessem que estava incorreta; portanto, seria confuso para elas deixar a resposta como estava.
David Richerby

1
@DavidRicherby Meu argumento é que você entendeu o que eu quis dizer. Eu deveria ter dito que não pode e não faz . Isso não exigia um estilo de comentário que fizesse os leitores acreditarem que eu estava falando bobagem. E, ao fazer isso, você cometeu exatamente o mesmo erro descuidado: ao declarar " Encontrar todas as ocorrências de um padrão em uma cadeia de caracteres requer a leitura trivial de toda a cadeia de caracteres ", quando você deveria ter dito " Encontrar todas as ocorrências de um padrão em uma cadeia de caracteres pode exigir lendo a string inteira ". Eu pretendia apenas afirmar que a leitura da entrada nem sempre é necessária para mitigar meu exemplo anterior.
babou
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.