Limite superiore di fib (n + 2)


8

Ho un problema con i compiti che mi mette in imbarazzo perché la matematica è al di là di ciò che ho fatto, anche se ci è stato detto che non era necessario risolverlo matematicamente. Basta fornire un limite superiore vicino e giustificarlo.

Permettere

f(n)=|{w{a,b}n:aaw}|.
Fornire un limite superiore asintotico f come n.

Finora:

nstringscompared to 2n122n0232n1352n3482n85132n186212n43

La matematica che mi darà un limite preciso è oltre me. OvviamenteO(2n) è un limite superiore, sebbene non sia particolarmente stretto.

Qualche suggerimento su cosa dovrei provare?


1
Benvenuti in Informatica! Il titolo che hai scelto non è adatto a rappresentare la tua domanda. Per favore, prenditi del tempo per migliorarlo; abbiamo raccolto alcuni consigli qui . Grazie!
Raffaello

Molte persone considererebbero fib (n + 1) un'espressione perfettamente valida per un limite superiore. Ancora meglio perché è esatto :-)
gnasher729

Risposte:


8

Quindi non ne sono completamente sicuro, ma penso che tu stia chiedendo di contare il numero di stringhe di dimensioni n (sopra l'alfabeto {a,b}) dove il fattore / sottostringa aa non appare giusto?

In questo caso, ci sono alcuni approcci combinatori che puoi adottare. Sia Yuval che ADG hanno fornito argomenti più semplici e intuitivi, quindi consiglio vivamente di dare un'occhiata alle loro risposte! Ecco uno dei miei preferiti, è un po 'strano, ma è un approccio molto generale (e un po' divertente).

Cominciamo con un linguaggio più semplice, quello delle parole che iniziano e finiscono con b (anche senza sottostringhe di aa). Possiamo guardare una stringa ammissibile (esbbbababbbb) come un elenco di sequenze di bs separati da singolare aS. Questo dà la costruzione:

w=(b+a)b+
Ora, come contiamo le frasi che appartengono a questa lingua?

Immaginiamo che stiamo espandendo queste espressioni. Cosa faedenota? Bene, è semplicemente

e=ϵeeeeeeeeee
Ora, questo avrà molto poco senso, ma immaginiamolo eè una variabile su un campo numerico. In particolare, tratteremoϵ1, aba+b, e abca×b×c. Questo poi dice questo
e1+e+ee+eee+
Proviamo a vedere la motivazione dietro questa strana interpretazione. Questa è quasi una trasformazione biiettiva. In particolare, vogliamo preservare il conteggio di ciascunoenparola, che, come puoi facilmente vedere, facciamo. Tuttavia, esiste una differenza cruciale tra le espressioni di stringa e le espressioni numeriche: la moltiplicazione (concatenazione in stringhe,×in espressioni numeriche) è ora commutativo! Intuitivamente, la commutatività ci consente di trattare tutte le permutazioni della stessa parola come la stessa; cioè, non chiariamo le ambiguità tra l'espressionebbbab e bbabb; entrambi rappresentano una stringa con 4bse uno a. Pertanto, questa trasformazione ci consente di preservare il conteggio di ogni parola di un certo numero dias e bs, ma ora ci consente di chiudere un occhio sui dettagli superflui che non ci interessano.

Se torni al precalcolo, potresti riconoscere questa serie come 11e. So che non ha senso riscrivere questa espressione regolare come una funzione a valore numerico, ma resta nuda con me per un momento.

Allo stesso modo, e+=eee1e. Ciò significa che possiamo tradurrew in

w11(b1b×a)×b1b

A sua volta, possiamo semplificare questo fino a

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

Questo ci dice che la lingua w è isomorfo alla lingua b(bab) (la cui traduzione diretta è già b1bba) senza mai ricorrere a strumenti teorici del linguaggio! Questo è uno dei poteri di trattare queste serie come funzioni a forma chiusa: possiamo eseguire su di esse delle semplificazioni che sono quasi impossibili da eseguire altrimenti, riducendole quindi a un problema più semplice.

Ora, se ricordi ancora qualcuno dei tuoi corsi di calcolo, ricorderai che certi tipi di funzioni (essendo abbastanza ben comportati) ammettono queste rappresentazioni di serie note come espansioni di Taylor. Non preoccuparti, non dovremo davvero preoccuparci di quei fastidiosi problemi di Calc 1; Sto solo sottolineando che queste funzioni possono essere rappresentate come la somma

w(a,b)=i,jwijaibj
così che wij dà il numero di parole che soddisfa w tale che ha esattamente i occorrenze di a e j occorrenze di b. Tuttavia, non ci interessa particolarmente se qualcosa è una o a b. Piuttosto, ci preoccupiamo solo del numero totale di caratteri nella stringa. Per chiudere un "occhio cieco" traa e b, possiamo semplicemente (letteralmente) trattarli allo stesso modo, ad esempio let z=a=b e prendi
w(z)=w(z,z)=z1zz2=kwkzk

dove wk conta il numero di parole soddisfacenti di lunghezza k.

Ora non resta che trovare wk. Il solito approccio combinatorio qui sarebbe quello di scomporre questa funzione razionale nella sua frazione parziale: cioè, dato il denominatore1zz2=(zϕ)(zψ), possiamo riscrivere z(zϕ)(zψ)=Azϕ+Bzψ(C'è un po 'di algebra coinvolta qui, ma questa è una proprietà universale delle funzioni razionali (un polinomio che ne divide un altro)). Per risolvere questo, puoi refactoring

Azϕ+Bzψ=z(zϕ)(zψ)
che genera i vincoli A+B=1,Aψ+Bϕ=0. Indipendentemente da cosaA e B ricordalo 11x=1+x+x2+bene, possiamo riordinare
w(z)=Aϕz+Bψz=(Aϕ)11zϕ+(Bψ)11zψ=(Aϕ)(1+ϕ1z+ϕ2z2+)+(Bψ)(1+ψ1z+ψ2z2+)
perciò
wk=(Aϕ)ϕk+(Bψ)ψk
Qui, ϕ è il rapporto aureo 1+52 e ψ=ϕ1è il suo coniugato. Abbiamo quindi una facile descrizione del comportamento asintotico delw lingua: corre dentro Θ(ϕn). In effetti, se espandi tutto, lo scoprirai
wk=ϕkψk5=ϕk5
C'è anche una complessa connessione con un'altra classe combinatoria comune. Questi sono solo i numeri di Fibonacci!

Ora, supponi di averlo fatto wk, che conta il numero di stringhe di dimensioni k che inizia e finisce con k (e contiene anche n aa sottostringhe), come possiamo costruire una stringa che può iniziare o terminare con un a? Bene, è semplice: è presente anche una stringa ammissibilew (inizia e finisce con b) o lo è aw (inizia con a) o lo è wa (finisce con a) o lo è awa (inizia e finisce con a). Perciò:

f(n)=wn+wn2+2wn1
Richiama questo wn è la sequenza dei fibonacci, quindi wn1+wn2=wn, che significa che
f(n)=(wn+wn1)+(wn2+wn1)=wn+1+wn=wn+2
Perciò, f(n)=fib(n+2)=ϕn+25

Ora probabilmente non devi fare questa analisi, ma solo avere l'intuizione che questa sequenza è una sequenza di Fibonacci spostata dovrebbe darti un'idea di alcune altre interpretazioni combinatorie che puoi provare.


7

La risposta di Lee Gao è eccellente. Ecco un altro account. Considera il seguente automa:

Automaton per la lingua

Questo è un automa finito non ambiguo (UFA) senzaϵtransizioni: un NFA in modo tale che ogni parola abbia esattamente un percorso di accettazione. Il numero di parole di lunghezzan è quindi il numero di percorsi di lunghezza n dallo stato iniziale a uno stato accettante (poiché non ci sono ϵ transizioni).

Possiamo contare il numero di percorsi in un grafico usando l'algebra lineare. PermettereMessere la matrice di transizione dell'automa:M(qi,qj) è il numero di frecce da qj per qi(ogni freccia è associata a un singolo simbolo). Poi

M2(qi,qj)=kM(qi,qk)M(qk,qj),
che è esattamente il numero di percorsi di lunghezza 2 da qj per qi. Allo stesso modo,Mn(qi,qj) è il numero di percorsi di lunghezza n a partire dal qj per qi. Nel nostro caso, vogliamo contare il numero di percorsi di lunghezzan a partire dal q0 per {q0,q1}, e così
f(n)=(11)(1110)n(10).
Il modo standard per calcolare una tale espressione è in diagonale M (o, più in generale, calcolando la forma Jordan di M). Gli autovalori diM sono facilmente calcolati per essere 1±52e così per qualche matrice P,
f(n)=(11)P((1+52)n00(152)n)P1(10)=A(1+52)n+B(152)n,
per alcuni coefficienti A,B. DeterminareA,B possiamo o diagnosticare M esplicitamente, o semplicemente impostare un sistema lineare usando valori noti di f. Daf(0)=1 e f(1)=2, quest'ultimo approccio lo dimostra
A+B=11+52A+152B=2
Risolvendo questo sistema (es. Usando l'eliminazione gaussiana), lo scopriamo A=5+3510 e B=53510. Perciò
f(n)=5+3510(1+52)n+53510(152)n=Θ(λmaxn), where λmax=1+52.
Lo stesso approccio funziona per ogni lingua normale.

Questo è un approccio divertente! Mi piace sempre vedere riduzioni algebriche lineari per problemi legati al percorso :)
Lee

4

@Lee Gao's è troppo complesso (non ho nemmeno letto tutto), ecco un approccio semplicistico:

Sia f (n) tutte le stringhe desiderate da cui a (n) siano le stringhe che terminano in aeb (n) siano le stringhe che terminano in b.

Ora per ogni stringa che termina con b possiamo aggiungere direttamente a per ottenere ba in finale e una stringa valida:

(1)a(n)=b(n1)
Nota che non possiamo aggiungere un alla fine delle stringhe che finiscono in un altrimenti avremo aa alla fine.

Possiamo aggiungere b a qualsiasi stringa:

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

Adesso nn1 in (1) e sostituire in (2):

b(n)=b(n2)+b(n1)
Quindi b (n) è fib (n) e poiché a (n) è b (n-1) quindi a (n) è fib (n-1). Ora f (n) è:
f(n)=a(n)+b(n)=fib(n)+fib(n1)=fib(n+1)
Come fib (n) è (φnφn)/5, quindi f (n) è O(φn), φ=1+521.618. (tenendoφ/5 come costante e trascurante φn per grandi n ottenere un asintoto)

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


Il limite superiore non è molto buono, tuttavia: ogni lingua è finita {a,b} ha al massimo 2n parole di lunghezza n!
Yuval Filmus,

@YuvalFilmus qual è il problema, vuoi un limite più stretto, quindi usa fib(n)=(ϕnϕn)/5
RE60K,

Questo è fantastico! Le coppie inducono il blocco delle costruzioni induttive dia e bera anche quello a cui stavo pensando.
Lee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.