30 mar 2015, 13:20
void SubsetGen(vector<vector<int > > &S, vector<vector<int > > &S_, int i, int n){
int k_max = pow(2,n); //máximo de subconjuntos possíveis
//adicionara o nó 'i' ao subconjunto se ele fizer a condição válida
//set S {k in artificial_set} ordered := {i in V_: k div 2**(ord(i) - 1) mod 2 = 1};
for (int k = 0; k <= (k_max-1); k++){ //percorrendo os subconjuntos possíveis
int i_aux = i;
for(int pos = 1; pos <= n+1; pos++){
if (int(floor(k/pow(2,(pos-1))))%2 == 1){
S[k].push_back(i_aux); //adiciona ao fim da lista
i_aux++;
}
else{
S_[k].push_back(i_aux);
i_aux++;
}
}
}
}
31 mar 2015, 10:55
01 abr 2015, 13:51
Sobolev Escreveu:Bom dia,
Pode pensar do seguinte modo, os conjuntos a que certo elemento pertence são formados pela união do conjunto formado apenas por esse elemento com qualquer subconjunto formado pelos restantes. O número de subconjuntos formados com os restantes (n-1) inteiros pode ser obtido com a mesma fórmula que referiu. Assim, tomando o seu exemplo com o número 2, começamos por determinar o número de subconjuntos de {1,3,4, ..., n}, que será de \(2^{n-1}\) (incluindo o conjunto vazio). Este é exactamente o número de subconjuntos que inclui o inteiro 2. No caso de n=100 terá 2^99= 633.825.300.114.114.700.748.351.602.688 conjuntos nessas coindições.
01 abr 2015, 14:00
allexandrefsr Escreveu:Sobolev Escreveu:Bom dia,
Pode pensar do seguinte modo, os conjuntos a que certo elemento pertence são formados pela união do conjunto formado apenas por esse elemento com qualquer subconjunto formado pelos restantes. O número de subconjuntos formados com os restantes (n-1) inteiros pode ser obtido com a mesma fórmula que referiu. Assim, tomando o seu exemplo com o número 2, começamos por determinar o número de subconjuntos de {1,3,4, ..., n}, que será de \(2^{n-1}\) (incluindo o conjunto vazio). Este é exactamente o número de subconjuntos que inclui o inteiro 2. No caso de n=100 terá 2^99= 633.825.300.114.114.700.748.351.602.688 conjuntos nessas coindições.
Obrigado Sobolev,
Acabei percebendo isso, mas revisando meu problema, acabei descobrindo que ele tem uma grande maneira de ser simplificado. \(\forall i \in N = \{1,...,100\}, \exists N_i \subseteq N.\). Cada um destes subconjuntos \(N_i, \forall i \in N\), chamado de vizinhança de i, contém o inteiro i (referente a um ponto no plano cartesiano) e os índices dos 9 outros pontos mais próximos a ele. Assim, eu só me interesso pelos subconjuntos de \(N_i, \forall i \in N\) que também contém i. Meu real problema agora reside em como gerar somente os subconjuntos de \(N_i, \forall i \in N\) que contenham i.
Vocês tem alguma ideia de como fazer isso?
Muito obrigado,
Allexandre.
01 abr 2015, 15:46