Problema simplificado de diversidade máxima


7

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.mn

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 .nm

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.m=3

Existe um algoritmo para fazer isso que seja mais simples que o do Problema de Diversidade Máxima?


11
O que você tentou? Onde você ficou preso? Não queremos apenas entregar a solução; queremos que você obtenha entendimento. No entanto, como não sabemos qual é o seu problema subjacente, não podemos começar a ajudar. Veja aqui uma discussão relevante. Se você não souber como melhorar sua pergunta, por que não perguntar no Computer Science Chat ? Você também pode conferir nossas perguntas de referência .
Raphael

@ Rafael - Eu não sou um especialista em CS, então minha própria pesquisa me levou a ler sobre o Problema da Diversidade Máxima, mas isso parece ser um pouco exagerado. Tenho algumas heurísticas em que pensei, mas não as acho muito eficientes. Este é um problema da vida real que estou enfrentando, não uma tarefa de qualquer tipo.
Nbubis 13/08/19

Se houver k chaves diferentes, o princípio do buraco de pombo implica que sua diversidade máxima é pelo menos m/k; e isso é realizável.
Yuval Filmus

@Yuvalfilmus - True. A questão é como.
Nbubis

Na verdade, retiro que é sempre possível. Mas parece que uma estratégia gananciosa deve funcionar.
Yuval Filmus

Respostas:


3

O seguinte algoritmo deve funcionar.

O algoritmo prossegue em várias rodadas. Em cada rodada, deixemseja o número de itens restantes a serem usados. Pegue um item por chave, atémitens e remova esses itens. Se levássemosmitens, o algoritmo termina. Caso contrário, continue na próxima rodada.

Deixamos a prova de correção (ou um contra-exemplo) para o leitor.


Obrigado! Eu adicionei minha própria resposta, que deve dar a mesma solução em uma única passagem.
Nbubis

3

Pensando nisso um pouco mais, acho que tenho um algoritmo de "uma passagem" para resolver isso.

Deixe estar n itens com k chaves, com niitens para cada chave. Nós queremos escolhermini, de tal modo que mi=m, e essa maxmi é minimizado.

Claramente, se para todos ni temos ni>m/k, simplesmente escolhemos mi=m/k. Caso contrário, usamos o seguinte algoritmo:

  1. Conte o número de itens para cada chave (ni) e classifique-os em ordem crescente.
  2. Enquanto nim/k conjunto mi=ni
  3. Para todos ni>m/kescolha mi=mj<imjki+1

Esse algoritmo deve ser O(n) no comprimento da lista, assumindo que o número de chaves diferentes é insignificante em comparação.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.