9, 124, 1415, 2
Величина сумарної корисності: 144.
А тепер упакуємо їх після розподілу по шарах Парето (Таб.4.3)
Таблиця 4.3 Розподіл об'єктів по контейнерах після розподілу по шарах Парето.
Номери контейнеров12345Номера об'ектов5, 7, 817, 1613, 9, 124, 1415, 2
Величина сумарної корисності: 120.
На рис. 4.9 представлений графік, що відображає результати упаковки для обох випадків розподілу об'єктів. Висновок.
Рис. 4.9 Представлення результатів упаковки.
Висновок.
Була виконана упаковка 20 об'єктів, кожен з яких має свої характеристики маси і об'єму. Упаковка вироблялася в 5 контейнерів двома способами: по корисності і по шарах Парето. В обох випадках кількість упакованих об'єктів однаково. Оцінка результатів упаковки для варіанту по шарах Парето в даній задачі виявилася гіршою, ніж для упаковки по корисності.
5. Програма
Структура
Програма, вирішальна цю задачу, написана мовою Java. Java є об'єктно-орієнтованою мовою, тому в ньому доступні класи - структури даних, що описують об'єкти. З математичної точки зору клас можна ототожнити з вектором, а поля класу - зі скалярами у складі цього вектора. При цьому поля класу можуть самі бути об'єктами (екземплярами) інших класів (або цього ж класу, у випадку зі зв'язковими списками). Крім цього, клас містить методи, що дозволяють оперувати даними. Іншими словами, поля описують об'єкт класу, а методи - поведінка цього об'єкта. Java також підтримує специфікатори доступу до полів і методів, що дозволяє убезпечити дані усередині класу від небажаного доступу і модифікації ( пошкодження інформації ). Також в Java існує спадкування класів - об'єкт класу-спадкоємця успадковує поля і методи батьківського класу, за винятком приватних. Цей механізм використовується у випадку, коли існуючий клас недостатньо докладно описує який-небудь об'єкт, і потрібно розширити його опис і/чи перевизначити методи батьківського класу, доступні класу-спадкоємцю. Клас в Java може успадковуватися тільки від одного батьківського класу - творці мови прийшли до висновку, що у всіх випадках, коли в програмі використовується множинне спадкування, можна перебудувати архітектуру програми так, щоб обійтися одиночним. Це набагато спрощує розробку і виключає проблему т. Н. ромбовидного спадкування .
Крім звичайного спадкування, в Java є механізм інтерфейсів. Інтерфейс можна описати як клас, всі поля якого є константами, а всі методи - абстрактними. Інтерфейс не містить реалізацій методів, аналогічно прототипам функцій в С/С ++. Інтерфейси, як і класи, можуть успадковуватися один від одного, причому для них можливо множинне спадкування (оскільки методи в інтерфейсах не реалізовані, проблем з ромбоподібним спадкуванням не виникає). Для задіяння механізму інтерфейсів в оголошенні класу потрібно вказати, що він реалізує інтерфейс з таким-то ім'ям. Після цього в цьому класі необхідно реалізувати всі методи, оголошені в інтерфейсі. Якщо реалізація всіх методів неможлива, а порожні реалізації з тих чи інших причин неприпустимі, можна оголосити цей клас абстрактним. Але в цьому випадку об'єкт цього класу, як і об'єкт інтерфейсу, створити буде не можна. Клас може реалізувати будь-яку кількість інтерфейсів, і інтерфейс може бути реалізований будь-якою кількістю класів. Надалі, створивши інтерфейсну посилання, її можна буде ініціалізувати об'єктом будь-якого класу, що реалізовує цей інтерфейс. При цьому класи, що реалізують інтерфейс, можуть не складатися один з одним в будь-якому відношенні успадкування. (Завдяки цьому можна, наприклад, створити масив інтерфейсних посилань на такі класи). Через інтерфейсну посилання недоступні ніякі поля об'єкта, яким инициализирована ця посилання, крім констант інтерфейсу, і недоступні ніякі методи, що не оголошені в цьому інтерфейсі або в батьківських інтерфейсах. Механізм інтерфейсів зручний у тих випадках, коли необхідно визначити, що робитиме об'єкт, і неважливо, як саме він це буде робити, що дуже допомагає на стадії проектування програми.
В алгоритмах даної програми широко використовуються колекції - класи, що розширюють функціонал масивів. У більшості випадків, коли в програмі необхідно створити структуру, що складається з послідовності однотипних елементів, використовують саме колекції, а не масиви, оскільки колекції позбавлені двох головних особливостей, властивих масивам і псують життя програмісту:
. Кількість елементів колекції можна змінювати, в той час як розмір масиву постійний.
2. Отже, на момент створення колекції необов...