// Lemma 4.2 private PermutationNetwork CreateTournament(int sortInaccuracy) { PermutationNetwork pn = new PermutationNetwork(1 << K); int blockSize = 1 << sortInaccuracy; // for the permutation rho PermutationGate permuteGate = new PermutationGate(GenerateArbitraryPermutation(blockSize)); pn.AppendGate(permuteGate.Copy() as Gate, 0); pn.AppendNetwork(SortingNetworkFactory.CreateButterflyTournament(blockSize), 0); return(pn); }
public void CollapsePermutationGates() { foreach (var gate in Gates.ToList()) { if (gate is PermutationGate) { PermutationGate pgate = (PermutationGate)gate; for (int i = 0; i < pgate.Count; i++) { OutputGateAddress inputCounterparty = InputConnectionCounterparties[pgate.GetLocalInputAddress(i)]; InputGateAddress outputCounterparty = OutputConnectionCounterparties[pgate.GetLocalOutputAddress(pgate.Permute(i))]; AddConnection(new GateConnection(inputCounterparty, outputCounterparty)); } RemoveGate(pgate); } } }
// Lemma 4.2 private PermutationNetwork CreateTournament(int sortInaccuracy) { PermutationNetwork pn = new PermutationNetwork(1 << K); int blockSize = 1 << sortInaccuracy; // for the permutation rho PermutationGate permuteGate = new PermutationGate(GenerateArbitraryPermutation(blockSize)); pn.AppendGate(permuteGate.Copy() as Gate, 0); pn.AppendNetwork(SortingNetworkFactory.CreateButterflyTournament(blockSize), 0); return pn; }