Mochila Binária

2 respostas
claudneto

Galera...eu to fazendo um projeto da faculdade e me surgiu uma dúvida.

O projeto é pra desenvolver o problema da mochila binária. É um projeto sobre algoritmos gulosos.

O projeto é basicamente isso:

Imagina que temos uma mochila e queremos colocar os objetos (de um vetor) dentro da mochila. Os objetos podem ser colocados de 3 formas diferentes:

[list]Menor peso: os objetos mais leves são colocados primeiro;[/list]
[list]Maior valor: os objetos de maior valor são colocados primeiro ou[/list]
[list]Maior relação valor/peso: os objetos de maior relação valor por peso são colocados primeiro.[/list]

Tenho duas dúvidas.

[list]Como fazer a ordenação dos objetos de forma recursiva?[/list]
/*
	 * Método de ordenação do menor para o maior PESO
	 */
	public static void ordenaMenorPeso(Objeto v[]) {
		 
        for (int i = v.length - 1; i >= 1; i--) {
            for (int j = 1; j < i; j++) {
                if (v[j - 1].getPeso() < v[j].getPeso()) {
                    Objeto aux = v[j];
                    v[j] = v[j - 1];
                    v[j - 1] = aux;
                }
            }
        }
    }

Como ordenar com duas regras de ordenação?[/list]

/* Este metodo deve implementar um algoritmo guloso que selecione objetos
* da listaDeObjetosDisponiveis a serem colocados na mochila de acordo
* com o criterio: 'objetos de menor peso primeiro', caso dois objetos
* tenham o mesmo peso, o criterio de desempate sera:
* 'objetos de maior valor primeiro' (apenas para os empates em peso).
*/

Não sei se essa implementação seria no mesmo método de ordenação.

Esse é o método que utiliza as ordenações. Esse é o do menor peso. Sabendo esse, os outros eu faço. A implementação dessa segunda regra é nesse método ou na ordenação mesmo?
public static Mochila utilizaMenorPeso(double pesoMaximoDaMochila, Objeto[] listaDeObjetosDisponiveis) {
		Mochila mochila = new Mochila(pesoMaximoDaMochila);
		
		MetodosGulosos.ordenaMenorPeso(listaDeObjetosDisponiveis);

		for (int i = 0; i < listaDeObjetosDisponiveis.length; i++) {
			
			if (mochila.getPesoUsado() + listaDeObjetosDisponiveis[i].getPeso() <= mochila.getPesoMaximo()) {
				
				mochila.setNumObjetosNaMochila(mochila.getNumObjetosNaMochila() + 1);
				mochila.setPesoUsado(mochila.getPesoUsado() + listaDeObjetosDisponiveis[i].getPeso());
				mochila.setValorDentroDaMochila(mochila.getValorDentroDaMochila() + listaDeObjetosDisponiveis[i].getValor());
				
			}
			
		}

2 Respostas

victorwss

Implemente a interface java.util.Comparator e utilize o método java.util.Collections.sort.

Como implementar o Comparator, este eu deixo com você.

claudneto

Eu não posso usar coisas que não aprendemos na aula. Apenas os comandos mais básicos e tals.

=/

Mas eu vou olhar essa interface sim. Vai me ajudar no futuro. Vlw

Criado 22 de novembro de 2010
Ultima resposta 23 de nov. de 2010
Respostas 2
Participantes 2