Quando dizemos que um problema B é um caso especial de um problema A, queremos dizer que B é o mesmo problema que A, com a exceção de que nem todas as instâncias de problemas de A são instâncias de problemas para B. E seB é um caso especial de Adizemos que A é uma generalização de B.
Dois exemplos: a adição de números inteiros positivos (digamos 5+3) é um caso especial de adição de números inteiros (por exemplo, 5+(−3)) e classificação de números inteiros no intervalo {1,2,…,k} para fixo k é um caso especial de classificação de números inteiros arbitrários.
Qualquer solução para A também é uma solução para B, e quaisquer resultados de dureza para B (por exemplo, é NP-hard ou necessidades Ω(n2) tempo a ser resolvido) transfira imediatamente para A. No entanto, geralmente consideramos casos especiais porque, às vezes, podemos encontrar algoritmos melhores para eles em comparação com o caso geral.
Exemplos: o Θ(nlogn) algoritmo de classificação funciona tão bem em números inteiros no intervalo {1,2,…,k}, mas o CountingSort trabalha no caso especial (não no geral) em O(n+k), que geralmente é mais rápido se k é pequeno. SAT é NP-Difícil, 3SAT é um caso especial de SAT isso ainda é NP-hard (o que implica, portanto, que SAT é NP-hard), mas 2SAT é em P.
Observe que às vezes a definição acima é esticada (abusada) para dizer que você pode codificar qualquer instância de B como uma instância de A, e que essa codificação é extremamente simples. Nesse caso, o acima geralmente ainda é válido, mas é menos rigoroso.