A solução do problema de vazão máxima gera um corte mínimo qualificado. Mas quero vários (talvez centenas) pequenos cortes como candidatos. Os cortes não precisam ser mínimos, desde que sejam pequenos (em peso). Como faço isso?
A solução do problema de vazão máxima gera um corte mínimo qualificado. Mas quero vários (talvez centenas) pequenos cortes como candidatos. Os cortes não precisam ser mínimos, desde que sejam pequenos (em peso). Como faço isso?
Respostas:
Você conhece o algoritmo de contração aleatória, também conhecido como algoritmo de Karger ? O algoritmo basicamente funciona selecionando arestas uniformemente aleatoriamente e contratando-as com os auto-loops removidos. O processo é interrompido quando há dois nós restantes e os dois nós representam um corte. Para aumentar a probabilidade de sucesso, o algoritmo aleatório é executado várias vezes. Enquanto faz as corridas, mantém o controle do menor corte encontrado até agora.
O que sugiro agora é que você execute o algoritmo de contração aleatória várias vezes. Sempre que o algoritmo emitir um corte, decida se deve ou não mantê-lo, verificando se é pequeno o suficiente. Naturalmente, você pode parar quando produziu o suficiente desses pequenos cortes. Dependendo do tamanho da sua entrada, isso pode até funcionar muito bem na prática.