Złożoność naiwnego algorytmu znajdowania najdłuższego substratu Fibonacciego


10

Biorąc pod uwagę dwa symbole i b , niech określić k -tego ciąg Fibonacciego, co następuje:abk

F(k)={bif k=0aif k=1F(k1)F(k2)else

z oznaczającym konkatenację łańcucha.

W ten sposób będziemy mieli:

  • F(0)=b
  • F(1)=a
  • F(2)=F(1)F(0)=ab
  • F(3)=F(2)F(1)=aba
  • F(4)=F(3)F(2)=abaab
  • ...

Biorąc pod uwagę ciąg tworzą n symboli określamy Fibonacciego podciągu za każdym fragmentu z S , który jest również ciąg Fibonacciego odpowiedniego wyboru i b .SnSab

Problem

Biorąc pod uwagę literę , chcemy znaleźć jej najdłuższy substrat Fibonacciego.S

Trywialny algorytm

Dla każdej pozycji ciągu S załóżmy, że zaczyna się F ( 2 ) (wystarczy sprawdzić, czy symbole i- ty i ( i + 1 ) -ty są różne). W takim przypadku sprawdź, czy można go rozszerzyć na F ( 3 ) , a następnie F ( 4 ) i tak dalej. Następnie zacznij ponownie od pozycji i + 1 . Powtarzaj, aż dojdziesz do pozycji n .iSF(2)i(i+1)F(3)F(4)i+1n

Musimy spojrzeć na każdy symbol przynajmniej raz, więc jest to . W grę wchodzą tylko dwie pętle, więc możemy ponadto powiedzieć, że jest to O ( n 2 ) .Ω(n)O(n2)

Jednak (nieco zaskakujące) ten naiwny algorytm działa znacznie lepiej niż zwykle algorytmy kwadratowe (jeśli wykonuje dużo pracy na tej pozycji, nie wykona dużo pracy na następnych pozycjach).i

Jak mogę użyć właściwości Fibonacciego, aby znaleźć ściślejsze granice dla czasu wykonywania tego algorytmu?

Odpowiedzi:


5

F(n) F(n)F(n)F(4)=abaabF(4)pp+1p+2p+3(n)F()n4(n)=|F(n1)|(4)=3

NnP(n)F(n)n|P(n)||F(n)|n|F(n1)|NF(n)|F(n1)|

n|F(n)|(N|F(n1)|+1).
n|F(n)|=O(N)nO(N)=O(NlogN)logNO(NlogN)

FnΩ(|Fn|log|Fn|)NΘ(NlogN)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.