Ringkasan bisnis plan
Input yang diberikan k
, cari partisi bilangan bulat 1
ke n
dalam k
subset bebas jumlah untuk yang terbesar n
yang dapat Anda lakukan dalam 10 menit.
Latar belakang: Nomor Schur
Himpunan A
adalah jumlah bebas jika jumlah sendiri A + A = { x + y | x, y in A}
tidak memiliki elemen yang sama dengannya.
Untuk setiap bilangan bulat positif k
ada bilangan bulat terbesar S(k)
sehingga himpunan {1, 2, ..., S(k)}
dapat dipartisi menjadi k
himpunan bagian bebas jumlah. Jumlah ini disebut k th jumlah Schur (Oei A045652 ).
Misalnya S(2) = 4
,. Kita dapat mempartisi {1, 2, 3, 4}
sebagai {1, 4}, {2, 3}
, dan itu adalah partisi unik menjadi dua himpunan bagian jumlah bebas, tetapi sekarang kita tidak dapat menambahkan 5
ke bagian mana pun.
Tantangan
Tulis program deterministik yang melakukan hal berikut:
- Ambil bilangan bulat positif
k
sebagai input - Tulis stempel waktu Unix saat ini ke stdout
- Keluarkan urutan partisi
1
menjadin
kek
subset bebas jumlah untuk bertambahn
, mengikuti setiap urutan dengan cap waktu Unix saat ini.
Pemenangnya adalah program yang mencetak partisi terbesar n
dalam waktu 10 menit di komputer saya ketika diberi input 5
. Ikatan akan terputus dengan waktu tercepat untuk menemukan partisi untuk yang terbesar n
, rata-rata lebih dari tiga kali: itu sebabnya output harus menyertakan cap waktu.
Detail penting:
- Saya memiliki Ubuntu Precise, jadi jika bahasa Anda tidak didukung, saya tidak akan bisa menilai itu.
- Saya memiliki Intel Core2 Quad CPU, jadi jika Anda ingin menggunakan multithreading tidak ada gunanya menggunakan lebih dari 4 utas.
- Jika Anda ingin saya menggunakan flag compiler atau implementasi tertentu, dokumentasikan dengan jelas dalam jawaban Anda.
- Anda tidak akan membuat kasus khusus kode Anda untuk menangani input
5
. - Anda tidak perlu menampilkan setiap peningkatan yang Anda temukan. Misalnya untuk input,
2
Anda hanya bisa menampilkan partisi untukn = 4
. Namun, jika Anda tidak menghasilkan apa pun dalam 10 menit pertama maka saya akan menilai itu sebagain = 0
.
n=59
, dan penyortiran oleh jumlah terbesar nomor diperbolehkan kurang darinextN
memberin=64
. Mengurutkan berdasarkan panjang daftar angka yang tidak diizinkan (yang mungkin memiliki pengulangan) mengarah sangat cepat ken=30
pola yang elegan .