Kadang-kadang saya ingin melakukan tes yang tepat dengan memeriksa semua kemungkinan kombinasi data untuk membangun distribusi empiris yang dengannya saya dapat menguji perbedaan yang saya amati antara sarana. Untuk menemukan kemungkinan kombinasi, saya biasanya menggunakan fungsi combn. Fungsi pilih dapat menunjukkan kepada saya berapa banyak kemungkinan kombinasi yang ada. Sangat mudah untuk jumlah kombinasi menjadi begitu besar sehingga tidak mungkin untuk menyimpan hasil fungsi combn, misalnya combn (28,14) membutuhkan vektor 2,1 Gb. Jadi saya mencoba menulis objek yang melangkah melalui logika yang sama dengan fungsi combn untuk memberikan nilai dari "tumpukan" imajiner satu per satu. Namun, metode ini (seperti yang saya instantiated) mudah 50 kali lebih lambat daripada combn pada ukuran kombinasi yang masuk akal,
Apakah ada algoritma yang lebih baik untuk melakukan hal semacam ini daripada algoritma yang digunakan dalam combn? Secara khusus apakah ada cara untuk menghasilkan dan menarik kombinasi Nth yang mungkin tanpa menghitung melalui semua kombinasi sebelumnya?
sumber
Jawaban:
Jika Anda ingin berdagang kecepatan pemrosesan untuk memori (yang saya pikir Anda lakukan), saya akan menyarankan algoritma berikut:
Ini akan memberi Anda semua N Pilih K kombinasi yang memungkinkan tanpa harus membuatnya secara eksplisit. Saya memiliki kode untuk melakukan ini dalam R jika Anda menginginkannya (Anda dapat mengirim email kepada saya di mark dot m periode fredrickson at-symbol gmail dot com).
sumber
Menghasilkan kombinasi cukup mudah, lihat misalnya ini ; tulis kode ini dalam R dan kemudian proses setiap kombinasi pada saat itu muncul.
sumber