Minha configuração é mais ou menos assim: eu tenho uma sequência de conjuntos de números inteiros , comrelativamente pequeno - na ordem de quatro ou cinco itens para todos . Quero escolher uma sequência com cada modo que a variação total ( ou , ou seja, ou ) é minimizado. Embora pareça que a escolha para cada seja 'local', o problema é que as escolhas podem se propagar e ter efeitos não locais e, portanto, o problema parece inerentemente global por natureza.
Minha principal preocupação está em um algoritmo prático para o problema; No momento, estou usando métodos de recozimento baseados em mutações subseqüentes curtas e, embora devam estar bem, parece que eu deveria fazer melhor. Mas também estou interessado na complexidade abstrata - meu palpite seria que a versão padrão da consulta ('existe uma solução de variação total ?') Seria NP-completa através da redução de algum problema de restrição como 3 SAT, mas não consigo ver a redução. Qualquer sugestão para o estudo anterior seria bem-vinda - parece um problema tão natural que não posso acreditar que não tenha sido analisado antes, mas minhas pesquisas até agora não revelaram nada parecido.
fonte
Respostas:
Aqui está um programa dinâmico. Suponha que para todos os por uma questão de clareza; o seguinte pode ser adaptado para funcionar se o tiver cardinalidades diferentes. Seja o custo mínimo de uma sequência nos primeiros conjuntos , terminando com . A seguinte recursão descreve :Ci={Ci1,…,Cim} i∈[n] Ci Cost(i,j) i Cij Cost
O custo mínimo geral é ; a sequência real de escolhas pode ser determinada examinando os argumentos ao longo do caminho. O tempo de execução é .minmj=1Cost(n,j) O(nm)
fonte
Parece que isso pode ser resolvido simplesmente computando o caminho mais curto em um gráfico acíclico direcionado. O raciocínio é que sua função objetivo minimiza a distância total entre "vizinhos" selecionados em seus conjuntos .C={C1,…,Cn}
Construa um gráfico em estágios onde cada corresponde a um elemento exclusivo . Para cada , adicione uma aresta direcionada cujo custo seja a ou .n G=(⋃ni=1Vi,E) v∈Vi x∈Ci u∈Vi,v∈Vi+1 (u,v) ℓ1 ℓ2
Agora adicione um vértice de origem com arestas de custo 0 a e um vértice de afundamento com arestas de custo 0 de . Como é um DAG e as duas funções de distância forçam os custos de borda a não serem negativos, é possível calcular o caminho mais curto em com classificação topológica e programação dinâmica (semelhante à descrição aqui ).s V1 t Vn G O(V+E)
fonte