Tempo constante é a complexidade absoluta de fim de tempo baixo. Alguém pode se perguntar: existe algo não trivial que pode ser calculado em tempo constante? Se nos apegarmos ao modelo da máquina de Turing, pouco poderá ser feito, pois a resposta só pode depender de um segmento inicial de comprimento constante da entrada, pois partes mais afastadas da entrada nem podem ser alcançadas em tempo constante.
Por outro lado, se adotarmos o modelo de RAM de custo unitário um pouco mais poderoso (e mais realista), no qual operações elementares em números de bits são contadas como etapas únicas, poderemos resolver tarefas não triviais, mesmo em tempo constante. Aqui está um exemplo:
Instância: Inteiros , cada um dado em formato binário por bits.O ( log n )
Pergunta: Existe um gráfico vértice, de modo que sua conectividade de vértice é , sua conectividade de borda é e seu grau mínimo é ?k l d
Observe que, a partir da definição, nem é óbvio que o problema esteja no NP . O motivo é que a testemunha natural (o gráfico) pode precisar de uma descrição longa de , enquanto a entrada é fornecida apenas por bits . Por outro lado, o seguinte teorema (veja Teoria dos Gráficos Extremais de B. Bollobas) vem em socorro.O ( log n )
Teorema: Seja inteiros. Existe um gráfico -vertex com conectividade de vértices , conectividade de borda e grau mínimo , se e somente se uma das seguintes condições for atendida:n k l d
- ,
Como essas condições podem ser verificadas em tempo constante (no modelo de RAM de custo unitário), o teorema leva a um algoritmo de tempo constante nesse modelo.
Pergunta: Quais são alguns outros exemplos não triviais de algoritmos de tempo constante?
fonte
Respostas:
O artigo Algoritmos de aproximação de tempo constante por meio de melhorias locais de Nguyen e Onak fornece muitos exemplos de esquemas aleatórios de aproximação de tempo constante: Correspondência máxima (o tempo de execução depende apenas do grau máximo do gráfico), Capa do conjunto, etc. apresentar um método para projetar tais algoritmos.
fonte
Existem muitos exemplos de jogos estudados na teoria combinatória dos jogos em que o estado de um jogo pode ser descrito por um número constante de valores inteiros. Para alguns deles, uma estratégia vencedora para o jogo pode ser calculada em tempo constante. Mas eles também levantam questões sobre qual é exatamente o seu modelo de computação.
Um dos jogos combinatórios mais simples e básicos é o seguinte: um possui um número constante de pilhas de feijões e, em um único movimento, você pode remover qualquer número de feijões de uma pilha, ganhando ou perdendo (dependendo da sua escolha de regras) se você pegar o último feijão. A estratégia ideal pode ser calculada em tempo constante, se você permitir operações booleanas xor bit a bit (ou seja, o operador ^ em linguagens de programação como C / C ++ / Java / etc.) Esse é um algoritmo de tempo constante no seu modelo?
Aqui está um em que se sabe que existe um algoritmo determinístico exato em tempo constante (em um modelo de computação estendido possivelmente irreal que permite testar a primalidade de um número em tempo constante), mas não se sabe o que é esse algoritmo: dada uma partida movimento no jogo da cunhagem de Sylver , determine se é um movimento vencedor ou perdedor. Um fluxograma para esse problema é fornecido em Berlecamp, Conway e Guy, Winning Ways , mas depende de um conjunto finito de contra-exemplos para uma caracterização geral dos movimentos vencedores, e não se sabe qual é esse conjunto (ou mesmo se é esvaziar).
Outro exemplo interessante da teoria combinatória dos jogos é o jogo de Wythoff. Cada posição do jogo pode ser descrita por um par de números inteiros (ou seja, espaço constante, no seu modelo de computação), os movimentos no jogo envolvem a redução de um desses dois números inteiros para um valor menor, e a estratégia vencedora envolve a mudança para uma posição em que a razão entre esses dois números inteiros é o mais próximo possível da proporção áurea. Mas em muitas posições de jogo há uma opção: você pode reduzir o maior dos dois números inteiros até o ponto em que é (quase) o número inteiro menor multiplicado pela proporção áurea ou o número inteiro menor dividido pela proporção áurea. Apenas uma dessas duas opções será uma jogada vencedora. Portanto, a estratégia ideal pode ser definida em termos de um número constante de operações aritméticas, mas essas operações envolvem um número irracional, a proporção áurea. Esse é um algoritmo de tempo constante no seu modelo? Talvez isso' (uma aproximação à proporção áurea precisa para registrar n bits), mas não o tempo constante, usando apenas operações aritméticas (sem raízes quadradas) e valores fixos de constantes inteiras?n registron
fonte
fonte