Advertisement
StefanTodorovski

[НП] Блоковска структура

Feb 6th, 2019
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.93 KB | None | 0 0
  1. /*
  2. Блоковска структура (35 поени) Problem 3 (1 / 2)
  3.  
  4. Да се имплементира генеричка класа за блок контејнер BlockContainer. Контејнерот треба да има блоковска структура, со тоа што секој блок содржи N елементи. Контејнерот треба да ги задоволува следните услови:
  5. * константно време на пристап до секој блок O(1)
  6. * логаритамско време на пристап до елементите во блокот O(logN)
  7. * елементите во секој блок треба да бидат сортирани.
  8. * Класата треба да ги имплементира следните методи:
  9.  
  10. public BlockContainer(int n) - конструктор со еден аргумент, максималниот број на елементи во блокот
  11.  
  12. public void add(T a) - метод за додавање елемент во последниот блок од контејнерот (ако блокот е полн, се додава нов блок)
  13.  
  14. public boolean remove(T a) - метод за бришње на елемент од последниот блок (ако се избришат сите елементи од еден блок, тогаш и блокот се брише)
  15.  
  16. public void sort() - метод за сортирање на сите елементи во контејнерот
  17.  
  18. public String toString() - препокривање на методот да враќа String во следниот формат: пример: [7, 8, 9],[1, 2, 3],[5, 6, 12],[4, 10, 8]
  19.  
  20. INPUT:
  21. 11 2
  22. 89 12 54 11 5 1 7 8 2 4 14
  23. abc ccc bcxs abcde fdsr aerdd fdsa fdf etie lidj trdf
  24.  
  25. OUTPUT:
  26. +++++ Integer Block Container +++++
  27. [12, 89],[11, 54],[1, 5],[7, 8],[2, 4],[14]
  28. +++++ Removing element +++++
  29. +++++ Sorting container +++++
  30. [1, 2],[4, 5],[7, 8],[11, 12],[54, 89]
  31. +++++ String Block Container +++++
  32. [abc, ccc],[abcde, bcxs],[aerdd, fdsr],[fdf, fdsa],[etie, lidj],[trdf]
  33. +++++ Removing element +++++
  34. +++++ Sorting container +++++
  35. [abc, abcde],[aerdd, bcxs],[ccc, etie],[fdf, fdsa],[fdsr, lidj]
  36. */
  37.  
  38. import java.util.*;
  39. import java.util.stream.Collectors;
  40. import java.util.stream.IntStream;
  41.  
  42. public class BlockContainerTest {
  43.     public static void main(String[] args) {
  44.         Scanner scanner = new Scanner(System.in);
  45.         int n = scanner.nextInt();
  46.         int size = scanner.nextInt();
  47.         BlockContainer<Integer> integerBC = new BlockContainer<Integer>(size);
  48.         scanner.nextLine();
  49.         Integer lastInteger = null;
  50.         for(int i = 0; i < n; ++i) {
  51.             int element = scanner.nextInt();
  52.             lastInteger = element;
  53.             integerBC.add(element);
  54.         }
  55.         System.out.println("+++++ Integer Block Container +++++");
  56.         System.out.println(integerBC);
  57.         System.out.println("+++++ Removing element +++++");
  58.         integerBC.remove(lastInteger);
  59.         System.out.println("+++++ Sorting container +++++");
  60.         integerBC.sort();
  61.         System.out.println(integerBC);
  62.         BlockContainer<String> stringBC = new BlockContainer<String>(size);
  63.         String lastString = null;
  64.         for(int i = 0; i < n; ++i) {
  65.             String element = scanner.next();
  66.             lastString = element;
  67.             stringBC.add(element);
  68.         }
  69.         System.out.println("+++++ String Block Container +++++");
  70.         System.out.println(stringBC);
  71.         System.out.println("+++++ Removing element +++++");
  72.         stringBC.remove(lastString);
  73.         System.out.println("+++++ Sorting container +++++");
  74.         stringBC.sort();
  75.         System.out.println(stringBC);
  76.     }
  77. }
  78.  
  79. // Вашиот код овде
  80. class Block<T extends Comparable<T>> {
  81.     private Set<T> elems;
  82.  
  83.     public Block(T elem) {
  84.         this.elems = new TreeSet<>();
  85.         this.elems.add(elem);
  86.     }
  87.  
  88.     public void addElement(T elem) {
  89.         elems.add(elem);
  90.     }
  91.  
  92.     public boolean removeFromLastBlock(T a) {
  93.         elems.remove(a);
  94.         return elems.size() == 0;
  95.     }
  96.  
  97.     public boolean isBlockFull(int size) {
  98.         return elems.size() == size;
  99.     }
  100.  
  101.     public Set<T> getElems() {
  102.         return elems;
  103.     }
  104.  
  105.     @Override
  106.     public String toString() {
  107.         StringBuilder sb = new StringBuilder();
  108.         elems.forEach((e) -> sb.append(e.toString()).append(", "));
  109.         sb.setLength(sb.length()-2);
  110.         return sb.toString();
  111.     }
  112. }
  113.  
  114. class BlockContainer<T extends Comparable<T>> {
  115.     private List<Block<T>> blocks;
  116.     private int blocksNumber;
  117.     private static int maxElementsInBlock;
  118.  
  119.     public BlockContainer(int size) {
  120.         maxElementsInBlock = size;
  121.         this.blocks = new ArrayList<>();
  122.         this.blocksNumber = -1;
  123.     }
  124.  
  125.     public void add(T a) {
  126.         if(blocksNumber == -1 || blocks.get(blocksNumber).isBlockFull(maxElementsInBlock)) {
  127.             blocks.add(new Block<>(a));
  128.             blocksNumber++;
  129.         } else blocks.get(blocksNumber).addElement(a);
  130.     }
  131.  
  132.     public void remove(T a) {
  133.         if(blocks.get(blocksNumber).removeFromLastBlock(a)) {
  134.             blocks.remove(blocksNumber--);
  135.         }
  136.     }
  137.  
  138.     public void sort() {
  139.         List<T> sortedElems = blocks.stream()
  140.                 .flatMap((b) -> b.getElems().stream())
  141.                 .sorted(Comparable::compareTo)
  142.                 .collect(Collectors.toList());
  143.  
  144.         this.blocks = new ArrayList<>();
  145.         this.blocksNumber = -1;
  146.  
  147.         IntStream.range(0, sortedElems.size())
  148.                 .forEach((i) -> add(sortedElems.get(i)));
  149.     }
  150.  
  151.     @Override
  152.     public String toString() {
  153.         StringBuilder sb = new StringBuilder();
  154.         blocks.forEach((b) -> sb.append("[").append(b).append("]").append(","));
  155.         sb.setLength(sb.length()-1);
  156.         return sb.toString();
  157.     }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement