Advertisement
SashkoKlincharov

[Java][НП] - Генерички кластер

Aug 27th, 2021
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.01 KB | None | 0 0
  1. Да се имплементира генеричка класа Cluster во која се чуваат елементи кои мора да обезбедат сопствен идентификатор long и да може да се пресметува растојание (double) помеѓу два вакви елементи. Во класата да се имплементираат следните два методи:
  2.  
  3. void addItem(Т element) - за додавање нов елемент во кластерот
  4. void near(long id, int top) - кој ги печати најблиските top елементи до елементот со дадениот идентификатор id подредени според растојанието во опаѓачки редослед.
  5.  
  6. Потоа да се имплементира класа Point2D која претставува конкретна имплементација на елемент во кластерот за точка во 2Д простор со дадени:
  7.  
  8. id - long
  9. x - float
  10. y - float
  11.  
  12. Растојанието помеѓу две Point2D точки се пресметува со формулата за Евклидово растојание sqrt((x1−x2)2+(y1−y2))
  13.  
  14.  
  15.  
  16.  
  17. import java.awt.*;
  18. import java.util.Comparator;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. import java.util.Scanner;
  22. import java.util.concurrent.atomic.AtomicInteger;
  23.  
  24. interface Element {
  25. double distance(Element e);
  26.  
  27. String print(Element e);
  28.  
  29. Long getIdentificator();
  30. }
  31.  
  32. class Point2D implements Element {
  33. private Long identificator;
  34. private float x;
  35. private float y;
  36.  
  37. public Point2D(Long identificator, float x, float y) {
  38. this.identificator = identificator;
  39. this.x = x;
  40. this.y = y;
  41. }
  42.  
  43. @Override
  44. public double distance(Element e) {
  45. Point2D p2d = (Point2D) e;
  46. return Math.sqrt(Math.pow((this.x - p2d.x), 2) + Math.pow((this.y - p2d.y), 2));
  47. }
  48.  
  49. @Override
  50. public Long getIdentificator() {
  51. return identificator;
  52. }
  53.  
  54. public String print(Element e) {
  55. return String.format("%d -> %4.3f", identificator, distance(e));
  56. }
  57.  
  58. }
  59.  
  60. class Cluster<T extends Element> {
  61. private Map<Long, T> cluster;
  62.  
  63. private Comparator<Element> comparator = (e1, e2) -> (int) -e1.distance(e2);
  64.  
  65. public Cluster() {
  66. this.cluster = new HashMap<Long, T>();
  67. }
  68.  
  69. public void addItem(T element) {
  70. cluster.put(element.getIdentificator(), element);
  71. }
  72.  
  73. public void near(long id, int top) {
  74. T element = cluster.get(id);
  75. AtomicInteger i = new AtomicInteger(1);
  76. cluster.values()
  77. .stream()
  78. .sorted(Comparator.comparing(el -> el.distance(element)))
  79. .skip(1)
  80. .limit(top)
  81. .forEach(el -> System.out.printf("%d. %s\n",i.getAndIncrement(),el.print(element)));
  82. }
  83.  
  84. }
  85.  
  86. public class ClusterTest {
  87. public static void main(String[] args) {
  88. Scanner scanner = new Scanner(System.in);
  89. Cluster<Point2D> cluster = new Cluster<>();
  90. int n = scanner.nextInt();
  91. scanner.nextLine();
  92. for (int i = 0; i < n; ++i) {
  93. String line = scanner.nextLine();
  94. String[] parts = line.split(" ");
  95. long id = Long.parseLong(parts[0]);
  96. float x = Float.parseFloat(parts[1]);
  97. float y = Float.parseFloat(parts[2]);
  98. cluster.addItem(new Point2D(id, x, y));
  99. }
  100. int id = scanner.nextInt();
  101. int top = scanner.nextInt();
  102. cluster.near(id, top);
  103. scanner.close();
  104. }
  105. }
  106.  
  107.  
  108. Sample input
  109.  
  110. 134
  111. 1 -12.592489 11.226042
  112. 2 -19.946349 7.771200
  113. 3 -9.554585 7.104757
  114. 4 -4.576861 11.614792
  115. 5 -17.856722 4.663583
  116. 6 -9.294781 -12.317993
  117. 7 9.574917 -16.290767
  118. 8 -1.098660 4.687239
  119. 9 11.102700 0.992551
  120. 10 2.189287 5.495277
  121. 11 11.463659 12.846322
  122. 12 15.107933 6.770316
  123. 13 14.638967 -8.843972
  124. 14 -7.388534 -10.493790
  125. 15 4.914454 -2.826212
  126. 16 -15.681654 -8.857618
  127. 17 7.312006 8.776601
  128. 18 11.784733 1.980593
  129. 19 4.543760 -17.098830
  130. 20 -3.137116 17.478204
  131. 21 0.617431 0.844155
  132. 22 -12.886710 -13.176229
  133. 23 6.811271 -19.784606
  134. 24 7.649167 -8.459262
  135. 25 17.954945 15.792233
  136. 26 10.757923 13.734474
  137. 27 13.026887 -2.336706
  138. 28 -13.324047 -13.310999
  139. 29 -5.535550 6.836640
  140. 30 -17.253517 14.561376
  141. 31 15.158340 -15.654356
  142. 32 -9.627736 14.788987
  143. 33 -11.403491 -3.091226
  144. 34 19.065578 18.045590
  145. 35 5.712840 -12.074122
  146. 36 -15.197627 1.361523
  147. 37 9.974684 16.698629
  148. 38 -7.550393 -1.743515
  149. 39 10.091063 -18.870625
  150. 40 17.123908 -5.274345
  151. 41 -5.563009 3.902281
  152. 42 -19.357018 14.070394
  153. 43 14.538022 -13.612944
  154. 44 -14.995147 2.004540
  155. 45 1.590616 -4.640580
  156. 46 15.322889 1.113860
  157. 47 5.813054 7.236781
  158. 48 11.550069 2.763390
  159. 49 -8.306936 17.996724
  160. 50 2.103418 4.481250
  161. 51 -4.880829 -1.838241
  162. 52 -8.740395 -17.233943
  163. 53 -5.240793 -14.700340
  164. 54 -3.229108 1.824458
  165. 55 -1.571746 -15.711500
  166. 56 -6.627248 -2.821704
  167. 57 4.133597 10.119678
  168. 58 1.745860 -17.759006
  169. 59 2.875000 12.614371
  170. 60 6.854046 6.195518
  171. 61 9.276331 19.529227
  172. 62 -3.140184 5.130069
  173. 63 -10.376448 -13.176568
  174. 64 -6.115435 18.320373
  175. 65 15.753197 -18.311294
  176. 66 -9.734552 -7.464474
  177. 67 7.818902 10.236012
  178. 68 -9.286544 0.585049
  179. 69 0.482601 -1.495706
  180. 70 3.175686 -10.727716
  181. 71 8.740559 -2.875988
  182. 72 -4.027348 19.292231
  183. 73 -18.782135 9.608893
  184. 74 -8.602010 -7.458132
  185. 75 -5.980308 -5.534441
  186. 76 9.161842 6.755174
  187. 77 10.083789 14.106333
  188. 78 -2.276327 5.424776
  189. 79 16.863642 -16.668020
  190. 80 -3.437473 8.597565
  191. 81 -16.566190 -10.195750
  192. 82 -12.821504 -6.756758
  193. 83 -4.378992 4.460784
  194. 84 -6.654383 0.419831
  195. 85 4.534243 -4.768329
  196. 86 -16.539585 -10.772079
  197. 87 -8.050715 4.607770
  198. 88 11.328548 15.961929
  199. 89 -18.111719 -6.103362
  200. 90 2.969312 0.195664
  201. 91 9.003859 -7.557752
  202. 92 -0.920011 -14.463433
  203. 93 14.508875 -19.805433
  204. 94 2.274357 -5.956340
  205. 95 -10.028002 -4.467160
  206. 96 2.005463 -1.054476
  207. 97 18.880100 -8.065482
  208. 98 17.379174 -5.749780
  209. 99 11.932869 3.498088
  210. 100 11.876010 -5.686828
  211. 101 -3.262671 13.470774
  212. 102 -9.185019 -7.064527
  213. 103 -11.728649 -17.822066
  214. 104 5.397891 -3.333249
  215. 105 0.119796 -13.578305
  216. 106 -14.372691 -6.883094
  217. 107 16.789383 2.787833
  218. 108 16.573300 9.766991
  219. 109 -19.101557 -18.053391
  220. 110 8.713240 9.445113
  221. 111 8.116329 0.570028
  222. 112 6.070563 -6.116125
  223. 113 -14.513021 -14.619127
  224. 114 -0.830934 9.137912
  225. 115 -2.242312 -8.109888
  226. 116 -11.524699 -13.719739
  227. 117 11.556025 10.388447
  228. 118 -5.650270 -6.868477
  229. 119 10.137550 0.953821
  230. 120 13.899374 9.008900
  231. 121 -2.841680 13.943808
  232. 122 5.033850 -14.980568
  233. 123 -12.970190 -0.533195
  234. 124 -14.407205 -18.079744
  235. 125 2.323059 -2.031479
  236. 126 -3.200666 -19.907361
  237. 127 -14.324046 1.998401
  238. 128 -15.735465 7.648782
  239. 129 16.256430 -19.612073
  240. 130 -15.739002 -13.029527
  241. 131 15.475025 9.884058
  242. 132 18.554561 18.548316
  243. 133 3.103116 15.195434
  244. 134 -4.876065 5.090755
  245. 52 6
  246.  
  247. Sample output
  248.  
  249. 1. 103 -> 3.046
  250. 2. 53 -> 4.320
  251. 3. 63 -> 4.375
  252. 4. 116 -> 4.484
  253. 5. 6 -> 4.947
  254. 6. 124 -> 5.730
  255.  
  256.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement