Definições de um algoritmo em execução em tempo polinomial e em tempo fortemente polinomial

18

Wikipedia define que seja

Diz-se que um algoritmo tem tempo polinomial se o seu tempo de execução for delimitado por uma expressão polinomial no tamanho da entrada do algoritmo, ou seja, para alguma constante k.T(n)=O(nk)

O algoritmo é executado em tempo fortemente polinomial se [8]

  • o número de operações no modelo aritmético de computação é limitado por um polinômio no número de números inteiros na instância de entrada; e

  • o espaço usado pelo algoritmo é delimitado por um polinômio no tamanho da entrada.

Em Bernhard Korte, Jens Vygen, Otimização Combinatória :

Definição 1.4.

Diz-se que um algoritmo com entrada racional é executado em tempo polinomial se

  • existe um número inteiro k de modo a que ele funcione em , onde n é o tamanho da entrada, eO(nk)
  • todos os números em cálculos intermediários podem ser armazenados com bits.O(nk)

Diz-se que um algoritmo com entrada arbitrária é executado em tempo fortemente polinomial se

  • existe um número inteiro k de modo a que ele funcione em tempo para qualquer entrada que consiste em n e númerosO(nk)
  • é executado em tempo polinomial para entrada racional.

Por favor corrija-me se eu estiver errado. A seguir estão as diferenças literais que notei:

  • Para algoritmos de tempo polinomial, a definição de Korte e Vygen é "a definição da Wikipedia + espaço de armazenamento polinomial".

  • Para algoritmos de tempo fortemente polinomial, a definição de Korte e Vygen e a definição da Wikipedia exigem tempo polinomial no tamanho do armazenamento de entrada. Mas K e V também requerem tempo polinomial no número de números em qualquer entrada, enquanto o Wikipedia também requer espaço de armazenamento polinomial no tamanho da entrada.

Então, as definições de K e V e da Wikipedia para esses dois conceitos são equivalentes, respectivamente? Que outras diferenças e relações existem entre eles?

Obrigado e cumprimentos!

Tim
fonte
a seção da wikipedia logo após o defn tem uma boa explicação, não é claro o suficiente? tem a ver com quantos bits representam números e números muito grandes podem afetar as medições de complexidade "para cima". acho que os padrões com K&V são provavelmente equivalentes. quanto aos insumos racionais, é preciso uma prova de que a aritmética dos racionais não aumenta muito de tamanho. pense que isso pode ser demonstrado localizando o LCD de todas as entradas e fazendo toda a aritmética em números no LCD.
vzn
@ vzn: a explicação na Wikipedia (1) é decente para a máquina aritmética vs. a máquina de Turing, mas é bastante superficial quanto ao objetivo e à definição fortemente polis e (2) estava completamente errada no que o GCD exemplifica.
alexei

Respostas:

5

Antes das definições formais, considere o que a classificação "forte / fraca" visa distinguir.

Primeiro, considere executar qualquer um em uma máquina de Turing. Ambos serão executados em várias etapas polinomiais no comprimento da entrada codificada em binário. Consequentemente, o número de operações aritméticas executadas por ambos teria que ser polinomial no comprimento da entrada codificada em binário . Portanto, tanto para o tempo de execução da máquina de Turing quanto para o polinômio, o número de valores de entrada ou suas magnitudes aumenta. Para enfatizar o último, observe que mesmo o mais forte dará mais passos na TM em magnitudes maiores (ele precisa pelo menos ler os bits extras). Sob nenhuma circunstância alguém se torna exponencial (como é o caso do tempo pseudo-polinomial não relacionado). Com uma máquina de Turing sozinha, uma diferença fundamental não parece detectável.

O(1). À medida que você aumenta as magnitudes dos números de entrada, o comprimento da entrada codificada em binário aumenta e o tempo de execução do algoritmo fraco aumenta, no entanto, o tempo de execução do algoritmo forte não muda, pois pode ser limitado pelo número dos números de entrada que você não está alterando (por exemplo, multiplicação de matrizes vs. GCD de Euclides).

O conjunto de algoritmos que são executados no número de operações aritméticas polinomiais no número de números de entrada é bem definido, mas se sobrepõe à classe de algoritmos que levam o número de etapas da TM exponencial no comprimento da entrada codificada em binário (veja exemplos ). Portanto, para este conjunto, as propriedades no segundo parágrafo não seriam válidas. Para excluir a interseção indesejada, adicionamos uma condição para um espaço polinomial da TM [*].

Em [1] isso é afirmado de duas maneiras:

  • O algoritmo é executado em tempo fortemente polinomial se o algoritmo for um algoritmo de espaço polinmomial e executar várias operações aritméticas elementares que são delimitadas por um polinômio no número de números de entrada.
  • Um algoritmo polinomial é um algoritmo de espaço polinomial (em nosso modelo padrão de máquina de Turing) e algoritmo de tempo polinomial no modelo aritmético (consulte esta pergunta para um esclarecimento).

Essa subclassificação do que já são algoritmos "eficientes" pode ser útil, pois os computadores físicos se assemelham mais às máquinas aritméticas do que às máquinas de Turing; portanto, a subclasse pode identificar o algoritmo que seria mais rápido em uma máquina física se o seu polinômio tivesse um comprimento maior. de entrada codificada em binário são comparáveis ​​(o que não é o caso em, por exemplo,O(n3) vs. fraco O(n2))

[*] A segunda condição é declarada em todos os lugares como espaço polinomial, enquanto exigir tempo polinomial faz mais sentido para mim. O primeiro é mais inclusivo, mas estranho. Existem algoritmos fortemente polinomiais que levam mais do que tempo polinomial? Observe que o exemplo de quadrado repetido não ocupa tempo polinomial nem espaço polinomial.

[1] Grötschel, Martin; László Lovász, Alexander Schrijver (1988). "Complexidade, Oráculos e Computação Numérica". Algoritmos geométricos e otimização combinatória. Springer. ISBN 0-387-13624-X.

alexei
fonte