Apa yang Anda usulkan pada dasarnya adalah variasi dari Masalah Knapsack , dengan sentuhan tambahan yang, karena kompresi file, Anda tidak mulai mengetahui berapa banyak "ransel" 20MB Anda yang akan ditempati oleh setiap item.
Solusi sepele, tentu saja, hanya dengan zip setiap file secara independen, tetapi gagal untuk mengurangi jumlah file, jadi saya curiga itu tidak akan menjadi solusi yang memuaskan.
Jika saya mengalami masalah ini, saya kira saya akan mulai dengan mengompres setiap file secara terpisah ke lokasi sementara (atau dalam memori, tanpa menuliskannya ke disk), hanya agar saya bisa mendapatkan perkiraan ukuran kompresi untuk masing-masing file. Dengan informasi itu, maka dimungkinkan untuk memutuskan file mana yang harus dikelompokkan bersama dengan salah satu pendekatan standar untuk Masalah Knapsack dan membuat file zip yang sebenarnya.
Dengan asumsi Anda memiliki bahasa scripting yang tersedia untuk Anda dan Anda tahu cara menggunakannya, saya berharap pendekatan ini cukup mudah untuk diotomatisasi; melakukannya secara manual akan sangat membosankan jika Anda memiliki lebih dari beberapa file untuk ditangani ...