/// <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;
     }
 }
Esempio n. 3
0
 /// <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;
     }
 }