Ускорение работы программы - C# (177190)

Узнай цену своей работы

Формулировка задачи:

доброго времени суток. Возникла следующая проблема:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace GeneratePerms_Non_parallel_
{
    class Program
    {
    public static List<int[]> listOfDiffVectors = new List<int[]>();
    private static void Swap(ref int a, ref int b)
    {
        if (a == b) return;
 
        a ^= b;
        b ^= a;
        a ^= b;
    }
 
    public static void GetPer(int[] list)
    {
        int x = list.Length - 1;
        GetPer(list, 0, x);
    }
 
    private static void GetPer(int[] list, int k, int m)
    {
        if (k == m)
        {
            int[] diff = new int[list.Length];
            int i = 0;
            for (i = 0; i < list.Length; i++)
            {
                int d = 0;
                if (i == list.Length - 1)
                {
                    d = list[0] - list[i];
                    if (d < 0)
                        d += list.Length;
                    else
                        d %= list.Length;
                    diff[0] = d;
                }
                else
                {
                    d = list[i + 1] - list[i];
                    if (d < 0)
                        d += list.Length;
                    else
                        d %= list.Length;
                    diff[i + 1] = d;
                }
            }
            bool flag = false;
            foreach (int[] temp in listOfDiffVectors)
                if (temp.SequenceEqual(diff))
                {
                    flag = true;
                    break;
                }
            if (!flag)
                listOfDiffVectors.Add(diff);
        }
        else
            for (int i = k; i <= m; i++)
            {
                   Swap(ref list[k], ref list[i]);
                   GetPer(list, k + 1, m);
                   Swap(ref list[k], ref list[i]);
            }
    }
 
        static void Main(string[] args)
        {
            //System.Diagnostics.Stopwatch sw = new Stopwatch();
            int[] perm = new int[] { 0,1,2 };
            //sw.Start();
            GetPer(perm);
           // sw.Stop();
            //Console.WriteLine((sw.ElapsedMilliseconds / 1000.0).ToString());
            Console.WriteLine("Press any key...");
            Console.ReadKey();
        }
    }
}
Это код генерации перестановок с небольшими дополнениями. Мне необходимо запускать программу на данных для множества, состоящего из 16 элементов. А это 16! (16 факториал) перестановок. Программа в нынешнем виде будет работаь примерно 20 дней, что неприемлемо. Помогите, пожалуйста, советом, а лучше кодом: как можно усовершенствовать, что добавить/исправить. Заранее спасибо.

Решение задачи: «Ускорение работы программы»

textual
Листинг программы
 foreach (int[] temp in listOfDiffVectors)
                if (temp.SequenceEqual(diff))
                {
                    flag = true;
                    break;
                }
            if (!flag)
                listOfDiffVectors.Add(diff);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы