Algoritmos de aproximação usados ​​em algoritmos exatos

11

Algoritmos de aproximação podem gerar um fator constante na saída. Isso é um pouco menos satisfatório do que algoritmos exatos.

No entanto, fatores constantes são ignorados na complexidade do tempo.

Então, eu me pergunto se o seguinte truque é possível ou foi usado, para resolver algum problema :BA

  1. Use um algoritmo de aproximação que resolva o problema para obter a solução S dentro do fator constante;AS
  2. Use um algoritmo exato, resolvendo o problema , cujo tempo de execução depende do peso de S, mas funciona desde que S seja uma solução correta.BSS

Dessa forma, a aproximação é um "subprocedimento" de um algoritmo exato, e o fator constante perdido na etapa 1 é engolido na etapa 2.

sdcvvc
fonte
Crosspost de math SE
sdcvvc
Você esclareceria o que você quer dizer com e o peso de S ? BAS
Yoshio Okamoto 30/12
Isso é informal, por concretude: são problemas de pesquisa , A é pensado como um problema de otimização (para que as soluções tenham algum peso) e B A é a composição das relações. A,BABA
sdcvvc
As respostas seriam uma coleção. Então, eu acho que seria mais apropriado torná-lo wiki da comunidade.
Yoshio Okamoto
Adicionar a tag da lista grande é suficiente, não há necessidade de torná-la IMHO no wiki da comunidade.
Gopi

Respostas:

12

Um exemplo da complexidade parametrizada é uma kernelização para o problema de cobertura de vértices usando um teorema de Nemhauser e Trotter.

No problema da cobertura mínima de vértices, recebemos um gráfico G não direcionado e precisamos encontrar uma cobertura de vértice G de tamanho mínimo. Uma capa de vértice de um gráfico não direcionado é um subconjunto de vértices que toca todas as arestas.

Aqui está um algoritmo exato que usa uma aproximação na primeira fase.

Fase 1: configure a formulação de programação linear inteira do problema mínimo de cobertura de vértices . Sabe-se (ou é fácil de mostrar) que uma solução ótima básica do relaxamento de programação linear é semi-integral (ou seja, todas as coordenadas são 0, 1 ou 1/2). Essa solução ótima básica pode ser encontrada por um algoritmo de tempo polinomial usual para programação linear (ou nesse caso especial, podemos formulá-lo como um problema de fluxo de rede, para que possamos resolvê-lo combinatoriamente em tempo polinomial). Tendo uma solução ótima básica, a arredondamos para obter uma solução viável para o problema de programação linear inteira original. Seja S o subconjunto de vértices correspondente. É bom observar que S é uma aproximação 2 da instância de cobertura mínima fornecida.

Fase 2: encontre uma cobertura mínima de vértices no subgráfico induzido por S (por exemplo, por uma pesquisa exaustiva). Um teorema de Nemhauser e Trotter afirma que este subgrafo contém uma solução ótima do gráfico de entrada original. Portanto, a correção dessa abordagem segue.

Você pode consultar um livro de Niedermeier sobre algoritmos de parâmetro fixo para esse algoritmo.

Yoshio Okamoto
fonte
11

Um exemplo está relacionado a decomposições de árvores e gráficos de pequena largura de árvore.

B

BA

AAAAB


BA

BAAB

Jukka Suomela
fonte
Embora o exemplo treewidth funciona, em princípio, seria difícil de executar na prática, porque é muito difícil treewidth aproximada nada bem (desde que você pode aproximar camarilha)
Suresh Venkat
8

Um exemplo de um algoritmo de aproximação que converge para a solução exata seria o algoritmo elipsóide para resolver LPs - se os coeficientes forem racionais, será possível calcular uma distância mínima entre dois vértices do polítopo viável. Agora, o algoritmo elipsóide calcula repetidamente um elipsóide cada vez menor que deve conter a solução ideal. Uma vez que o eliposoide é pequeno o suficiente para conter apenas um único vértice, você basicamente encontrou o vértice ideal. É por isso que LP é fracamente polinomial.

k

Finalmente, ir além de um campo - muitos algoritmos que seguem a técnica de alteração (pegue uma amostra aleatória - e faça alguns reparos para conseguir o que deseja) se enquadra nesse quadro. Um exemplo bonito é o algoritmo para calcular a mediana usando amostragem aleatória (veja o livro de Motwani e Raghavan). Existem muitos exemplos - sem dúvida muitos dos algoritmos incrementais aleatórios em Geometria Computacional se enquadram nessa estrutura.

Sariel Har-Peled
fonte
4

Muitos algoritmos sensíveis à saída empregam essa técnica. Por exemplo, aqui está um problema simples no qual essa técnica pode ser usada:

Problema . Você recebe uma matriz A [1 .. n ] na qual cada elemento está no máximo k posições distantes da posição em que estaria se A fosse classificado.

Por exemplo, A [1..7] mostrado abaixo pode ser uma matriz de entrada para k = 2.

Projete um algoritmo para classificar a matriz em O ( n log k ), assumindo que k é desconhecido.

Fonte do problema: Algo Muse Archive.

Jagadish
fonte