Advertisement
Vladislav8653

Untitled

May 1st, 2023
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.98 KB | None | 0 0
  1. package by.it.group251004.arefin.lesson02;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. /*
  6. Даны интервальные события events
  7. реализуйте метод calcStartTimes, так, чтобы число принятых к выполнению
  8. непересекающихся событий было максимально.
  9. Алгоритм жадный. Для реализации обдумайте надежный шаг.
  10. */
  11.  
  12. public class B_Sheduler {
  13. //событие у аудитории(два поля: начало и конец)
  14. static class Event {
  15. int start;
  16. int stop;
  17.  
  18. Event(int start, int stop) {
  19. this.start = start;
  20. this.stop = stop;
  21. }
  22.  
  23. @Override
  24. public String toString() {
  25. return "("+ start +":" + stop + ")";
  26. }
  27. }
  28.  
  29. public static void main(String[] args) {
  30. B_Sheduler instance = new B_Sheduler();
  31. Event[] events = { new Event(0, 3), new Event(0, 1), new Event(1, 2), new Event(3, 5),
  32. new Event(1, 3), new Event(1, 3), new Event(1, 3), new Event(3, 6),
  33. new Event(2, 7), new Event(2, 3), new Event(2, 7), new Event(7, 9),
  34. new Event(3, 5), new Event(2, 4), new Event(2, 3), new Event(3, 7),
  35. new Event(4, 5), new Event(6, 7), new Event(6, 9), new Event(7, 9),
  36. new Event(8, 9), new Event(4, 6), new Event(8, 10), new Event(7, 10)
  37. };
  38.  
  39. List<Event> starts = instance.calcStartTimes(events,0,10); //рассчитаем оптимальное заполнение аудитории
  40. System.out.println(starts); //покажем рассчитанный график занятий
  41. }
  42.  
  43. Event[] shellsSort(Event[] events) {
  44. int step = events.length / 2;
  45. int j;
  46. while (step > 0) {
  47. for (int i = 0; i < events.length - step; i++) {
  48. j = i;
  49. Event temp = events[j + step];
  50. while (j >= 0 && (events[j].stop > temp.stop || (events[j].stop == temp.stop && events[j].start > temp.start))) {
  51. events[j + step] = events[j];
  52. events[j] = temp;
  53. j -= step ;
  54. }
  55. }
  56. step /= 2;
  57. }
  58. return events;
  59. }
  60.  
  61. List<Event> calcStartTimes(Event[] events, int from, int to) {
  62. List<Event> result = new ArrayList<>();
  63. events = shellsSort(events);
  64. int end = from;
  65. int i = 0;
  66. while (i < events.length && end <= to) {
  67. if (events[i].start >= end && events[i].stop <= to) {
  68. result.add(events[i]);
  69. end = events[i].stop;
  70. }
  71. i++;
  72. }
  73. return result;
  74. }
  75.  
  76. }
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87. package by.it.group251004.arefin.lesson02;
  88.  
  89. import java.util.ArrayList;
  90. import java.util.Arrays;
  91. import java.util.List;
  92. /*
  93. Даны события events
  94. реализуйте метод calcStartTimes, так, чтобы число включений регистратора на
  95. заданный период времени (1) было минимальным, а все события events
  96. были зарегистрированы.
  97. Алгоритм жадный. Для реализации обдумайте надежный шаг.
  98. */
  99.  
  100. public class A_VideoRegistrator {
  101.  
  102. public static void main(String[] args) {
  103. A_VideoRegistrator instance=new A_VideoRegistrator();
  104. double[] events=new double[]{1, 1.1, 1.6, 2.2, 2.4, 2.7, 3.9, 8.1, 9.1, 5.5, 3.7};
  105. List<Double> starts=instance.calcStartTimes(events,1); //рассчитаем моменты старта, с длинной сеанса 1
  106. System.out.println(starts); //покажем моменты старта
  107. }
  108. //модификаторы доступа опущены для возможности тестирования
  109. public List<Double> calcStartTimes(double[] events, double workDuration){
  110. //events - события которые нужно зарегистрировать
  111. //timeWorkDuration время работы видеокамеры после старта
  112. List<Double> result;
  113. result = new ArrayList<>();
  114. int i = 0; //i - это индекс события events[i]
  115. int j = 0;
  116. double capturedEvents;
  117. Arrays.sort(events);
  118. while (i != (events.length - 1)) {
  119. result.add(events[i]);
  120. capturedEvents = result.get(j) + workDuration; //то, сколько сейчас времени, после первого включения камеры и съемки
  121. while ((capturedEvents >= events[i]) && (i < (events.length - 1)))
  122. i++;
  123. j++;
  124. }
  125. return result; //вернем итог
  126. }
  127. }
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement