public int GetMinimumLettersConsidered(IPermutationDictionary <ExtensionMap> permExMaps,
                                               Permutation permutation,
                                               IPosition positions, int maximumLettersConsidered)
        {
            IPermutationBuilderExternal permutationBuilderExternal = permutationBuilder.Clone();

            int length = permutation.Length;
            NumSequenceExtended numSequenceExtended =
                numSeqExtFactory.GetNumSequenceDefault(1, length, false);

            Permutation permutationUpfix = permutationBuilderExternal.CreatePattern(new ulong[] { 0 },
                                                                                    permutation.LetterSize, 0);

            int minimumLettersConsidered = 0;
            int index;
            int popCount;

            for (int i = 0; i < maximumLettersConsidered; i++)
            {
                minimumLettersConsidered++;
                index = positions.GetPosition(length - i - 1);
                numSequenceExtended.SetLetterMutable(index, 1);
                popCount         = numSequenceExtended.PopCount(index);
                permutationUpfix = permutationUpfix.InsertPosition(i + 1 - popCount);
                if (!permutationsUpfixes[i].Contains(permutationUpfix))
                {
                    break;
                }
            }

            return(minimumLettersConsidered);
        }
        private void ComputeUpfixes(Permutation permutation, IPosition positions)
        {
            IPermutationBuilderExternal permutationBuilderExternal = permutationBuilder.Clone();

            Permutation permutationUpfix = permutationBuilderExternal.CreatePattern(new ulong[] { 0 },
                                                                                    permutation.LetterSize, 0);

            int length = permutation.Length;

            NumSequenceExtended numSequenceExtended =
                numSeqExtFactory.GetNumSequenceDefault(1, length, false);

            int index;
            int popCount;

            for (int i = 0; i < length - 1; i++)
            {
                index = positions.GetPosition(length - i - 2);
                numSequenceExtended.SetLetterMutable(index, 1);
                popCount         = numSequenceExtended.PopCount(index);
                permutationUpfix = permutationUpfix.InsertPosition(i + 1 - popCount);
                permutationsUpfixes[i].Add(permutationUpfix);
            }
        }
 static MinimumLettersChecked()
 {
     permutationBuilder = new PermutationBuilderExternal();
     numSeqExtFactory   = new NumSequenceExtendedFactory();
 }
Beispiel #4
0
 protected CommandHandlerPatterns(IResultWriter resultWriter, IPermutationBuilderExternal builder)
     : base(resultWriter)
 {
     this.builder = builder;
 }