LukasRiedel

ADS - Matičky

Apr 7th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.00 KB | None | 0 0
  1. class Sroubky_A_Maticky
  2. {
  3.     // Předpokládejme, že matičky, respektive šroubky, jsou od sebe rozlišitelné pouze podle jejich velikosti.
  4.     // Velikost matiček, respektive šroubků, budeme reprezentovat pomocí přirozených čísel.
  5.     // Každá matička a každý šroubek má svůj index.
  6.     public struct CoKamPasuje // V této struktuře si pamatuji, jaký šroubek pasuje na jakou matičku. Tedy jsou zde jejich indexy.
  7.     {
  8.         public uint Co;
  9.         public uint Kam;
  10.     }
  11.     public List<CoKamPasuje> Tabulka = new List<CoKamPasuje>();
  12.     public List<uint> Sroubky = new List<uint>();
  13.     public List<uint> Maticky = new List<uint>();
  14.     public Sroubky_A_Maticky(List<uint> Sroubky, List<uint> Maticky) // Vložíme seznam matiček a šroubků tak, jak jsou na stole vyskládané za sebou.
  15.     {
  16.         this.Sroubky = Sroubky;
  17.         this.Maticky = Maticky;
  18.     }
  19.  
  20.     // V následující metodě budeme vyplňovat tabulku, jaký šroubek psauje na jakou matičku.
  21.     // Budeme postupně dělit seznam šroubků na poloviny až do doby, dokud nezůstane jeden šroubek.
  22.     // Pak nalezneme vhodnou matičku a indexy zapíšeme do tabulky.
  23.  
  24.     // Dle Master Theoremu T(n) = 2 * T(n/2) + O(n)
  25.     // Tedy 2/2^1 = 1 → T(n) = O(n * log n)
  26.     public void NajdiOdpovidajiciDvojice(List<uint> Sroubky)
  27.     {
  28.         if (Sroubky.Count == 1)
  29.         {
  30.             foreach (uint Maticka in Maticky)
  31.                 if (Sroubky.First() == Maticka)
  32.                 {
  33.                     CoKamPasuje JedenVyskyt;
  34.                     JedenVyskyt.Co = (uint)this.Sroubky.IndexOf(Sroubky.First());
  35.                     JedenVyskyt.Kam = (uint)Maticky.IndexOf(Maticka);
  36.                     Tabulka.Add(JedenVyskyt);
  37.                     break;
  38.                 }
  39.         }
  40.  
  41.         else
  42.         {
  43.             NajdiOdpovidajiciDvojice(Sroubky.GetRange(0, Sroubky.Count / 2));
  44.             NajdiOdpovidajiciDvojice(Sroubky.GetRange(Sroubky.Count / 2, Sroubky.Count / 2));
  45.         }
  46.     }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment