Misalkan saya makan lima kali sehari, dan karena ada tujuh hari dalam seminggu, saya punya resep untuk tujuh kali makan, total 35 resep. Setiap resep memiliki jumlah kalori. Setiap hari harus mengandung satu resep per makanan, dan setiap resep ditetapkan untuk makanan tertentu (misalnya Anda tidak bisa makan pancake untuk makan malam). Semua 35 resep harus ada dalam solusi, sehingga resep tidak dapat diulang selama seminggu.
Saya ingin menemukan pengaturan makanan yang akan memberikan jumlah kalori paling rata per hari - yaitu, saya ingin meminimalkan perbedaan total kalori yang dikonsumsi dari hari ke hari.
Ini bukan masalah pekerjaan rumah - itu sebenarnya benar! Saya tidak bisa datang dengan pendekatan yang lebih baik daripada brute-force, dan ada 7! ^ 4 kombinasi, yang banyak.
sumber
Jawaban:
Untuk membuat pendekatan yang lebih formal untuk masalah Anda:
Anda memiliki masing-masing 5 daftar 7 angka. Anda perlu membuat 7 daftar yang masing-masing terdiri dari 5 angka, dan menemukan solusi yang memiliki perbedaan minimal antara daftar yang memiliki jumlah angka terbesar dan satu dengan yang terkecil.
Jika Anda ingin menemukan solusi optimal tanpa heuristik, saya yakin Anda tidak punya banyak pilihan selain untuk menghitung, tetapi Anda tidak perlu menyebutkan semuanya.
Apa pun solusi yang Anda temukan, ketika Anda mendaftarkannya sebagai "yang terbaik ditemukan sejauh ini", daftarkan kinerjanya mengenai metrik Anda (saya percaya itu adalah perbedaan minimal). Kemudian, jika cabang solusi jelas keluar dari jalan ini, berhentilah menghitungnya. Protip: hari-hari non-bangun akan memiliki jumlah kalori terbaik yang merupakan rata-rata dari semua makanan yang tersisa. Jadi, bayangkan Anda memiliki daftar yang
[10, 2, 2, 1, 1, 0, 0]
untuk semua 5 makanan, dan Anda membangun solusi 10 di setiap makan untuk hari 1. Anda tahu hari-hari yang tersisa akan rata-rata 5 kalori per hari, jadi perbedaannya akan setidaknya 45 dan jadi jika Anda sebelumnya menemukan solusi, katakanlahmax - min = 10
, Anda tidak perlu melangkah lebih jauh. Anda akan langsung mencoba menu lain untuk hari 1.sumber
Ini hanya retasan tetapi akan membuat Anda tutup
Hanya 3 kali makan
Pada dasarnya Anda gagal makan jika itu membuat dua hari lebih dekat dengan rata-rata C #
Pendekatan yang lebih baik adalah mengembalikan boolen pada Flop dan beralih kembali sampai selesai.
Flop bisa menjadi lebih pintar. Anda mungkin berada dalam posisi tidak gagal sarapan untuk gagal makan siang dan makan malam. Mungkin ada permutasi kode yang sulit. Ini lebih seperti semacam nilai gagal daripada menyortir.
sumber
Pertama hitung jumlah kalori rata-rata per makan. Kemudian hitung rata-rata hitungan colorie per hari. Ini akan menjadi metrik yang dapat diukur seseorang. Selanjutnya macam-macam makanan.
Sekarang pilih saja makanan tertinggi dan terendah dari jenis itu. Jika makan dalam slot waktu yang sama Anda harus pergi ke terendah berikutnya atau tertinggi sampai Anda menemukan makanan yang tidak ada dalam slot waktu itu (makan malam, dll.). Lakukan ini untuk 4 kali pertama (hi / rendah). Pada jam ke-5, pilihlah makanan yang membuat Anda paling dekat dengan rata-rata. Hemat 5 porsi ke ember terpisah. Bilas dan ulangi sebanyak 7 kali.
Ini akan menjadi set makanan awal Anda. Ini akan sangat merata. Jika Anda ingin distribusi optimal, beberapa perbaikan lebih lanjut dapat dilakukan dengan makanan ke-5.
Periksa ember makanan ke-5 dan cobalah menukar makanan makanan ke-5 di antara hari-hari untuk melihat apakah makanannya bahkan lebih jauh. Anda masih harus menerapkan aturan yang sama (tidak lebih dari satu kali makan per waktu). Seseorang mungkin atau mungkin tidak mendapatkan set lebih banyak. Gunakan rata-rata yang dihitung sebelumnya untuk melihat apakah ada peningkatan atau tidak. Akan ada kombinasi yang jauh lebih sedikit karena 4 makanan pertama ditetapkan berdasarkan tinggi / rendah.
sumber