Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.42 KB | None | 0 0
  1. using System.Diagnostics;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Security.Cryptography;
  5.  
  6. namespace projekt
  7. {
  8. internal class Program
  9. {
  10. static private ulong numberOfOperations = 0;
  11. static int[] GenerateVector(int vectorLength)
  12. {
  13. int[] vector = new int[vectorLength];
  14. for (int i = 0; i < vectorLength; i++)
  15. {
  16. vector[i] = i;
  17. }
  18.  
  19. return vector;
  20. }
  21.  
  22. static bool IsPresentBinary(int[] vector, int number)
  23. {
  24. int left = 0, right = vector.Length - 1, middle;
  25. while (left <= right)
  26. {
  27. middle = (left + right) / 2;
  28. if (vector[middle] == number) return true;
  29. else if (vector[middle] > number) right = middle - 1;
  30. else left = middle + 1;
  31. }
  32.  
  33. return false;
  34. }
  35.  
  36. static bool IsPresentBinaryInstr(int[] vector, int number)
  37. {
  38. numberOfOperations = 0;
  39.  
  40. int left = 0, right = vector.Length - 1, middle;
  41.  
  42. while (left <= right)
  43. {
  44. numberOfOperations++;
  45. middle = (left + right) / 2;
  46. if (vector[middle] == number)
  47. {
  48. return true;
  49. }
  50.  
  51. numberOfOperations++;
  52. if (vector[middle] > number)
  53. {
  54. right = middle - 1;
  55. }
  56. else left = middle + 1;
  57. }
  58.  
  59. return false;
  60. }
  61.  
  62. static bool IsPresentLinear(int[] vector, int number)
  63. {
  64. for (int i = 0; i < vector.Length; i++)
  65. {
  66. if (vector[i] == number) return true;
  67. }
  68.  
  69. return false;
  70. }
  71.  
  72. static bool IsPresentLinearInstr(int[] vector, int number)
  73. {
  74. numberOfOperations = 0;
  75. for (int i = 0; i < vector.Length; i++)
  76. {
  77. numberOfOperations++;
  78. if (vector[i] == number) return true;
  79. }
  80.  
  81. return false;
  82. }
  83.  
  84. static void BinaryMaxInstr(int[] testVector)
  85. {
  86. IsPresentBinaryInstr(testVector, testVector.Length + 1);
  87. Console.Write(numberOfOperations + "\t");
  88. }
  89.  
  90. static void LinearMaxInstr(int[] testVector)
  91. {
  92. IsPresentLinearInstr(testVector, testVector.Length + 1);
  93. Console.Write(numberOfOperations + "\t");
  94. }
  95.  
  96. static void BinaryMaxTime(int[] testVector)
  97. {
  98. int nIter = 10;
  99. double elapsedSeconds;
  100. long elapsedTime = 0, minTime = long.MaxValue, maxTime = long.MinValue, iterationElapsedTime;
  101. for (int n = 0; n < nIter + 2; ++n)
  102. {
  103. long startingTime = Stopwatch.GetTimestamp();
  104. IsPresentBinary(testVector, testVector.Length + 1);
  105. long endingTime = Stopwatch.GetTimestamp();
  106. iterationElapsedTime = endingTime - startingTime;
  107.  
  108. elapsedTime += iterationElapsedTime;
  109. if (iterationElapsedTime < minTime) minTime = iterationElapsedTime;
  110. if (iterationElapsedTime > maxTime) maxTime = iterationElapsedTime;
  111. }
  112.  
  113. elapsedTime -= (minTime + maxTime);
  114. elapsedSeconds = elapsedTime * (1.0 / (nIter * Stopwatch.Frequency));
  115. Console.Write("\t\t" + elapsedSeconds.ToString("F4"));
  116. }
  117.  
  118. static void LinearMaxTime(int[] testVector)
  119. {
  120. int nIter = 10;
  121. double elapsedSeconds;
  122. long elapsedTime = 0, minTime = long.MaxValue, maxTime = long.MinValue, iterationElapsedTime;
  123. for (int n = 0; n < nIter + 2; ++n)
  124. {
  125. long startingTime = Stopwatch.GetTimestamp();
  126. IsPresentLinear(testVector, testVector.Length + 1);
  127. long endingTime = Stopwatch.GetTimestamp();
  128. iterationElapsedTime = endingTime - startingTime;
  129.  
  130. elapsedTime += iterationElapsedTime;
  131. if (iterationElapsedTime < minTime) minTime = iterationElapsedTime;
  132. if (iterationElapsedTime > maxTime) maxTime = iterationElapsedTime;
  133. }
  134.  
  135. elapsedTime -= (minTime + maxTime);
  136. elapsedSeconds = elapsedTime * (1.0 / (nIter * Stopwatch.Frequency));
  137. Console.Write("\t" + elapsedSeconds.ToString("F4"));
  138. }
  139.  
  140. static void LinearMeanInstr(int[] testVector)
  141. {
  142. int sampleSize = 100, sample = testVector.Length / sampleSize;
  143. ulong operations = 0;
  144.  
  145. for (int i = 0; i <= testVector.Length; i += sample)
  146. {
  147. IsPresentLinearInstr(testVector, i);
  148. operations += numberOfOperations;
  149. }
  150. Console.Write(operations/(ulong)sampleSize + "\t");
  151.  
  152. }
  153.  
  154. static void LinearMeanTime(int[] testVector)
  155. {
  156. int sampleSize = 100, sample = testVector.Length / sampleSize;
  157. double sumTime = 0;
  158.  
  159. for (int i = 0; i <= testVector.Length; i += sample)
  160. {
  161. int nIter = 5;
  162. double elapsedSeconds;
  163. long elapsedTime = 0, minTime = long.MaxValue, maxTime = long.MinValue, iterationElapsedTime;
  164. for (int n = 0; n < nIter + 2; ++n)
  165. {
  166. long startingTime = Stopwatch.GetTimestamp();
  167. IsPresentLinear(testVector, i);
  168. long endingTime = Stopwatch.GetTimestamp();
  169. iterationElapsedTime = endingTime - startingTime;
  170.  
  171. elapsedTime += iterationElapsedTime;
  172. if (iterationElapsedTime < minTime) minTime = iterationElapsedTime;
  173. if (iterationElapsedTime > maxTime) maxTime = iterationElapsedTime;
  174. }
  175.  
  176. elapsedTime -= (minTime + maxTime);
  177. elapsedSeconds = elapsedTime * (1.0 / (nIter * Stopwatch.Frequency));
  178. sumTime += elapsedSeconds;
  179. }
  180. Console.Write( (sumTime/sampleSize).ToString("F4") + "\t");
  181. }
  182.  
  183. static int[] GenerateIndexes(int[] vector)
  184. {
  185. List<int[]> listOfIndexes = new List<int[]>();
  186.  
  187. int max = vector.Length - 1, index, elementsLeft= vector.Length, elementsOnLevel=1;
  188. index = max/2;
  189.  
  190. while (index > 0)
  191. {
  192. if (elementsLeft - elementsOnLevel < 0)
  193. {
  194. elementsOnLevel = elementsLeft;
  195. }
  196. int[] temp = new int[2];
  197.  
  198. temp[0] = index;
  199. temp[1] = elementsOnLevel;
  200. listOfIndexes.Add(temp);
  201.  
  202. elementsLeft -= elementsOnLevel;
  203. index = index / 2;
  204. elementsOnLevel *= 2;
  205.  
  206. }
  207.  
  208. foreach (var arr in listOfIndexes)
  209. {
  210. foreach (var VARIABLE in arr)
  211. {
  212. Console.Write(VARIABLE+",");
  213. }
  214. Console.Write(" ");
  215. }
  216.  
  217. return null;
  218.  
  219. }
  220.  
  221. static bool IsPresentBinaryMockup(int[] vector, int number)
  222. {
  223. int left = 0, right = vector.Length - 1, middle;
  224. Console.Write("IsPresentBinaryMockup: ");
  225.  
  226. while (left <= right)
  227. {
  228. middle = (left + right) / 2;
  229. Console.Write(middle+";");
  230. if (vector[middle] == number) return true;
  231. else if (vector[middle] > number) right = middle - 1;
  232. else left = middle + 1;
  233. }
  234.  
  235. return false;
  236. }
  237.  
  238.  
  239. static void BinaryMeanInstr(int[] testVector)
  240. {
  241. Console.WriteLine();
  242. }
  243.  
  244. public static void Main(string[] args)
  245. {
  246. // Console.WriteLine("vLength\t\tLinMaxInstr\tBinMaxInstr\tLinMaxTime\tBinMaxTime");
  247. // for (int vectorLength = 10737418; vectorLength <= 268435450 ; vectorLength += 10737418)
  248. // {
  249. // Console.Write(vectorLength + "\t");
  250. // int[] testVector = generateVector(vectorLength);
  251. // LinearMaxInstr(testVector);
  252. // BinaryMaxInstr(testVector);
  253. // LinearMaxTime(testVector);
  254. // BinaryMaxTime(testVector);
  255. // Console.WriteLine();
  256. // }
  257.  
  258.  
  259.  
  260. IsPresentBinaryMockup(GenerateVector(7),-1);
  261. Console.WriteLine();
  262. GenerateIndexes(GenerateVector(7));
  263.  
  264.  
  265. Console.WriteLine("vLength\t\tLinMeanIns\tLinMeanTime");
  266. for (int vectorLength = 10737418; vectorLength <= 268435450 ; vectorLength += 10737418)
  267. {
  268. Console.Write(vectorLength + "\t");
  269. int[] testVector = GenerateVector(vectorLength);
  270. // LinearMeanInstr(testVector);
  271. // LinearMeanTime(testVector);
  272. Console.WriteLine();
  273. }
  274.  
  275. }
  276. }
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement