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

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

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

доброго времени суток. Возникла следующая проблема:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace GeneratePerms_Non_parallel_
  8. {
  9. class Program
  10. {
  11. public static List<int[]> listOfDiffVectors = new List<int[]>();
  12. private static void Swap(ref int a, ref int b)
  13. {
  14. if (a == b) return;
  15. a ^= b;
  16. b ^= a;
  17. a ^= b;
  18. }
  19. public static void GetPer(int[] list)
  20. {
  21. int x = list.Length - 1;
  22. GetPer(list, 0, x);
  23. }
  24. private static void GetPer(int[] list, int k, int m)
  25. {
  26. if (k == m)
  27. {
  28. int[] diff = new int[list.Length];
  29. int i = 0;
  30. for (i = 0; i < list.Length; i++)
  31. {
  32. int d = 0;
  33. if (i == list.Length - 1)
  34. {
  35. d = list[0] - list[i];
  36. if (d < 0)
  37. d += list.Length;
  38. else
  39. d %= list.Length;
  40. diff[0] = d;
  41. }
  42. else
  43. {
  44. d = list[i + 1] - list[i];
  45. if (d < 0)
  46. d += list.Length;
  47. else
  48. d %= list.Length;
  49. diff[i + 1] = d;
  50. }
  51. }
  52. bool flag = false;
  53. foreach (int[] temp in listOfDiffVectors)
  54. if (temp.SequenceEqual(diff))
  55. {
  56. flag = true;
  57. break;
  58. }
  59. if (!flag)
  60. listOfDiffVectors.Add(diff);
  61. }
  62. else
  63. for (int i = k; i <= m; i++)
  64. {
  65. Swap(ref list[k], ref list[i]);
  66. GetPer(list, k + 1, m);
  67. Swap(ref list[k], ref list[i]);
  68. }
  69. }
  70. static void Main(string[] args)
  71. {
  72. //System.Diagnostics.Stopwatch sw = new Stopwatch();
  73. int[] perm = new int[] { 0,1,2 };
  74. //sw.Start();
  75. GetPer(perm);
  76. // sw.Stop();
  77. //Console.WriteLine((sw.ElapsedMilliseconds / 1000.0).ToString());
  78. Console.WriteLine("Press any key...");
  79. Console.ReadKey();
  80. }
  81. }
  82. }
Это код генерации перестановок с небольшими дополнениями. Мне необходимо запускать программу на данных для множества, состоящего из 16 элементов. А это 16! (16 факториал) перестановок. Программа в нынешнем виде будет работаь примерно 20 дней, что неприемлемо. Помогите, пожалуйста, советом, а лучше кодом: как можно усовершенствовать, что добавить/исправить. Заранее спасибо.

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

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

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


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

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

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы