Tantangan
Dalam jumlah kode terpendek:
- Hitung panjang siklus permutasi dari shuffle sempurna pada setumpuk kartu dengan ukuran berapa pun n (di mana n ≥ 2 dan n genap).
- Keluarkan tabel semua panjang siklus selama 2 ≤ n ≤ 1000 ( n even).
Perhatikan bahwa ada dua cara dasar untuk mendefinisikan shuffle yang sempurna. Ada out-shuffle , yang menjaga kartu pertama di atas dan kartu terakhir di bawah, dan ada di-shuffle , yang memindahkan kartu pertama dan terakhir satu posisi ke arah tengah. Anda dapat memilih apakah Anda melakukan out-shuffle atau in-shuffle; Algoritma ini hampir identik di antara keduanya.
- mengocok kartu 10-kartu: [1,2,3,4,5,6,7,8,9,10] ↦ [1,6,2,7,3,8,4,9,5, 10].
- in-shuffle dari 10 kartu deck: [1,2,3,4,5,6,7,8,9,10] ↦ [6,1,7,2,8,3,9,4,10, 5].
Contoh grafis
Di sini, kita melihat bahwa out-shuffle pada dek 20-kartu memiliki panjang siklus 18 langkah. (Ini hanya sebagai ilustrasi; solusi Anda tidak diharuskan untuk menghasilkan siklus secara grafis.) Di sisi lain, dek 52 kartu klasik memiliki panjang siklus mengocok hanya 8 langkah (tidak diperlihatkan).
In -shuffle pada dek 20-kartu memiliki panjang siklus hanya 6 langkah.
Contoh output tabular
Program Anda harus menampilkan sesuatu yang mirip dengan ini, meskipun Anda dapat memilih format tabular apa saja yang paling Anda sukai. Ini untuk out-shuffle:
2 1
4 2
6 4
8 3
10 6
12 10
14 12
16 4
18 8
20 18
22 6
24 11
26 20
28 18
30 28
32 5
34 10
36 12
38 36
40 12
...many lines omitted...
1000 36
Pertanyaan
- Apakah tampaknya ada hubungan antara input angka n dan jumlah siklusnya, ketika n adalah kekuatan 2?
- Bagaimana kalau n bukan kekuatan 2?
- Anehnya, kartu 1000-kartu memiliki hitungan siklus out-shuffle hanya 36, sedangkan kartu 500-kartu memiliki jumlah siklus kartu-keluar-166 sebesar 166. Mengapa bisa demikian?
- Berapa jumlah terbesar yang dapat Anda temukan yang jumlah siklus c- nya jauh lebih kecil dari n , artinya rasio n / c dimaksimalkan?