É o seguinte, estou precisando criar um algoritmo de hipercubo para um trabalho da faculdade, mas o problema é que não encontro em lugar algum sobre como funciona.
Na verdade, eu entendi mais ou menos…
Pelo que entendi, quando for de natureza,por exemplo 2, terei 4 processos…
Mas não entendi como defino a comunicação entre eles: Quem envia para quem…
Um hipercubo de natureza 2 tem 2 ^ 2 = 4 processos (vértices de um quadrado)
Cada vértice se liga aos seus 2 vizinhos.
Um hipercubo de natureza 3 tem 2 ^ 3 = 8 processos (vértices de um cubo)
Cada vértice se liga aos seus 3 vizinhos.
Um hipercubo de natureza 4 tem 2 ^ 4 = 16 processos (vértices de um hipercubo na 4ª dimensão)
Cada vértice se liga aos seus 4 vizinhos.
No caso 2 e 3, é relativamente fácil você desenhar os vértices e arestas. No caso 4, é um pouco mais difícil, mas acho que é assim:
Provavelmente a parte mais chata é definir uma estrutura de dados para representar os processos e indicar seus vizinhos.
A rigor, não, mas não é difícil você fazer isso. Digamos que você queira determinar os números 0, 3 e 6 a partir do número 2, para um hipercubo de ordem 3 (que é o que você apresentou como exemplo). Você poderia fazer algo como:
int n = 2; // neste caso o número é 010
for (int i = 0; i < 3; ++i) {
int x = n ^ (1 << i);
System.out.println (x);
}
O primeiro valor mostrado será n XOR 1, que é 3, o segundo valor mostrado será n XOR 2, que é 0, e o segundo valor será n XOR 4, que é 6.
OK?