Search code examples
c#functionfitness

Fitness function bottleneck resolution, C#


private  void CalculateFitness(TimeTable timeTable)
{
    int score = 0, DAYS_NUM = 5;

    score = timeTable.Exams.SelectMany(exam => exam.Students)
         .GroupBy(s => s)
         .Select(g => Connections(g.Count()))
         .Sum();
    timeTable.Fitness = score;
}

int Connections(int corners)
{
    // 0+1+2+...+(corners-1)
    return corners * (corners - 1) / 2;
}

Solution

  • Isn't your function equivalent to this:

    score = timeTable.Exams.SelectMany(exam=>exam.Students)
                     .GroupBy(s=>s)
                     .Select(g=>Connections(g.Count()))
                     .Sum();
    

    with helper function

    int Connections(int corners)
    {
      //Formula for number of sides in a complete graph
      //http://en.wikipedia.org/wiki/Complete_graph
      // 0+1+2+...+(corners-1)
      return corners*(corners-1)/2;
    }
    

    This should be linear runtime in timeTable.Exams.Sum(exam=>exam.Student.Count()) whereas yours looks quadratic to me.