Esempio n. 1
0
        // 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);
        }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 3
0
        // 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;
        }