O Problema de Diversidade Máxima exige a escolha de itens de uma lista de itens, de modo que a diversidade definida como alguma distância métrica entre os itens seja maximizada.
Eu tenho um problema mais simples, que eu esperava poder resolver de uma maneira mais simples. No meu caso, tenho uma lista de itens, cada um com uma determinada chave não exclusiva. Quero escolher itens da minha lista para que o número máximo de itens por chave seja minimizado .
por exemplo, se minha lista for:
('a', 5), ('b', 4), ('c', 2), ('a', 6), ('b', 5)
e devemos escolher itens, uma solução ideal seria uma lista contendo um item para cada chave.
Existe um algoritmo para fazer isso que seja mais simples que o do Problema de Diversidade Máxima?
algorithms
optimization
nbubis
fonte
fonte
Respostas:
O seguinte algoritmo deve funcionar.
O algoritmo prossegue em várias rodadas. Em cada rodada, deixem′ seja o número de itens restantes a serem usados. Pegue um item por chave, atém′ itens e remova esses itens. Se levássemosm′ itens, o algoritmo termina. Caso contrário, continue na próxima rodada.
Deixamos a prova de correção (ou um contra-exemplo) para o leitor.
fonte
Pensando nisso um pouco mais, acho que tenho um algoritmo de "uma passagem" para resolver isso.
Deixe estarn itens com k chaves, com ni itens para cada chave. Nós queremos escolhermi≤ni , de tal modo que ∑mi=m , e essa maxmi é minimizado.
Claramente, se para todosni temos ni>m/k , simplesmente escolhemos mi=m/k . Caso contrário, usamos o seguinte algoritmo:
Esse algoritmo deve serO(n) no comprimento da lista, assumindo que o número de chaves diferentes é insignificante em comparação.
fonte