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

chomponthis

Combinações Possíveis de Objectos

13 mensagens neste tópico

Boas!

Estou com alguns problemas na elaboração de um algoritmo para gerar combinações de objectos. Depois de ter partido a cabeça N vezes lembrei-me do P@P, talvez alguém me possa ajudar.

O algoritmo que preciso utiliza uma ArrayList de objectos, alguns deles "repetidos", e o que queria fazer era gerar combinações desses objectos N a N (genericamente) sem que se repetissem objectos dentro da mesma combinação. Fui claro?

Se tiverem um tempinho no qual me possam dar umas ideias, agradecia imenso  :P

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou seja tens tipo ABCDEAAC e queres gerar sequências aleatórias com esses objectos é isso ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sorry expliquei-me mal  :-[

O que eu tenho mesmo que fazer é o seguinte:

  • Tenho um ArrayList com vários objectos do mesmo tipo;
  • Cada um desses objectos tem uma ou mais ArrayList de outros objectos, mas diferenciam-se uns dos outros por um campo (Ex: Nome) 
  • Quero criar combinações desses mesmos objectos de um tamanho genérico (1,2,3,4,5...)
  • Isto de modo a que as combinações não repitam objectos com o mesmo nome

Expliquei-me bem?

Obrigado pela atenção  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok percebi tudo menos a parte de fazer as combinações dá ai um exemplo ilustrativo do que queres fazer :|

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, n queria tar a centralizar isto, para ver se seria útil noutras situações...

O projecto que estou a desenvolver é uma espécie de Gerador de Horários para o meu departamento.

Nesta fase, necessito de gerar todos os horários possíveis.

Para simplificar o processo de modo a não haver sobreposições de aulas, criei diversas combinações de turmas para cada disciplina válidas ( 1 Turma Teórica, 1 Prática e 1 Laboratorial);

No ArrayList que mencionava acima, vão estar objectos do tipo Disciplina. Cada objecto desses contém um ArrayList de turmas, sendo que cada objecto disciplina tem uma combinação;

O que eu queria fazer era, dado um ArrayList com muitas combinações (Objectos Disciplina) pudesse gerar todos os conjuntos possíveís de Disciplinas de modo a fazer um horário válido.

Cada horário será constituído por um ArrayList de Disciplinas, ou seja, com uma combinação de cada disciplina...

Sinto que quanto mais me explico menos me faço perceber  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pá eu acho é que estás a complicar para fazer isso que queres eu fazia algo tipo

Turno ( Nome da Disciplina, Dia da Semana,Hora de Inicio, Numero de Horas, Tipo de Aula )

ex ( P1, Terça,14:00, Pratica )

Depois podias ter um array com os nomes das disciplinas outro com os dias da semana, horas etc....

E assim criar todos os turnos possíveis ou seja criava algo tipo

(P1, Segunda, 9:0, Pratica)

(P1, Segunda, 10:0, Pratica)

...

(P1, Sexta, 16:0, Teórica)

(Mat, Segunda, 9:0, Pratica)

Depois o que tinhas de fazer era criar algo tipo grelha em que seleccionavas um e automaticamente ele exclui todos os outros nesse dia e hora, considerando que não podem haver duas aulas ao mesmo tempo.

Não é bem o que querias e para dizer a verdade nem sei se serve para o que queres lol dado que ainda estou um bocado confuso com o teu objectivo.

Param alem disso depois de teres a lista de Turnos feita podes criar as combinações.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era o que querial, mas não estou a conseguir mt bem, os meus conhecimentos de recursividade não são por aí além...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pensa da seguinte forma: escolhes um tipo de turma por cadeira, e quando chegar à terceira (supondo que há as 3, para simplificar a explicação), vais chamar novamente a função, com a próxima cadeira em questão. Isto para percorrer todas as cadeiras, para percorrer todas as turmas, um simples ciclo for (ou for each) para cada tipo de turma.

Se não estiveres a visualizar, pega numa folha e papel e tenta fazer esquematicamente que em principio vais perceber melhor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É assim, no ArrayList que eu falo, não estão contidas "cadeiras" em si. Estão objectos do tipo Disciplina, que têm um ArrayList de objectos aula como atributo. Isto é a forma como as classes foram estruturadas desde o início do programa. Mas agora não se trata de uma disciplina e de todas as suas turmas. Trata-se de objectos Disciplina, que contêm um ArrayList de turmas, contendo estes uma turma Teórica, Teórico-Prática e Prática que não se sobrepõem num horário. A partir destas combinações, basta escolher conjuntos de turmas ( Objecto Disciplina ) que não se sobreponham uns com os outros, assim haverá um horário válido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pronto, agora estou realmente desesperado...Alguém conhece um algoritmo que dado um array de inteiros (por exemplo), com alguns valores repetidos, nos devolva as combinações destes sem repetição de n a n?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É um pouco estranha pa mim esta linguagem... :\ Soz..

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