codeFlowType:
codeWrite
codeFlowLang:
Java
Требуется написать программу решающую задачу о рюкзаке методом жадных алгоритмов. Создайте класс предмета с полями цены и веса и названия предмета. Создайте класс рюкзака в котором хранилище предметом будет реализовано как любая подходящая структура данных типа "Предмет" . Создайте 5-6 предметов с различными параметрами. Создайте методы реализующие разные стратегии подготовки исходных данных(различные варианты сортировки). Добавьте методы добавления нового предмета в рюкзак разными стратегиями. Поэкспериментируйте с разными стратегиями и разными наборами предметов, чтобы ответить на вопрос - какой жадный подход даёт наилучший результат в большинстве сценариев.
/**
* Создаем класс предмета со свойствами: название, цена, вес
*/
public class Item {
private String name;
private int price;
private int weight;
public Item(String name, int price, int weight) {
this.name = name;
this.price = price;
this.weight = weight;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
public int getWeight() {
return weight;
}
}
/**
* Создаем класс рюкзака
*/
public class Backpack {
private List<Item> itemList;
private int maxWeight;
public Backpack(int maxWeight) {
itemList = new ArrayList<>();
this.maxWeight = maxWeight;
}
/**
* Кладем предмет в рюкзак
*/
public void putItem(Item item) {
if (item.getWeight() <= maxWeight) {
itemList.add(item);
maxWeight -= item.getWeight();
}
}
/**
* Реализуем жадный алгоритм по максимизации стоимости
*/
public void greedyMaxProfitStrategy(List<Item> items) {
items.sort((o1, o2) -> Double.compare(o2.getPrice() / (double) o2.getWeight(), o1.getPrice() / (double) o1.getWeight()));
for (Item item : items) {
putItem(item);
}
}
/**
* Реализуем жадный алгоритм по минимизации веса
*/
public void greedyMinWeightStrategy(List<Item> items) {
items.sort(Comparator.comparing(Item::getWeight));
for (Item item : items) {
putItem(item);
}
}
/**
* Добавляем предмет в рюкзак, без применения жадных алгоритмов
*/
public void addItem(Item item) {
itemList.add(item);
}
public List<Item> getItemList() {
return itemList;
}
}
public class Main {
public static void main(String[] args) {
Item item1 = new Item("Item 1", 10, 5);
Item item2 = new Item("Item 2", 50, 30);
Item item3 = new Item("Item 3", 20, 10);
Item item4 = new Item("Item 4", 30, 15);
Item item5 = new Item("Item 5", 40, 20);
Backpack backpack = new Backpack(40);
// Используем различные стратегии для добавления предметов в рюкзак
backpack.greedyMaxProfitStrategy(Arrays.asList(item1, item2, item3, item4, item5));
System.out.println(backpack.getItemList());
backpack = new Backpack(40);
backpack.greedyMinWeightStrategy(Arrays.asList(item1, item2, item3, item4, item5));
System.out.println(backpack.getItemList());
backpack = new Backpack(40);
backpack.addItem(item1);
backpack.addItem(item2);
backpack.addItem(item3);
backpack.addItem(item4);
backpack.addItem(item5);
System.out.println(backpack.getItemList());
}
}