Batas atas fib (n + 2)


8

Saya memiliki masalah pekerjaan rumah yang membingungkan saya karena matematika berada di luar apa yang telah saya lakukan, meskipun kami diberitahu bahwa tidak perlu menyelesaikan ini secara matematis. Cukup berikan batas atas dekat dan benarkan.

Membiarkan

f(n)=|{w{a,b}n:aaw}|.
Berikan batas atas asimptotik f sebagai n.

Sejauh ini:

nstringscompared to 2n122n0232n1352n3482n85132n186212n43

Matematika yang akan memberi saya batas pasti melampaui saya. Jelas sekaliO(2n) adalah batas atas, meskipun tidak terlalu ketat.

Ada saran tentang apa yang harus saya coba?


1
Selamat Datang di Ilmu Komputer! Judul yang Anda pilih tidak cocok untuk mewakili pertanyaan Anda. Silakan luangkan waktu untuk memperbaikinya; kami telah mengumpulkan beberapa saran di sini . Terima kasih!
Raphael

Banyak orang akan menganggap fib (n +1) sebagai ekspresi sempurna untuk batas atas. Bahkan lebih baik karena tepat :-)
gnasher729

Jawaban:


8

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 yangemenunjukkan? Yah, itu sederhana

e=ϵeeeeeeeeee
Sekarang, ini tidak masuk akal, tapi mari kita bayangkan itu eadalah variabel pada beberapa bidang numerik. Secara khusus, kami akan memperlakukanϵ1, aba+b, dan abca×b×c. Ini kemudian mengatakan itu
e1+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-masingenkata, 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 ekspresibbbab dan bbabb; keduanya mewakili string dengan 4bdan satu a. Oleh karena itu, transformasi ini memungkinkan kita untuk mempertahankan hitungan setiap kata dari jumlah tertentuadan 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 11e. 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+=eee1e. Yang artinya kita bisa menerjemahkanw ke

w11(b1b×a)×b1b

Pada gilirannya, kita dapat menyederhanakan ini menjadi

w(a,b)=b×11(b+ba)

Ini memberitahu kita bahasanya w isomorfik ke bahasa b(bab) (yang terjemahan langsungnya sudah b1bba) 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 itua atau a b. Sebaliknya, kami hanya peduli tentang jumlah karakter dalam string. Untuk mengubah "mata buta" antaraa dan b, kita bisa (secara harfiah) memperlakukan mereka sama, misalnya membiarkan z=a=b dan dapatkan
w(z)=w(z,z)=z1zz2=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 penyebutnya1zz2=(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 apaA dan B adalah, ingat itu 11x=1+x+x2+kita bisa mengatur ulang
w(z)=Aϕz+Bψz=(Aϕ)11zϕ+(Bψ)11zψ=(Aϕ)(1+ϕ1z+ϕ2z2+)+(Bψ)(1+ψ1z+ψ2z2+)
karena itu
wk=(Aϕ)ϕk+(Bψ)ψk
Sini, ϕ adalah rasio emas 1+52 dan ψ=ϕ1adalah konjugatnya. Kami kemudian memiliki deskripsi yang mudah tentang perilaku asimptotik dariw 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+wn2+2wn1
Ingat itu wn adalah urutan fibonacci, jadi wn1+wn2=wn, yang artinya
f(n)=(wn+wn1)+(wn2+wn1)=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.


7

Jawaban Lee Gao sangat bagus. Ini akun yang berbeda. Pertimbangkan otomat berikut:

Automaton for the language

Ini adalah robot terbatas tanpa batas (UFA) tanpaϵtransisi: NFA sehingga setiap kata memiliki tepat satu jalur penerimaan. Jumlah kata-kata panjangn dengan demikian jumlah jalur panjang n dari negara awal ke negara penerima (karena tidak ada ϵ transisi).

Kita dapat menghitung jumlah jalur dalam grafik menggunakan aljabar linier. MembiarkanMmenjadi matriks transisi automaton:M(qi,qj) adalah jumlah panah dari qj untuk qi(setiap panah dikaitkan dengan simbol tunggal ). Kemudian

M2(qi,qj)=kM(qi,qk)M(qk,qj),
yang persis jumlah jalur panjang 2 dari qj untuk qi. Demikian pula,Mn(qi,qj) adalah jumlah jalur panjang n dari qj untuk qi. Dalam kasus kami, kami ingin menghitung jumlah jalur panjangn dari q0 untuk {q0,q1}, dan sebagainya
f(n)=(11)(1110)n(10).
Cara standar untuk menghitung ungkapan seperti itu adalah dengan mendiagonalisasi M (atau, lebih umum, dengan menghitung bentuk Jordan dari M). Nilai eigen dariM mudah dihitung 1±52, dan untuk beberapa matriks P,
f(n)=(11)P((1+52)n00(152)n)P1(10)=A(1+52)n+B(152)n,
for some coefficients A,B. To determine A,B we can either diagnoalize M explicitly, or just set up a linear system using known values of f. Since f(0)=1 and f(1)=2, the latter approach shows that
A+B=11+52A+152B=2
Solving this system (e.g. using Gaussian elimination), we find out that A=5+3510 and B=53510. Therefore
f(n)=5+3510(1+52)n+53510(152)n=Θ(λmaxn), where λmax=1+52.
The same approach works for every regular language.

This is a fun approach! I always love seeing linear algebraic reductions for path related problems :)
Lee

4

@Lee Gao's is too complex (I haven't even read the whole thing), here is a simplistic approach:

Let f(n) be all desired strings out of which let a(n) be strings that end at a and b(n) be strings that end at b.

Now for every string that ends at b we can directly add a to get ba in ending and a valid string:

(1)a(n)=b(n1)
Note than we cannot add a to end of strings that end at a otherwise we will have aa at the end.

We can add b to any string:

(2)b(n)=a(n1)+b(n1)

Now nn1 in (1) and substitue in (2):

b(n)=b(n2)+b(n1)
So b(n) is fib(n) and since a(n) is b(n-1) hence a(n) is fib(n-1). Now f(n) is:
f(n)=a(n)+b(n)=fib(n)+fib(n1)=fib(n+1)
As fib(n) is (φnφn)/5, hence f(n) is O(φn), φ=1+521.618. (Taking φ/5 as constant and neglecting φn for large n to get an asymptote)

Note: fib(0)=0, fib(1)=1.


Your upper bound isn't very good, however: every language over {a,b} has at most 2n words of length n!
Yuval Filmus

@YuvalFilmus what's the problem, you want a closer bound then use fib(n)=(ϕnϕn)/5
RE60K

This is great! The pairs lock-step inductive constructions of a and b was what I was thinking of as well.
Lee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.