Vou apresentar meu problema com um exemplo. Digamos que você esteja projetando um exame, que consiste em um certo conjunto de perguntas independentes (que os candidatos podem acertar ou errar). Você quer decidir sobre a pontuação a ser dada a cada uma das perguntas, com a regra de que os candidatos com pontuação total acima de um determinado limite serão aprovados e os demais falharão.
Na verdade, você é muito profundo sobre isso, e você imaginou todas as possíveis resultados, e decidiu para cada um deles se um candidato com este desempenho deve passar ou não. Portanto, você tem uma função booleana que indica se o candidato deve ser aprovado ou reprovado, dependendo de suas respostas exatas. É claro que essa função deve ser monótona : quando acertar um conjunto de perguntas faz você passar, acertar qualquer superconjunto deve fazer você passar também. f : { 0 , 1 } n → { 0 , 1 }
Você pode decidir sobre as pontuações (números reais positivos) a serem dadas às perguntas e em um limite, para que sua função seja exatamente capturada pela regra "um candidato passa se a soma das pontuações das perguntas corretas estiver acima do limite" ? (É claro que o limite pode ser considerado 1 sem perda de generalidade, até multiplicar as pontuações por uma constante.)
Formalmente: Existe uma caracterização das funções booleanas monótonas para as quais existem tal que para todos , temos iff ?w 1 , … , w n ∈ R + v ∈ { 0 , 1 } n f ( v ) = 1 ∑ i w i v i ≥ 1
Não é tão difícil perceber que nem todas as funções podem ser representadas. Por exemplo, a função não pode: como é aceito, devemos ter , portanto, um de deve ser e da mesma forma para . Agora, se for, por exemplo, e , temos uma contradição porque mas é rejeitado; os outros casos são análogos.( 1 , 1 , 0 , 0 ) w 1 + w 2 ≥ 1 w 1 , w 2 ≥ 1 / 2 W 3 , W 4 W 1 w 3 w 1 + w 3 ≥ 1 ( 1 , 0 ,
Isso me parece um problema muito natural, então minha pergunta principal é saber sob qual nome isso foi estudado. Pedir uma "caracterização" é vago, é claro; minha pergunta é saber se a classe de funções que pode ser representada dessa maneira tem um nome, o que se sabe sobre a complexidade de testar se uma função de entrada pertence a ela (dada como uma fórmula ou como um circuito), etc.
É claro que se pode pensar em muitas variações sobre esse tema. Por exemplo, em exames reais, as perguntas não são independentes, mas há um DAG nas perguntas indicando a dependência, e os candidatos só podem responder a uma pergunta se todos os pré-requisitos tiverem sido respondidos. A condição nas funções monótonas poderia então ser restrita a avaliações em que satisfazem as dependências, e a questão seria determinar se uma função de entrada pode ser capturada, assim, dado um DAG de entrada nas variáveis. Poder-se-ia pensar em variantes nas quais as pontuações são -tuplos para fixo (somadas em pontos e comparadas em termos de pontos a um vetor limiar), que podem capturar mais funções que k k k = 1. Como alternativa, você pode querer capturar funções mais expressivas que não são booleanas, mas vão para um domínio totalmente ordenado, com limites diferentes que devem indicar sua posição no domínio. Por fim, não tenho certeza do que aconteceria se você permitisse pontuações negativas (para que você pudesse eliminar a restrição monótona sobre as funções).
(Observação: o que me fez pensar nisso é a rodada de seleção do Google Code Jam, em que os candidatos são selecionados se atingirem um determinado limite de pontuação e as pontuações de problemas são presumivelmente cuidadosamente projetadas para refletir quais conjuntos de problemas são considerados suficientes para a seleção. O Code Jam possui uma estrutura de dependência nas perguntas, com algumas questões de "entrada grande" que não podem ser resolvidas, a menos que você tenha resolvido a "entrada pequena" primeiro.