/// <summary>
        /// Realizuje algorytm selekcji.
        /// </summary>
        /// <param name="population">Populacja poddawana selekcji.</param>
        /// <returns>Zbiór osobników populacji, wybranych w wyniku selekcji do następnej generacji.</returns>
        public IChromosome[] Select(IChromosome[] population)
        {
            if (population.Length < 2)
            {
                return population;
            }

            UInt32 tournamenSize = TournamentSize.ComputeSize(population);
            UInt32 populationSize = PopulationSize.ComputeSize(population);

            IChromosome[] result = new IChromosome[populationSize];
            Parallel.For(0, populationSize, i =>
                {
                    IChromosome[] group = new IChromosome[tournamenSize];
                    for (Int32 j = 0; j < tournamenSize; ++j)
                    {
                        group[j] = population[RandomGenerator.Next(0, population.Length)];
                    }
                    Array.Sort(group, comparer);
                    result[i] = group.First();
                });

            return result;
        }