/**
         * <summary> The operator method calls forward method which starts with having no feature in the model. In each iteration,
         * it keeps adding the features that are not currently listed.</summary>
         *
         * <param name="current">         FeatureSubset that will be added to new ArrayList.</param>
         * <param name="numberOfFeatures">Indicates the indices of indexList.</param>
         * <returns>ArrayList of FeatureSubSets created from forward.</returns>
         */
        protected override List <FeatureSubSet> Operator(FeatureSubSet current, int numberOfFeatures)
        {
            var result = new List <FeatureSubSet>();

            Forward(result, current, numberOfFeatures);
            return(result);
        }
 /**
  * <summary> The backward method starts with all the features and removes the least significant feature at each iteration.</summary>
  *
  * <param name="currentSubSetList">List to add the FeatureSubsets.</param>
  * <param name="current">          FeatureSubset that will be added to currentSubSetList</param>
  */
 protected void Backward(List <FeatureSubSet> currentSubSetList, FeatureSubSet current)
 {
     for (var i = 0; i < current.Size(); i++)
     {
         var candidate = (FeatureSubSet)current.Clone();
         candidate.Remove(i);
         currentSubSetList.Add(candidate);
     }
 }
 /**
  * <summary> The forward method starts with having no feature in the model. In each iteration, it keeps adding the features that are not currently listed.</summary>
  *
  * <param name="currentSubSetList">List to add the FeatureSubsets.</param>
  * <param name="current">          FeatureSubset that will be added to currentSubSetList.</param>
  * <param name="numberOfFeatures"> The number of features to add the subset.</param>
  */
 protected void Forward(List <FeatureSubSet> currentSubSetList, FeatureSubSet current, int numberOfFeatures)
 {
     for (var i = 0; i < numberOfFeatures; i++)
     {
         if (!current.Contains(i))
         {
             var candidate = (FeatureSubSet)current.Clone();
             candidate.Add(i);
             currentSubSetList.Add(candidate);
         }
     }
 }
 /**
  * <summary> A constructor that sets the initial subset with given input.</summary>
  *
  * <param name="initialSubSet">{@link FeatureSubSet} input.</param>
  */
 public SubSetSelection(FeatureSubSet initialSubSet)
 {
     this.initialSubSet = initialSubSet;
 }
 protected abstract List <FeatureSubSet> Operator(FeatureSubSet current, int numberOfFeatures);