Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package by.it.group351004.narivonchik.lesson02;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- /*
- Даны события events
- реализуйте метод calcStartTimes, так, чтобы число включений регистратора на
- заданный период времени (1) было минимальным, а все события events
- были зарегистрированы.
- Алгоритм жадный. Для реализации обдумайте надежный шаг.
- */
- public class A_VideoRegistrator {
- public static void main(String[] args) {
- A_VideoRegistrator instance = new A_VideoRegistrator();
- 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};
- List<Double> starts = instance.calcStartTimes(events,1);
- System.out.println(starts);
- }
- List<Double> calcStartTimes(double[] events, double workDuration){
- List<Double> result;
- result = new ArrayList<>();
- double startTime;
- Arrays.sort(events);
- startTime = events[0];
- result.add(startTime);
- for (int i = 1; i < events.length; i++) {
- if (events[i] > startTime + workDuration) {
- startTime = events[i];
- result.add(startTime);
- }
- }
- return result;
- }
- }
- package by.it.group351004.narivonchik.lesson02;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- /*
- Даны интервальные события events
- реализуйте метод calcStartTimes, так, чтобы число принятых к выполнению
- непересекающихся событий было максимально.
- Алгоритм жадный. Для реализации обдумайте надежный шаг.
- */
- public class B_Sheduler {
- //событие у аудитории(два поля: начало и конец)
- static class Event implements Comparable<Event>{
- int start;
- int stop;
- Event(int start, int stop) {
- this.start = start;
- this.stop = stop;
- }
- @Override
- public String toString() {
- return "("+ start +":" + stop + ")";
- }
- @Override
- public int compareTo(Event o) {
- return this.stop - o.stop;
- }
- }
- public static void main(String[] args) {
- B_Sheduler instance = new B_Sheduler();
- Event[] events = { new Event(0, 3), new Event(0, 1), new Event(1, 2), new Event(3, 5),
- new Event(1, 3), new Event(1, 3), new Event(1, 3), new Event(3, 6),
- new Event(2, 7), new Event(2, 3), new Event(2, 7), new Event(7, 9),
- new Event(3, 5), new Event(2, 4), new Event(2, 3), new Event(3, 7),
- new Event(4, 5), new Event(6, 7), new Event(6, 9), new Event(7, 9),
- new Event(8, 9), new Event(4, 6), new Event(8, 10), new Event(7, 10)
- };
- List<Event> starts = instance.calcStartTimes(events,0,10); //рассчитаем оптимальное заполнение аудитории
- System.out.println(starts); //покажем рассчитанный график занятий
- }
- List<Event> calcStartTimes(Event[] events, int from, int to) {
- //Events - события которые нужно распределить в аудитории
- //в период [from, int] (включительно).
- //оптимизация проводится по наибольшему числу непересекающихся событий.
- //Начало и конец событий могут совпадать.
- List<Event> result;
- result = new ArrayList<>();
- double stopTime;
- Arrays.sort(events);
- result.add(events[0]);
- stopTime = events[0].stop;
- int firstEventInRange = 0;
- while (events[0].start < from) {
- firstEventInRange++;
- }
- for (int i = firstEventInRange; (i < events.length) && (stopTime <= to); i++){
- if (events[i].start >= stopTime){
- result.add(events[i]);
- stopTime = events[i].stop;
- }
- }
- return result;
- }
- }
- package by.it.group351004.narivonchik.lesson02;
- /*
- Даны
- 1) объем рюкзака 4
- 2) число возможных предметов 60
- 3) сам набор предметов
- 100 50
- 120 30
- 100 50
- Все это указано в файле (by/it/a_khmelev/lesson02/greedyKnapsack.txt)
- Необходимо собрать наиболее дорогой вариант рюкзака для этого объема
- Предметы можно резать на кусочки (т.е. алгоритм будет жадным)
- */
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.util.Arrays;
- import java.util.Scanner;
- public class C_GreedyKnapsack {
- private static class Item implements Comparable<Item> {
- int cost;
- int weight;
- Item(int cost, int weight) {
- this.cost = cost;
- this.weight = weight;
- }
- @Override
- public String toString() {
- return "Item{" +
- "cost=" + cost +
- ", weight=" + weight +
- '}';
- }
- @Override
- public int compareTo(Item o) {
- return this.cost/this.weight - o.cost/o.weight;
- }
- }
- double calc(File source) throws FileNotFoundException {
- Scanner input = new Scanner(source);
- int n = input.nextInt(); //сколько предметов в файле
- int W = input.nextInt(); //какой вес у рюкзака
- Item[] items = new Item[n]; //получим список предметов
- for (int i = 0; i < n; i++) { //создавая каждый конструктором
- items[i] = new Item(input.nextInt(), input.nextInt());
- }
- //покажем предметы
- for (Item item:items) {
- System.out.println(item);
- }
- System.out.printf("Всего предметов: %d. Рюкзак вмещает %d кг.\n",n,W);
- //решение
- Arrays.sort(items);
- double result = 0;
- int nowCommonWeight = 0;
- int i;
- for (i = items.length - 1; (i > 0) && (nowCommonWeight <= W); i--) {
- result += items[i].cost;
- nowCommonWeight += items[i].weight;
- }
- result -= items[i].cost;
- result += (double)(W - (nowCommonWeight - items[i].weight)) * items[i].cost/items[i].weight;
- System.out.printf("Удалось собрать рюкзак на сумму %f\n",result);
- return result;
- }
- public static void main(String[] args) throws FileNotFoundException {
- long startTime = System.currentTimeMillis();
- String root=System.getProperty("user.dir")+"/src/";
- File f=new File(root+"by/it/a_khmelev/lesson02/greedyKnapsack.txt");
- double costFinal=new C_GreedyKnapsack().calc(f);
- long finishTime = System.currentTimeMillis();
- System.out.printf("Общая стоимость %f (время %d)",costFinal,finishTime - startTime);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement