/// <summary>
        /// Calculation method.
        /// </summary>
        /// <param name="manager">
        /// Intervals manager.
        /// </param>
        /// <param name="link">
        /// Link of intervals in chain.
        /// </param>
        /// <returns>
        /// Normalized partial dependence coefficient.
        /// </returns>
        public override double Calculate(BinaryIntervalsManager manager, Link link)
        {
            if (manager.FirstElement.Equals(manager.SecondElement))
            {
                return 0;
            }

            var partialDependenceCoefficient = new PartialDependenceCoefficient();

            double k1 = partialDependenceCoefficient.Calculate(manager, link);

            return k1 * 2 * manager.PairsCount / manager.FirstChain.GetLength();
        }
 /// <summary>
 /// Calculation method for two congeneric chains.
 /// </summary>
 /// <param name="manager">
 /// Intervals manager.
 /// </param>
 /// <param name="link">
 /// Link of intervals in chain.
 /// </param>
 /// <returns>
 /// Characteristic value.
 /// </returns>
 public abstract double Calculate(BinaryIntervalsManager manager, Link link);
        /// <summary>
        /// The get relation interval manager.
        /// </summary>
        /// <param name="first">
        /// The first.
        /// </param>
        /// <param name="second">
        /// The second.
        /// </param>
        /// <returns>
        /// The <see cref="BinaryIntervalsManager"/>.
        /// </returns>
        public BinaryIntervalsManager GetRelationIntervalsManager(int first, int second)
        {
            if (relationIntervalsManagers == null)
            {
                relationIntervalsManagers = new BinaryIntervalsManager[alphabet.Cardinality - 1, alphabet.Cardinality - 1];
            }

            var intervalsManager = relationIntervalsManagers[first - 1, second - 1];

            if (intervalsManager == null)
            {
                intervalsManager = new BinaryIntervalsManager(CongenericChain(first - 1), CongenericChain(second - 1));
                relationIntervalsManagers[first - 1, second - 1] = intervalsManager;
            }

            return intervalsManager;
        }