Alice, seorang siswa, memiliki banyak pekerjaan rumah selama beberapa minggu ke depan. Setiap item pekerjaan rumah membawanya tepat satu hari. Setiap item juga memiliki tenggat waktu, dan dampak negatif pada nilai-nilainya (anggap angka sebenarnya, poin bonus hanya dengan asumsi dapat diperbandingkan), jika dia melewatkan tenggat waktu.
Tuliskan fungsi yang diberi daftar (tenggat waktu, dampak kelas) menggambarkan jadwal pekerjaan rumah yang harus dilakukan pada hari yang meminimalkan jumlah dampak buruk pada nilai-nilainya.
Semua pekerjaan rumah harus dilakukan pada akhirnya, tetapi jika dia melewatkan tenggat waktu untuk sebuah barang, tidak masalah seberapa terlambat dia menyerahkannya.
Dalam formulasi alternatif:
ACME corp ingin memasok air ke pelanggan. Mereka semua hidup di sepanjang jalan yang menanjak. ACME memiliki beberapa sumur yang didistribusikan di sepanjang jalan. Setiap sumur menghasilkan air yang cukup untuk satu pelanggan. Pelanggan menawarkan jumlah uang yang berbeda untuk dipasok. Air hanya mengalir menurun. Maksimalkan pendapatan dengan memilih pelanggan yang akan dipasok.
Kami dapat mengurutkan tenggat waktu menggunakan penyortiran ember (atau anggap saja kami telah menyortir berdasarkan tenggat waktu).
Kita dapat memecahkan masalah dengan mudah dengan algoritma serakah, jika kita mengurutkannya dengan menurunkan dampak kelas terlebih dahulu. Solusi itu tidak akan lebih baik dari O (n log n).
Terinspirasi oleh Median of Median dan algoritma pohon rentang minimum linear acak , saya menduga bahwa kita dapat menyelesaikan masalah penjadwalan / aliran sederhana saya dalam waktu (acak?) Linear.
Saya mencari:
- algoritma waktu linear (berpotensi acak)
- atau sebagai alternatif argumen bahwa waktu linier tidak dimungkinkan
Sebagai batu loncatan:
- Saya telah membuktikan bahwa hanya mengetahui item mana yang dapat dilakukan sebelum batas waktu mereka, cukup untuk merekonstruksi jadwal lengkap dalam waktu linier. (Wawasan itu mendasari rumusan kedua di mana saya hanya bertanya tentang sertifikat.)
- Program linear sederhana (integral!) Dapat memodelkan masalah ini.
- Menggunakan dualitas dari program ini, seseorang dapat memeriksa kandidat solusi yang diusulkan dalam waktu linier untuk optimalitas, jika seseorang juga diberikan solusi untuk program ganda. (Kedua solusi dapat direpresentasikan dalam jumlah linier bit.)
Idealnya, saya ingin menyelesaikan masalah ini dalam model yang hanya menggunakan perbandingan antara dampak kelas, dan tidak menganggap angka di sana.
Saya memiliki dua pendekatan untuk masalah ini --- satu didasarkan pada treaps menggunakan tenggat waktu dan dampak, yang lain QuickSelect berdasarkan pemilihan elemen pivot acak dan mempartisi item berdasarkan dampak. Keduanya memiliki kasus terburuk yang memaksa O (n log n) atau kinerja lebih buruk, tetapi saya belum dapat membuat kasus khusus sederhana yang menurunkan kinerja keduanya.