コード例 #1
0
        public Alphabet(String alphabet)
        {
            this._alphabet = alphabet.ToCharArray();

            (Int32 minValue, Int32 maxValue) = this.CalculateBounds(this._alphabet);

            {
                (Boolean containsDuplicate, Char duplicatedChar) = this.ContainsDuplicate(this._alphabet, minValue, maxValue);

                if (containsDuplicate)
                {
                    throw new InvalidOperationException("Illegal alphabet: repeated character = '" + duplicatedChar + "'");
                }
            }

            this._index = new AlphabetCompactIndex(minValue, maxValue);

            for (int i = 0; i < this._index.Length; i++)
            {
                this._index[i] = -1;
            }

            for (int i = 0; i < this._alphabet.Length; i++)
            {
                this._index[this._alphabet[i]] = i;
            }

            this.Radix          = alphabet.Length;
            this.BinaryLogRadix = this.CalculateBinaryLogRadix(alphabet.Length);
            this.MinChar        = (Char)minValue;
            this.MaxChar        = (Char)maxValue;
        }
コード例 #2
0
        public Alphabet(Int32 radix)
        {
            this._alphabet = new Char[radix];
            this._index    = new AlphabetCompactIndex(0, radix - 1);

            for (int i = 0; i < radix; i++)
            {
                this._alphabet[i] = (Char)i;
                this._index[i]    = i;
            }

            this.Radix          = radix;
            this.BinaryLogRadix = this.CalculateBinaryLogRadix(radix);
            this.MinChar        = (Char)0;
            this.MaxChar        = (Char)(radix - 1);
        }