Jadi saya tidak sepenuhnya yakin, tapi saya pikir Anda meminta untuk menghitung jumlah string ukuran n (lebih dari alfabet {a,b}) di mana faktor / substring aa tidak muncul kan?
Dalam hal ini, ada beberapa pendekatan kombinatorial yang dapat Anda ambil. Baik Yuval dan ADG telah memberikan argumen yang lebih sederhana dan lebih intuitif, jadi saya sarankan memeriksa jawaban mereka! Ini salah satu favorit saya, ini agak aneh, tapi ini pendekatan yang sangat umum (dan agak menyenangkan).
Mari kita mulai dengan bahasa yang lebih sederhana, yaitu kata-kata yang dimulai dan diakhiri dengan b (juga tanpa substring dari aa). Kita dapat melihat string yang dapat diterima (misbbbababbbb) sebagai daftar urutan bS dipisahkan oleh singular as. Ini memberikan konstruksi:
w=(b+a)∗b+
Sekarang, bagaimana kita menghitung kalimat yang termasuk dalam bahasa ini?
Mari kita bayangkan bahwa kita sedang mengembangkan ekspresi ini. Apa yange∗menunjukkan? Yah, itu sederhana
e∗=ϵ∣e∣ee∣eee∣eeee∣…
Sekarang, ini tidak masuk akal, tapi mari kita bayangkan itu
eadalah variabel pada beberapa bidang numerik. Secara khusus, kami akan memperlakukan
ϵ→1,
a∣b→a+b, dan
abc→a×b×c. Ini kemudian mengatakan itu
e∗→1+e+ee+eee+…
Mari kita coba melihat motivasi di balik penafsiran aneh ini. Ini
hampir merupakan transformasi bijektif. Secara khusus, kami ingin mempertahankan
hitungan masing-masing
enkata, yang, seperti yang dapat Anda lihat, kami lakukan. Namun, ada satu perbedaan penting antara ekspresi string dan ekspresi numerik: multiplikasi (penggabungan dalam string,
×dalam ekspresi numerik) sekarang komutatif! Secara intuitif, komutatif memungkinkan kita memperlakukan semua permutasi dari kata yang sama dengan yang sama; yaitu, kami tidak menyatukan antara ekspresi
bbbab dan
bbabb; keduanya mewakili string dengan 4
bdan satu
a. Oleh karena itu, transformasi ini memungkinkan kita untuk mempertahankan hitungan setiap kata dari jumlah tertentu
adan
bs, tetapi sekarang memungkinkan kita untuk menutup mata pada detail berlebihan yang tidak kita pedulikan.
Jika Anda kembali ke precalculus, Anda mungkin mengenali seri ini sebagai 11−e. Saya tahu bahwa tidak masuk akal untuk menulis ulang ekspresi reguler ini sebagai fungsi yang dihargai secara numerik, tapi cukup dengan saya sebentar.
Demikian pula, e+=ee∗→e1−e. Yang artinya kita bisa menerjemahkanw ke
w→11−(b1−b×a)×b1−b
Pada gilirannya, kita dapat menyederhanakan ini menjadi
w(a,b)=b×11−(b+ba)
Ini memberitahu kita bahasanya w isomorfik ke bahasa b(b∣ab)∗ (yang terjemahan langsungnya sudah b1−b−ba) tanpa harus menggunakan alat teori-bahasa! Ini adalah salah satu kekuatan memperlakukan seri ini sebagai fungsi bentuk tertutup: kita dapat melakukan penyederhanaan pada mereka yang hampir tidak mungkin untuk melakukan sebaliknya, sehingga mengurangi ke masalah yang lebih sederhana.
Sekarang, jika Anda masih mengingat salah satu mata kuliah kalkulus Anda, Anda akan ingat bahwa jenis fungsi tertentu (cukup berperilaku baik) mengakui representasi seri ini yang dikenal sebagai ekspansi Taylor. Jangan khawatir, kita tidak perlu khawatir tentang set masalah Calc 1 yang sial itu; Saya hanya sekadar menunjukkan bahwa fungsi-fungsi ini dapat direpresentasikan sebagai jumlah
w(a,b)=∑i,jwijaibj
maka
wij memberikan jumlah kata yang memuaskan
w sedemikian rupa sehingga memiliki persis
i kemunculan
a dan
j kemunculan
b. Namun, kami tidak terlalu peduli tentang apakah sesuatu itu
a atau a
b. Sebaliknya, kami hanya peduli tentang jumlah karakter dalam string. Untuk mengubah "mata buta" antara
a dan
b, kita bisa (secara harfiah) memperlakukan mereka sama, misalnya membiarkan
z=a=b dan dapatkan
w(z)=w(z,z)=z1−z−z2=∑kwkzk
dimana wk menghitung jumlah kata panjang yang memuaskan k.
Sekarang, yang tersisa untuk dilakukan adalah menemukan wk. Pendekatan kombinatorial yang biasa di sini adalah untuk menguraikan fungsi rasional ini menjadi fraksi parsial: yaitu, mengingat penyebutnya1−z−z2=(z−ϕ)(z−ψ), kita bisa menulis ulang z(z−ϕ)(z−ψ)=Az−ϕ+Bz−ψ(Ada sedikit aljabar yang terlibat di sini, tetapi ini adalah properti universal dari fungsi rasional (satu pemisah polinom)). Untuk mengatasi ini, Anda bisa refactor
Az−ϕ+Bz−ψ=z(z−ϕ)(z−ψ)
yang menghasilkan kendala
A+B=1,Aψ+Bϕ=0. Terlepas dari apa
A dan
B adalah, ingat itu
11−x=1+x+x2+…kita bisa mengatur ulang
w(z)=−Aϕ−z+−Bψ−z=(−Aϕ)11−zϕ+(−Bψ)11−zψ=(−Aϕ)(1+ϕ−1z+ϕ−2z2+…)+(−Bψ)(1+ψ−1z+ψ−2z2+…)
karena itu
wk=(−Aϕ)ϕ−k+(−Bψ)ψ−k
Sini,
ϕ adalah rasio emas
1+5√2 dan
ψ=−ϕ−1adalah konjugatnya. Kami kemudian memiliki deskripsi yang mudah tentang perilaku asimptotik dari
w bahasa: ini berjalan di
Θ(ϕn). Bahkan, jika Anda memperluas semuanya, Anda akan menemukannya
wk=ϕk−ψk5–√=⌈ϕk5–√⌉
Ada juga koneksi yang rumit dengan kelas kombinatorial umum lainnya. Ini hanya angka-angka Fibonacci!
Sekarang, anggaplah sudah wk, Yang menghitung jumlah string ukuran k yang dimulai dan diakhiri dengan k (dan juga mengandung no aa substring), bagaimana kita dapat membangun string yang dapat dimulai atau diakhiri dengan a? Yah, itu sederhana: string yang dapat diterima ada diw (dimulai dan diakhiri dengan b), atau itu aw (dimulai dengan a), atau itu wa (berakhir dengan a), atau itu awa (dimulai dan diakhiri dengan a). Karena itu:
f(n)=wn+wn−2+2∗wn−1
Ingat itu
wn adalah urutan fibonacci, jadi
wn−1+wn−2=wn, yang artinya
f(n)=(wn+wn−1)+(wn−2+wn−1)=wn+1+wn=wn+2
Karena itu,
f(n)=fib(n+2)=⌈ϕn+25√⌉
Sekarang Anda mungkin tidak perlu melakukan analisis ini, tetapi hanya dengan memiliki wawasan bahwa urutan ini adalah urutan Fibonacci bergeser harus memberi Anda gambaran tentang beberapa interpretasi kombinatorial lain yang dapat Anda coba.