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); } }
public override int PopCount() { return(numSequenceExtended.PopCount()); }