Advertisement
Guest User

Untitled

a guest
Sep 16th, 2014
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.39 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Threading;
  7.  
  8. /*1. Разработать процедуру на C# и Delphi получающую на входе два разнотипных массива записей. У каждого типа записи есть два поля: Time и Closest. Time содержит время события описываемого элементом массива, а Closest - индекс ближайшего элемента параллельного массива. Массивы изначально отсортированы по времени. Процедура должна заполнить поле Closest, не прибегая к полному перебору (не сравнивая каждый с каждым) и используя свойство упорядоченности массивов. Процедура должна считать что у элемента нет ближайших если ближайший отстоит от него больше чем на минуту. Дайте оценку времени работы вашей реализации в лучшем, худшем и среднем случаях. ​
  9.  */
  10. namespace Lab1
  11. {
  12.     struct TypeOne
  13.     {
  14.         public DateTime time;
  15.         public int closest;
  16.     }
  17.  
  18.     struct TypeTwo
  19.     {
  20.         public DateTime time;
  21.         public int closest;
  22.     }
  23.  
  24.     class Program
  25.     {
  26.         static readonly TimeSpan Minute = new TimeSpan(0, 1, 0);
  27.        
  28.  
  29.         static void FillClosest(TypeOne[] mas1, TypeTwo[] mas2)
  30.         {
  31.  
  32.  
  33.             TimeSpan span = new TimeSpan(0, 1, 0);///onemin
  34.  
  35.             int h = 0;
  36.  
  37.             for (int i = 0; i < mas1.Length; i++)
  38.             {
  39.                 span = Minute;
  40.  
  41.                 while (h < mas2.Length && (mas2[h].time - mas1[i].time).Duration() < span)
  42.                 {
  43.                     span = (mas2[h].time - mas1[i].time).Duration();
  44.                     h++;
  45.                 }
  46.  
  47.                 if (span < Minute)
  48.                 {
  49.                     h--;
  50.                     mas1[i].closest = h;
  51.                 }
  52.                 else
  53.                     mas1[i].closest = -1;
  54.             }
  55.  
  56.             h = 0;
  57.  
  58.             for (int j = 0; j < mas2.Length; j++)
  59.             {
  60.                 span = Minute;
  61.  
  62.                 while (h < mas1.Length && (mas1[h].time - mas2[j].time).Duration() < span)
  63.                 {
  64.                     span = (mas1[h].time - mas2[j].time).Duration();
  65.                     h++;
  66.                 }
  67.  
  68.                 if (span < Minute)
  69.                 {
  70.                     h--;
  71.                     mas2[j].closest = h;
  72.                 }
  73.                 else
  74.                     mas2[j].closest = -1;
  75.             }
  76.         }
  77.  
  78.         private void Fclosest(TypeOne[] mas1, TypeTwo[] mas2)
  79.         {
  80.             TimeSpan span = new TimeSpan(0,1,0);
  81.  
  82.        
  83.         }
  84.  
  85.         static void Main(string[] args)
  86.         {
  87.             int k = 10;
  88.  
  89.             TypeOne[] mas1 = new TypeOne[k];
  90.             TypeTwo[] mas2 = new TypeTwo[k];
  91.  
  92.             Random R = new Random();
  93.  
  94.             Console.WriteLine("Array One:");
  95.  
  96.             for (int i = 0; i < k; i++)
  97.             {
  98.                 mas1[i] = new TypeOne();
  99.                 mas1[i].time = (DateTime.Now).AddSeconds(10 * i);
  100.                 mas1[i].closest = -1;
  101.  
  102.                 Console.WriteLine("{0}: {1}", i, mas1[i].time);
  103.             }
  104.  
  105.             Console.WriteLine();
  106.  
  107.             //Thread.Sleep(2454);
  108.  
  109.             Console.WriteLine("Array Two:");
  110.  
  111.             for (int i = 0; i < k; i++)
  112.             {
  113.                 mas2[i] = new TypeTwo();
  114.                 mas2[i].time = (DateTime.Now).AddSeconds(7 * i);
  115.                 mas2[i].closest = -1;
  116.  
  117.                 Console.WriteLine("{0}: {1}", i, mas2[i].time);
  118.             }
  119.  
  120.             //mas1 = mas1.OrderBy(x => x.time).ToArray();
  121.             //mas2 = mas2.OrderBy(x => x.time).ToArray();
  122.  
  123.             FillClosest(mas1, mas2);
  124.  
  125.             Console.WriteLine();
  126.  
  127.             for (int i = 0; i < k; i++)
  128.             {
  129.                 Console.WriteLine("{0}: {1}, {2}    ||    {3}, {4}", i, mas1[i].time, mas1[i].closest, mas2[i].time, mas2[i].closest);
  130.             }
  131.  
  132.             Console.ReadKey();
  133.         }
  134.     }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement