• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Duffy

[Ajuda] Problema do Ordenamento Linear

4 mensagens neste tópico

Boas pessoal trabalhador  :thumbsup:

Bem tenho um trabalhito para fazer para uma cadeira com este enunciado:

Dada uma matriz quadrada N×N pretende-se encontrar um reordenamento das linhas

e colunas de tal forma que a soma dos valores do triângulo superior da matriz seja a

mais elevada possível. Este reordenamento é especificado através de uma permutação

π dos índices das linhas e das colunas {1, ..., N}, indicando a ordem pela qual estas

devem ser consideradas.

Obvio que não venho pedir para me fazerem o trabalho  :P mas estou um bocado na dúvida de qual a heuristica a utilizar para este tipo de problemas e queria umas opiniões, e se alguém tiver conhecimentos de alguns sites ou pdf's relevantes também agradecia.

Obrigado :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu criaria outra matriz, NxN, onde guardaria: (vou começar a matriz na posição 1 para simplificação)

m[1][1] = Elemento central da primeira linha

m[1][2] = Soma dos dois elementos centrais da primeira linha

m[2][1] = Elemento central da segunda linha

m[2][5] = Soma dos cinco elementos centrais da segunda linha, etc.

O que faria a seguir dependeria dos limites do enunciado, e se a matriz pode ou não conter elementos negativos.

Se a matriz tiver um máximo de... 10x10 utilizaria permutações (se não me engano permutações de 10 elementos demoram ligeiramente menos de um segundo a calcular)

Caso contrário, julgo que exista uma solução que envolva Programação Dinâmica para esse problema, mas não tenho a certeza. Foi isso que o meu instinto me disse mas não estou a ver qual é.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora não é nada mal pensado não, vou experimentar isso, o limite é de 80 linhas por 80 colunas  :P obrigado pela dica  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

80 linhas por 80 colunas não podes fazer permutações, fica demasiado lento.

Estou-me a lembrar de várias alternativas, mas todas elas me parecem falíveis:

Greedy: Procurar a que tem maior valor para o maximo, depois a que tem maior valor para n-1, etc.

Value/Size: Ordenar todas as alternativas num vector com a relação Valor/Tamanho. Ou seja, 2 valores do meio: 5 7, 12/2 = 6; 1 Valor: 9 -> 9/1 = 9. Simplesmente aproveitar os maiores de cada género.

Ordenação: Aplicar um quick/bubble sort, com um parametro de comparação mais rabuscado, terias que ordenar apontadores etc..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora