Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Threading;
- /*1. Разработать процедуру на C# и Delphi получающую на входе два разнотипных массива записей. У каждого типа записи есть два поля: Time и Closest. Time содержит время события описываемого элементом массива, а Closest - индекс ближайшего элемента параллельного массива. Массивы изначально отсортированы по времени. Процедура должна заполнить поле Closest, не прибегая к полному перебору (не сравнивая каждый с каждым) и используя свойство упорядоченности массивов. Процедура должна считать что у элемента нет ближайших если ближайший отстоит от него больше чем на минуту. Дайте оценку времени работы вашей реализации в лучшем, худшем и среднем случаях.
- */
- namespace Lab1
- {
- struct TypeOne
- {
- public DateTime time;
- public int closest;
- }
- struct TypeTwo
- {
- public DateTime time;
- public int closest;
- }
- class Program
- {
- static readonly TimeSpan Minute = new TimeSpan(0, 1, 0);
- static void FillClosest(TypeOne[] mas1, TypeTwo[] mas2)
- {
- TimeSpan span = new TimeSpan(0, 1, 0);///onemin
- int h = 0;
- for (int i = 0; i < mas1.Length; i++)
- {
- span = Minute;
- while (h < mas2.Length && (mas2[h].time - mas1[i].time).Duration() < span)
- {
- span = (mas2[h].time - mas1[i].time).Duration();
- h++;
- }
- if (span < Minute)
- {
- h--;
- mas1[i].closest = h;
- }
- else
- mas1[i].closest = -1;
- }
- h = 0;
- for (int j = 0; j < mas2.Length; j++)
- {
- span = Minute;
- while (h < mas1.Length && (mas1[h].time - mas2[j].time).Duration() < span)
- {
- span = (mas1[h].time - mas2[j].time).Duration();
- h++;
- }
- if (span < Minute)
- {
- h--;
- mas2[j].closest = h;
- }
- else
- mas2[j].closest = -1;
- }
- }
- private void Fclosest(TypeOne[] mas1, TypeTwo[] mas2)
- {
- TimeSpan span = new TimeSpan(0,1,0);
- }
- static void Main(string[] args)
- {
- int k = 10;
- TypeOne[] mas1 = new TypeOne[k];
- TypeTwo[] mas2 = new TypeTwo[k];
- Random R = new Random();
- Console.WriteLine("Array One:");
- for (int i = 0; i < k; i++)
- {
- mas1[i] = new TypeOne();
- mas1[i].time = (DateTime.Now).AddSeconds(10 * i);
- mas1[i].closest = -1;
- Console.WriteLine("{0}: {1}", i, mas1[i].time);
- }
- Console.WriteLine();
- //Thread.Sleep(2454);
- Console.WriteLine("Array Two:");
- for (int i = 0; i < k; i++)
- {
- mas2[i] = new TypeTwo();
- mas2[i].time = (DateTime.Now).AddSeconds(7 * i);
- mas2[i].closest = -1;
- Console.WriteLine("{0}: {1}", i, mas2[i].time);
- }
- //mas1 = mas1.OrderBy(x => x.time).ToArray();
- //mas2 = mas2.OrderBy(x => x.time).ToArray();
- FillClosest(mas1, mas2);
- Console.WriteLine();
- for (int i = 0; i < k; i++)
- {
- Console.WriteLine("{0}: {1}, {2} || {3}, {4}", i, mas1[i].time, mas1[i].closest, mas2[i].time, mas2[i].closest);
- }
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement