Mungkinkah Anda mengingat detail spesifik salah atau salah mengartikan pertanyaan?
Dalam deskripsi Anda, elemen dalam posisi b dibatasi untuk sebuah - b ≠ ± M .
Tetapi jika mereka hanya bermaksud bahwa perbedaannya dibatasi: a - b ≠ M ,
Maka masalahnya akan muncul.aba−b≠±M
a−b≠M
Saya memecahkan masalah yang lebih sederhana itu, dan saya mencoba untuk menggeneralisasi dengan cara yang saya harap dapat memberikan kebebasan dalam menyelesaikan masalah yang lebih besar. Tetapi ini hanya menjelaskan bagi saya mengapa pendekatan rekursif sangat tidak berhasil, yang saya bahas di bagian akhir.
Pertimbangkan fungsi yang memberikan jumlah permutasi dari daftar elemen berlabel 1 ke N , di mana elemen a di posisi b (posisi pertama adalah 1) memenuhi a - b ≠ M , dan b - a ≠ P .f(N,M,P)Naba−b≠Mb−a≠P
Untuk memvisualisasikan ini, memisahkannya menjadi dua kendala memungkinkan dan P untuk menggeser batasan-batasan itu secara terpisah.MP
1 2 3 4 5 M=0, restricted values for each position
. . . . . (positions in list)
1 2 3 4 5 P=0, restricted values for each position
3 4 5 M=2, restricted values for each position
. . . . . (positions in list)
1 2 3 4 P=1, restricted values for each position
Untuk kenyamanan, ketika sehingga tidak membatasi permutasi, tentukan g ( N , M ) = f ( N , M , P ) . Demikian pula, g ( N , P ) = f ( N , M , P ) ketika M ≥ N sehingga tidak menempatkan batasan pada permutasi.P≥Ng(N,M)=f(N,M,P)g(N,P)=f(N,M,P)M≥N
Dalam kasus khusus batasan dari M dan P adalah setara, sehingga kita dapat diabaikan, memungkinkan kita untuk menulis f dalam bentuk g :
f ( N , 0 , 0 ) = g ( N , 0 ) .M=P=0MPfg
f(N,0,0)=g(N,0).
Dari simetri masalah:
f(N,M,P)=f(N,P,M)
Pertama-tama mari kita selesaikan untuk , dan kemudian atasi f yang lebih umum ( N , M , P ) .g(N,M)f(N,M,P)
Untuk , setiap elemen memiliki satu batasan penempatan (dan batasannya berbeda). Jadi memilih beberapa elemen i , kita akan menempatkannya di beberapa posisi j . Ada N - 1 kemungkinan berbeda untuk pilihan j .M=0ijN−1j
Pilihan ini menghapus posisi terbatas untuk elemen , sedangkan elemen lainnya ( N - 2 ) masih memiliki satu batasan. Kami dapat membagi penempatan j menjadi dua opsi:j(N−2)j
Tempatkan di . Ini meninggalkan semua elemen lain dengan satu batasan, sehingga masalah penempatan yang tersisa sekarang dikurangi menjadi g ( N - 2 , 0 ) .ig(N−2,0)
Tempatkan di posisi . Ini sekarang memberikan satu pembatasan penempatan untuk j , dan setiap elemen memiliki satu batasan, dan masalah penempatan yang tersisa dikurangi menjadi g ( N - 1 , 0 )≠ijg(N−1,0)
Jadi ini memberikan rumus rekursif:
g(N,0)=(N−1)[g(N−2,0)+g(N−1,0)]
Dan dengan melihat situasi sederhana dengan tangan, bisa mendapatkan kasing pangkalan.
g(1,0)=0, g(2,0)=1
Ini adalah formula rekursif kekacauan yang biasa.
Meskipun saya tidak dapat membayangkan seseorang datang dengan ini di tempat, ternyata ada solusi bentuk tertutup untuk ini (lihat artikel wiki kekacauan untuk detail).
g(N,0)=⌊n!e+12⌋
Untuk , tidak ada batasan pada salah satu penempatan:M≥N
(M≥N)⟹g(N,M)=N!
Dengan , elemen M pertama tidak akan memiliki batasan dan elemen yang tersisa akan memiliki satu pembatasan penempatan. Dari segi posisi, posisi M terakhir akan memungkinkan semua angka.0<M<NMM
Untuk posisi terakhir, pilih elemen . Ada dua kemungkinan seperti apa penempatan yang tersisa:i
Jika , maka saya tidak memiliki batasan penempatan, jadi menggunakan saya tidak mengubah batasan pada posisi apa pun. Kami juga telah menghapus satu posisi tanpa batasan, sehingga penempatan yang tersisa terlihat seperti g ( N - 1 , M - 1 ) .i<Miig(N−1,M−1)
Jika , maka saya memiliki batasan penempatan, dan kami menghapus satu posisi tanpa batasan. Karena saya ditempatkan, posisi yang dibatasi mulai sekarang dapat menerima nomor yang tersisa. Jadi penempatan yang tersisa terlihat seperti g ( N - 1 , M ) .i>=Miig(N−1,M)
Jadi ini memberikan rumus rekursif:
(0<M<N)⟹g(N,M)=(M−1)g(N−1,M−1)+(N−M+1)g(N−1,M)
Ini menyelesaikan solusi rekursif untuk .g
Ketika , posisi N - M pertama memiliki batasan nomor tunggal pada mereka, posisi N - P terakhir memiliki batasan nomor tunggal pada mereka, dan posisi M + P - N tengah tidak memiliki batasan. Ini seperti kasus g ( N , M + P - N ) .M+P≥NN−MN−PM+P−Ng(N,M+P−N)
(M+P)≥N⟹f(N,M,P)=g(N,M+P−N)
Kami telah menangani semua kasus saat ini kecuali dan 0 < P < N sehingga M + P < N . Di sinilah beberapa elemen memiliki beberapa batasan. Karena simetri dalam f , kita dapat mempertimbangkan 0 < M ≤ P < N tanpa kehilangan sifat umum.0<M<N0<P<NM+P<Nf0<M≤P<N
Posisi pertama akan memiliki batasan tunggal, kemudian posisi N - M - P dengan dua batasan, kemudian posisi M terakhir memiliki batasan tunggal.PN−M−PM
Melihat elemen, elemen pertama akan memiliki batasan tunggal, lalu elemen N - M - P memiliki dua batasan, lalu elemen P terakhir memiliki batasan tunggal.MN−M−PP
Namun di sinilah kita harus mengakhiri. Karena tidak ada jalan ke depan dengan metode ini.
Saya memisahkan kedua kendala karena saya bisa melihat bahwa menempatkan angka pada posisi yang dipilih bisa ketidakseimbangan berapa posisi dibatasi tunggal ada untuk "+" kendala dan "-" kendala dari .a−b≠±M
Tetapi dalam masalah yang lebih umum, menghapus posisi dengan menempatkan nomor di dalamnya, tidak selalu menghasilkan subproblem yang dijelaskan dengan .f(N,M,P)
Untuk memvisualisasikan kendala pada permutasi, mempertimbangkan grafik diarahkan dengan node, satu set N berlabel { A 1 , A 2 , . . . , A N } dan lain diberi label { B 1 , B 2 , . . . , B N } . Tepi terarah ( A i , B j ) ada jika i - j = M2NN{A1,A2,...,AN}{B1,B2,...,BN}(Ai,Bj)i−j=M, dan tepi terarah ada jika j - i = M dan M ≠ 0 .(Bj,Ai)j−i=MM≠0
Himpunan node dapat dianggap angka yang kita permutasi dalam beberapa daftar, dan B node posisi yang mungkin mereka. Grafik ini mewakili kendala. Tidak akan ada siklus dalam grafik. Itu akan selalu menjadi simpul terpisah atau rantai dengan panjang satu atau lebih.AB
Jadi kami ingin fungsi yang mengambil sebagai input grafik kendala ini, dan menampilkan jumlah permutasi yang memenuhi kendala.
M+P≥N
0<M≤P<NNN!
Karena ada begitu banyak subgraph yang mungkin begitu rantai diizinkan, saya benar-benar tidak melihat bagaimana ini dapat diselesaikan dengan metode rekursif yang biasa kecuali ada hubungan yang pintar mengatakan bagaimana grafik kendala non-isomorfik entah bagaimana setara dengan jumlah permutasi.
Saya pikir kemungkinan besar, pertanyaan itu disalahtafsirkan. Mungkin bahkan oleh pewawancara (yang mungkin lupa jawabannya merinci sendiri).