Temos classes de complexidade com relação a, digamos, complexidade de caso médio? Por exemplo, existe uma classe de complexidade (nomeada) para problemas que levam o tempo polinomial esperado para decidir?
Outra questão considera a complexidade do melhor caso , exemplificado abaixo:
Existe uma classe de problemas (naturais) cuja decisão requer pelo menos tempo exponencial?
Para esclarecer, considere um idioma completo EXP- . Obviamente, nem todas as instâncias de L exigem tempo exponencial: há instâncias que podem ser decididas mesmo em tempo polinomial. Portanto, a melhor complexidade de L não é o tempo exponencial.
Edição: Desde que surgiram várias ambiguidades, quero tentar esclarecer ainda mais. Por complexidade do "melhor caso", refiro-me a uma classe de complexidade cuja complexidade dos problemas é mais limitada por alguma função. Por exemplo, defina BestE como a classe de idiomas que não pode ser decidida em tempo inferior a um exponencial linear. Simbolicamente, seja uma máquina de Turing arbitrária, ec , n 0 e n sejam números naturais:
onde indica o tempo que leva antes de M parar na entrada x .
Aceito que definir essa classe de problemas seja muito estranho, pois exigimos que toda máquina de Turing , independentemente de seu poder, não possa decidir a linguagem no tempo menos que um exponencial linear.
No entanto, observe que a contraparte em tempo polinomial ( BestP ) é natural, pois toda máquina de Turing exige tempo pelo menos ler sua entrada.
PS: Talvez, em vez de quantificar como "para toda a máquina de Turing ", tenhamos de limitá-la a alguma classe pré-especificada de máquinas de Turing, como máquinas de Turing em tempo polinomial. Dessa forma, podemos definir classes como B e s t ( n 2 ) , que é a classe de linguagens que exigem pelo menos o tempo quadrática para ser decidido em máquinas de Turing de tempo polinomial.
PS2: Também se pode considerar a contrapartida da complexidade do circuito, na qual consideramos o menor tamanho / profundidade do circuito para decidir um idioma.
fonte
Respostas:
Embora eu não consiga analisar suas definições, você deve saber que hierarquias de tempo muito mais fortes são conhecidas, em particular hierarquias de tempo "quase todos os lugares".
Aqui está a declaração formal: para cada vez que está vinculado , existe uma linguagem L ∈ T I M E [ T ( n ) ] com a propriedade de que todo algoritmo determinístico que reconhece L corretamente deve executar no tempo assintoticamente maior que t ( n ) em todas as entradas, com exceção de finitas, por tempo suficientemente pequeno t ( n ) .T( N ) L ∈ TEuME[ T( n ) ] eu t ( n ) t ( n )
"Suficientemente pequeno" significa .t ( n ) logt ( n ) ≤ o ( T( N ) )
Suponha-se que escolher para um exemplo, e obter uma língua difícil L . Então, qualquer algoritmo que reconheça L corretamente deve levar pelo menos 2 n / n 2 em todas as entradas após um determinado comprimento. Parece ser o que você está procurando na sua classe BestE.T( n ) = 2n eu eu 2n/ n2
Referência:
fonte
Existem várias classes que tentam abordar várias noções de complexidade de casos médios. No Zoológico de Complexidade, algumas classes nas quais você pode se interessar são:
AvgP
HeurP
DistNP
(NP, amostrável em P)
Arora / Barak abrange muitas classes semelhantes (no capítulo 18), definindo distP, distNP e sampNP.
A relação exata entre todas essas classes é caracterizada pelos Cinco Mundos de Impagliazzo, que foram questionados anteriormente em outra questão .
Quanto à questão da complexidade do "melhor caso", não sei ao certo o que você quer dizer. Você está procurando EXP ?
Se você quer dizer classes de complexidade definidas em termos de melhor caso de tempo de execução em todas as instâncias, essa não é uma medida de complexidade muito boa a priori, já que você está analisando apenas os casos triviais de qualquer problema.
fonte
[Expandindo a resposta de Ryan Williams e adicionando alguns termos de pesquisa para você] Sua noção de complexidade do melhor caso já tem um nome: quase todos os lugares (ae) dureza ou bi-imunidade. (Exemplo de Ryan é de -bi-imunidade). Se C é uma classe de complexidade, em seguida, uma linguagem L é C imune a se não houver subconjunto infinito L ' ⊆ L tal que L ' ∈ C . L é C -bi-imune se L e seu complemento ¯ LTEuME[ T( n ) ] C eu C eu′⊆ L eu′∈ C eu C eu são C imune a. Por exemplo, não é difícil mostrar que sua definição de B e s t E é equivalente à classe deconjuntos imunes a E -bi.eu¯¯¯¯= Σ∗∖ L C B e s t E E
(Histórico à parte: a noção de imunidade foi desenvolvida por Post em 1944 na teoria da computabilidade, muito antes de P ser definido. Post realmente considerado "conjuntos simples" - um conjunto é simples se seu complemento é imune. Para um teórico da computabilidade, a palavra "imune" geralmente significa "imune a conjuntos computáveis". Nesse cenário, a imunidade é equivalente a "imune a conjuntos de ce", já que todo conjunto de ce infinito contém um conjunto infinito computável. Acredito que o artigo de Post também foi o primeiro a noção de redução de muitos, mas não pude jurar.)
fonte
Casos diferentes fazem mais sentido quando se trata de algoritmos, não de problemas. Por outro lado, as classes de complexidade são sobre problemas, não algoritmos. Portanto, a classe de complexidade sempre sendo a pior das hipóteses para qualquer algoritmo se deve à definição.
Em complexidade, seu objetivo é saber o número de recursos necessários para resolver qualquer instância de um determinado problema. Portanto, você sabe que, para qualquer instância e algoritmo, precisará desses recursos e nada mais.
Na análise de algoritmos, seu objetivo é garantir que seu algoritmo tenha um limite superior para um recurso, em qualquer instância do problema. Um limite trivial é a classe de complexidade do problema, já que nenhum algoritmo útil (que executa etapas desnecessárias) leva mais tempo que isso. No entanto, você pode melhorar esse limite, dadas as especificidades do algoritmo.
Quanto ao melhor caso, é trivial para todo problema encontrar o menor número de recursos necessários. Suponha que a entrada seja do comprimento O (n) e a saída do comprimento O (m). Em seguida, o seguinte TM M sempre é executado em O (n) + O (m) para o melhor caso:
M {Entrada, Instância, Solução}
fonte
fonte