/// <summary> /// Permite instanciar um objecto reponsável pela correcção da solução proveniente da relaxação linear. /// </summary> /// <param name="comparer">O comparador de custos.</param> /// <param name="converter">O conversor.</param> /// <param name="nearest">O objecto responsável pelos arredondamentos.</param> /// <param name="coeffsField">O corpo responsável pelas operações sobre os coeficientes.</param> public LinearRelRoundCorrectorAlg( IComparer <CoeffType> comparer, IConversion <int, CoeffType> converter, INearest <CoeffType, int> nearest, IField <CoeffType> coeffsField) { if (coeffsField == null) { throw new ArgumentNullException("coeffsField"); } else if (nearest == null) { throw new ArgumentNullException("nearest"); } else if (converter == null) { throw new ArgumentNullException("converter"); } else if (comparer == null) { throw new ArgumentNullException("comparer"); } else { this.coeffsField = coeffsField; this.converter = converter; this.nearest = nearest; this.comparer = comparer; } }
/// <summary> /// Instancia um novo objecto do tipo /// <see cref="LLLBasisReductionAlgorithm{VectorType, FieldCoeffType, GroupCoeffType}"/>. /// </summary> /// <param name="fieldVectorSpace">O espaço vectorial associado ao corpo.</param> /// <param name="scalarProd">O produto escalar.</param> /// <param name="nearest">O objecto responsável pela determinação do valor inteiro mais próximo.</param> /// <param name="fieldCoeffTypeComparer">O comparador de coeficientes.</param> /// <exception cref="ArgumentNullException"> /// Se algum dos argumentos for nulo. /// </exception> public LLLBasisReductionAlgorithm( IVectorSpace <FieldCoeffType, VectorType> fieldVectorSpace, IScalarProductSpace <VectorType, FieldCoeffType> scalarProd, INearest <FieldCoeffType, FieldCoeffType> nearest, IComparer <FieldCoeffType> fieldCoeffTypeComparer) { if (fieldVectorSpace == null) { throw new ArgumentNullException("fieldVectorSpace"); } else if (scalarProd == null) { throw new ArgumentNullException("scalarProd"); } else if (nearest == null) { throw new ArgumentNullException("nearest"); } else if (fieldCoeffTypeComparer == null) { throw new ArgumentNullException("fieldCoeffTypeComparer"); } else { this.fieldVectorSpace = fieldVectorSpace; this.scalarProd = scalarProd; this.nearest = nearest; this.fieldCoeffTypeComparer = fieldCoeffTypeComparer; } }
/// <summary> /// Instancia um novo objecto do tipo /// <see cref="SubsetSumLLLReductionAlgorithm{CoeffType, NearestCoeffFieldType}"/>. /// </summary> /// <param name="vectorFactory">A fábrica responsável pela criação de vectores.</param> /// <param name="scalarProd">O objecto responsável pelos produtos escalares.</param> /// <param name="nearest">O objecto responsável pela determinação dos valores mais próximos.</param> /// <param name="fieldComparer">O comparador de objectos do corpo.</param> /// <param name="converter">O conversor de objectos.</param> /// <param name="nearestField">O objecto responsável pela determinação dos elementos mais próximos.</param> /// <exception cref="ArgumentNullException"> /// Se algum dos argumentos for nulo. /// </exception> public SubsetSumLLLReductionAlgorithm( IMathVectorFactory <NearestCoeffFieldType> vectorFactory, IScalarProductSpace <IMathVector <NearestCoeffFieldType>, NearestCoeffFieldType> scalarProd, INearest <NearestCoeffFieldType, NearestCoeffFieldType> nearest, IComparer <NearestCoeffFieldType> fieldComparer, IConversion <CoeffType, NearestCoeffFieldType> converter, IField <NearestCoeffFieldType> nearestField) { if (nearestField == null) { throw new ArgumentNullException("nearestField"); } else if (converter == null) { throw new ArgumentNullException("converter"); } else if (fieldComparer == null) { throw new ArgumentNullException("fieldComparer"); } else if (nearest == null) { throw new ArgumentNullException("nearest"); } else if (scalarProd == null) { throw new ArgumentNullException("scalarProd"); } else if (vectorFactory == null) { throw new ArgumentNullException("vectorFactory"); } else { this.vectorFactory = vectorFactory; this.scalarProd = scalarProd; this.nearest = nearest; this.fieldComparer = fieldComparer; this.converter = converter; this.nearestField = nearestField; } }