Advertisement
riabcis

Untitled

Jun 4th, 2018
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.49 KB | None | 0 0
  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.  
  8. namespace a_dalis
  9. {
  10.     class CustomData
  11.     {
  12.         public int TNum;
  13.         public int TResult;
  14.     }
  15.     class Program
  16.     {
  17.         static Int64 abc = 0;
  18.        
  19.         const int m = 10;
  20.         const int n = 10;
  21.         const int o = 10;
  22.  
  23.         static void Main(string[] args)
  24.         {
  25.             int[] X = new int[m + 1];
  26.             int[] Y = new int[n + 1];
  27.             int[] Z = new int[o + 1];
  28.  
  29.             int[,,] memoize = new int[m+2, n + 2,o+2];
  30.             int i = 10;
  31.             int j = 5;
  32.             int k = 7;
  33.             repeat(i,j,k, X,Y,Z, memoize);
  34.             Console.WriteLine();
  35.             Console.ReadLine();
  36.         }
  37.  
  38.         static void repeat(int i, int j, int k, int[] X, int[] Y,int[] Z, int[,,] memoize)
  39.         {
  40.             initialize(memoize, X,Y,Z);
  41.  
  42.             Stopwatch stopwatch1 = new Stopwatch();
  43.             Stopwatch stopwatch2 = new Stopwatch();
  44.             Stopwatch stopwatch3 = new Stopwatch();
  45.  
  46.             stopwatch1.Start();
  47.             Console.WriteLine("ATS:" + L1(i, j, k, X, Y, Z));
  48.             Console.WriteLine("Atliktu operaciju skaicius: " + abc.ToString());
  49.             abc = 0;
  50.             stopwatch1.Stop();
  51.             Console.WriteLine(stopwatch1.ElapsedMilliseconds);
  52.             Console.WriteLine();
  53.  
  54.             stopwatch2.Start();
  55.             Console.WriteLine("ATS: "+ tabulation(i, j, k, X, Y, Z,memoize));
  56.             Console.WriteLine("Atliktu operaciju skaicius: " + abc.ToString());
  57.             abc = 0;
  58.             stopwatch2.Stop();
  59.             Console.WriteLine(stopwatch2.ElapsedMilliseconds);
  60.  
  61.             Console.WriteLine();
  62.  
  63.  
  64.             stopwatch3.Start();
  65.             Console.WriteLine(" lygiagretusATS:" + L2(i, j, k, X, Y, Z));
  66.             stopwatch3.Stop();
  67.             Console.WriteLine(stopwatch3.ElapsedMilliseconds);
  68.             Console.WriteLine();
  69.  
  70.         }
  71.         static void initialize(int[,,] memoize,int[] X, int[] Y, int[] Z)
  72.         {
  73.             Random rnd = new Random();
  74.             Random rnd1 = new Random();
  75.             Random rnd2 = new Random();
  76.             for (int i = 0; i <= m; i++)
  77.             {
  78.                 X[i] = rnd.Next(0, 10);
  79.             }
  80.             for (int i = 0; i <= n; i++)
  81.             {
  82.                 Y[i] = rnd1.Next(0, 10);
  83.             }
  84.             for (int i = 0; i <= o; i++)
  85.             {
  86.                 Z[i] = rnd2.Next(0, 10);
  87.             }
  88.             for (int i=0;i<= m; i++)
  89.             {
  90.                 for(int j=0;j<=n; j++)
  91.                 {
  92.                     for(int z=0;z<= o;z++)
  93.                         memoize[i, j,z] = -1;
  94.                 }
  95.             }
  96.         }
  97.  
  98.         static int L1(int i,int j, int k, int[] X, int[] Y, int[] Z)
  99.         {
  100.             abc++;
  101.             if (X.Length == 0 || Y.Length == 0 || Z.Length == 0) return 0;
  102.             if (i <= 0 || j <= 0 || k <= 0) return 0;
  103.             if (X[i] == Y[j] && X[i] == Z[k]) return 1 + L1(i - 1, j - 1, k - 1, X, Y, Z);
  104.             return Math.Max(Math.Max(L1(i-1, j, k, X, Y, Z), L1(i, j-1, k, X, Y, Z)), L1(i, j, k-1, X, Y, Z));
  105.         }
  106.         static int tabulation(int i, int j, int k, int[] X, int[] Y, int[] Z, int[,,] memoize)
  107.         {
  108.             for(int a = 0; a <= m; a++)
  109.             {
  110.                 for(int b=0;b<= n; b++)
  111.                 {
  112.                     for(int c=0;c<= o; c++)
  113.                     {
  114.                         abc++;
  115.                         if(c==0 || b == 0 || a == 0)
  116.                         {
  117.                             memoize[a, b, c] = 0;
  118.                         } else if(X[a]==Y[b] && X[a] == Z[c])
  119.                         {
  120.  
  121.                             memoize[a, b, c] = memoize[a - 1, b - 1, c - 1] + 1;
  122.                         } else
  123.                         {
  124.                            // Console.WriteLine(a.ToString() + b.ToString() + c.ToString());
  125.                             memoize[a, b, c] = Math.Max(Math.Max(memoize[a-1, b, c], memoize[a, b-1, c]),memoize[a,b,c-1]);
  126.                         }
  127.  
  128.  
  129.                     }
  130.                 }
  131.             }
  132.             return memoize[i, j, k];
  133.         }
  134.         static int L2(int i, int j, int k, int[] X, int[] Y, int[] Z)
  135.         {
  136.             if (X.Length == 0 || Y.Length == 0 || Z.Length == 0) return 0;
  137.             if (i <= 0 || j <= 0 || k <= 0) return 0;
  138.  
  139.             int countCPU = 4;
  140.             Task[] tasks = new Task[countCPU];
  141.             for (var a = 0; a < countCPU; a++)
  142.                 tasks[a] = Task.Factory.StartNew(
  143.                 (Object c) =>
  144.                 {
  145.                     var data = c as CustomData; if (data == null) return;
  146.                     if (data.TNum == 0) data.TResult = L1(i-1, j, k, X, Y, Z);
  147.                     if (data.TNum == 1) data.TResult = L1(i, j-1, k, X, Y, Z);
  148.                     if (data.TNum == 2) data.TResult = L1(i, j, k-1, X, Y, Z);
  149.                     if (data.TNum == 3) data.TResult = L1(i-1, j-1, k - 1, X, Y, Z);
  150.                 },
  151.                new CustomData() { TNum = a });
  152.             Task.WaitAll(tasks);
  153.  
  154.             Console.WriteLine((tasks[0].AsyncState as CustomData).TResult);
  155.             Console.WriteLine((tasks[1].AsyncState as CustomData).TResult);
  156.             Console.WriteLine((tasks[2].AsyncState as CustomData).TResult);
  157.             Console.WriteLine((tasks[3].AsyncState as CustomData).TResult);
  158.  
  159.             if (X[i]==Y[j] && X[i] == Z[k]) return (tasks[3].AsyncState as CustomData).TResult + 1;
  160.  
  161.             if ((tasks[0].AsyncState as CustomData).TResult >= (tasks[1].AsyncState as CustomData).TResult &&
  162.                 (tasks[0].AsyncState as CustomData).TResult >= (tasks[2].AsyncState as CustomData).TResult)
  163.                 return (tasks[0].AsyncState as CustomData).TResult;
  164.  
  165.             if ((tasks[1].AsyncState as CustomData).TResult >= (tasks[0].AsyncState as CustomData).TResult &&
  166.                 (tasks[1].AsyncState as CustomData).TResult >= (tasks[2].AsyncState as CustomData).TResult)
  167.                 return (tasks[1].AsyncState as CustomData).TResult;
  168.  
  169.  
  170.             if ((tasks[2].AsyncState as CustomData).TResult >= (tasks[0].AsyncState as CustomData).TResult &&
  171.                 (tasks[2].AsyncState as CustomData).TResult >= (tasks[1].AsyncState as CustomData).TResult)
  172.                 return (tasks[2].AsyncState as CustomData).TResult;
  173.             return 0;
  174.         }
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement