É 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…
mais a apostila ta bem difícil de entender, isso ai ta relacionado a desenvolvimento 3d ou algo do tipo?
dsystem
userguj,
Em primeiro lugar, obrigada por responder…
Mas sinceramente, complicou ainda mais o meu entendimento.
Teria alguma outra forma, não tão difícil?
Porque assim… O que não entendo é: Como definir quem se comunicará com quem?
Obrigada
E
entanglement
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.
(Achei isso com a consulta ao Google “hypercube interconnection network” ).
Ele diz isto aqui:
Acho que com isso seu problema está resolvido. Nada como procurar as coisas em inglês
dsystem
entanglement
Obrigada pelo material.
Consegui entender como defino com quem cada um se ligará.
Só preciso conseguir implementar isso…rs
Só mais alguma perguntinha:
Tem alguma função no java que me permite identificar o próximo de um numero que difere apenas um bit(Conforme explicação do hipercubo). Por exemplo :
o 2 que é 010 seus vizinhos seriam 000,011,110. Há alguma função que me ajude a calcular isso?
Obrigada
E
entanglement
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:
intn=2; // neste caso o número é 010for(inti=0; i < 3; ++i) {intx=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?
dsystem
entanglement,
agora deu uma clareada legal em minha mente...
:)
To aqui implementando ...
Na verdade já consegui implementar... Facinho...
Fiz dessa forma (Me corrija se estiver algo errado)
intn=2;intk=3;intx=(int)Math.pow(n,k);System.out.println(""+x);for(inti=0;i<x;i++){for(intj=0;j<3;++j){intre=i^(1><<j);System.out.println(i+" mandou para "+re);}
System.out.println("--");}