fib(n + 2)の上限


8

これは数学的に解く必要はないと言われていましたが、数学は私がやったことを超えているので、私は困惑している宿題の問題を抱えています。ちょうど上限を提供し、それを正当化します。

してみましょう fの

f(n)=|{w{a,b}n:aaw}|.
漸近上限をます。fn

これまでのところ:

nstringscompared to 2n122n0232n1352n3482n85132n186212n43

私に正確な限界を与える数学は私を超えています。明らかにO(2n)は上限ですが、特に厳密ではありません。

私が試すべきことについて何か提案はありますか?


1
コンピュータサイエンスへようこそ!選択したタイトルは、質問を表すのにあまり適していません。少し時間をかけて改善してください。ここでアドバイスを集めました。ありがとうございました!
ラファエル

多くの人は、fib(n + 1)を上限の完全に優れた式と見なします。それが正確なのでさらに良いです:-)
gnasher729

回答:


8

だから私は完全にはわかりませんが、サイズの文字列の数を数えるように求めていると思います(アルファベットが、因数/部分文字列 a aが正しく表示されない })か?{ab}aa

この場合、いくつかの組み合わせのアプローチをとることができます。YuvalとADGはどちらもよりシンプルで直感的な議論を行っているため、回答を確認することをお勧めします。これは私のお気に入りの1つです。少し奇妙ですが、非常に一般的な(そして楽しい)アプローチです。

レッツは、その言葉のどちらで開始および終了、シンプルな言語で始まり(もの無いストリングとA)。私たちは、(例えば許容文字列を見ることができますB B B A B A B B B B)のシーケンスのリストとしてB単数で区切られたS 、A、S。これにより、次の構文が得られます 。w = b + a b + では、この言語に属する文をどのように数えるのでしょうか。baabbbababbbbba

w=b+ab+

これらの表現を拡張しているとしましょう。は何を示していますか?さて、それは単に e = ϵ e e e e e e e e e e …です。 さて、これはほとんど意味がありませんが、eがいくつかの数値フィールド上の変数であると想像してみましょう。特に、ϵ 1a b a + b、およびa b c a ×を扱います。e

e=ϵeeeeeeeeee
eϵ1aba+b。次に、 e 1 + e + e e + e e e + と言い ます。この奇妙な解釈の背後にある動機を見てみましょう。これは、ほぼ全単射の変換です。特に、各 e nワードのを保持したいと考えています。ただし、文字列式と数値式の間には重要な違いが1つあります。乗算(文字列の連結、 ×abca×b×c
e1+e+ee+eee+
en×数式で)は可換です!直感的に、可換性により、同じ単語のすべての順列を同じものとして扱うことができます。である、我々は表現の間で明確にしていないB 、B 、BのB ; 彼らは両方とも4の文字列表現 a sおよびb sのが、今では、気にしていない余分な詳細に目を向けることができます。bbbabbbabb sと1つ a。したがって、この変換により、特定の数の各単語の数を保持できますbaab

前計算に戻ると、このシリーズを1と認識している可能性があります。。この正規表現を数値関数として書き換えても意味がないことはわかっていますが、少しだけ触れておきます。11e

同様に、。これは、wwに変換できることを意味しますe+=eee1ew

w11(b1b×a)×b1b

次に、これをw a b = bに簡略化できます。

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

これは、言語が言語b b a b ∗に同型であることを示しています(その直接翻訳はすでにwb(bab))言語理論上のツールに頼る必要はありません!これは、これらのシリーズを閉じた形の関数として扱うことの力の1つです。他の方法では実行することがほぼ不可能であった簡略化を実行できるため、より単純な問題に削減できます。b1bba

ここで、微積分コースのいずれかをまだ思い出している場合は、特定のタイプの関数(十分に動作している)が、テイラー展開と呼ばれるこれらの級数表現を許可することを思い出します。心配しないでください。これらの厄介なCalc 1問題セットについて心配する必要はありません。これらの関数は合計 なるので、wijは、wが正確にi回出現するaj回出現するbとなるようにwを満たす単語数を与えます。しかし、我々は、特に何かがあるかどうかを気にしないAまたはB。むしろ、文字列の合計文字数を気にするだけです。間の「盲目の目」オンにすると

w(a,b)=i,jwijaibj
wijwiajbaba(文字通り)それらを同じように扱うことができます。たとえば、 zbおよび w z = w z z = zを取得 z=a=b
w(z)=w(z,z)=z1zz2=kwkzk

ここで、は、長さkの充足可能な単語の数をカウントします。wkk

あとは、を見つけるだけです。ここではいつものコンビナトリアルアプローチは、その部分-画分にこの有理関数を分解するために、次のようになります。つまり、分母与えられた1 - Z - Z 2 = Z - φ Z - ψ 、我々は書き換えることができますwk1zz2=(zϕ)(zψ)(代数のビットがここに関与していないが、これは別の)機能を分割し、合理的(1多項式の普遍的な性質であります)。これを解決するには、Aをリファクタリングします z(zϕ)(zψ)=Azϕ+Bzψ 制約を生成A+B=1Aψ+Bφ=0ABが何であるかに関係なく、

Azϕ+Bzψ=z(zϕ)(zψ)
A+B=1,Aψ+Bϕ=0AB、ええと、 w z )を再配置できます 11x=1+x+x2+ 従って 、W、K=-Aϕϕk+B
w(z)=Aϕz+Bψz=(Aϕ)11zϕ+(Bψ)11zψ=(Aϕ)(1+ϕ1z+ϕ2z2+)+(Bψ)(1+ψ1z+ψ2z2+)
ここで、 φは黄金比である 1 +
wk=(Aϕ)ϕk+(Bψ)ψk
ϕおよびψ=ϕ1はその共役です。私たちは、その後の漸近的振る舞いを簡単に説明していワット言語を:それはで実行しますΘφN。あなたはすべてを展開すると実際には、あなたはその見つける ワットのk=φ K -ψ K1+52ψ=ϕ1wΘ(ϕn) 別の一般的な組み合わせクラスとの複雑な関係もあります。これはフィボナッチ数列です!
wk=ϕkψk5=ϕk5

wkkkaaawbawawaaawaa

f(n)=wn+wn2+2wn1
wnwn1+wn2=wn
f(n)=(wn+wn1)+(wn2+wn1)=wn+1+wn=wn+2
f(n)=fib(n+2)=ϕn+25

これでおそらくこの分析を行う必要はありませんが、このシーケンスがシフトしたフィボナッチシーケンスであるという洞察を得るだけで、他のいくつかの組み合わせの解釈を試すことができます。


7

イ・ガオの答えは素晴らしいです。これは別のアカウントです。次のオートマトンについて考えてみましょう。

Automaton for the language

ϵnnϵ

MM(qi,qj)qjqi

M2(qi,qj)=kM(qi,qk)M(qk,qj),
qjqiMn(qi,qj)nqjqinq0{q0,q1}
f(n)=(11)(1110)n(10).
MMM1±52P
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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.