Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FM-index による全文検索

Sho Iizuka
February 02, 2015

FM-index による全文検索

Sho Iizuka

February 02, 2015
Tweet

More Decks by Sho Iizuka

Other Decks in Programming

Transcript

  1. • จॻ͔ΒจࣈྻΛݕࡧ͢Δํ๏͸2௨Γʹ෼ྨͰ͖Δ A. લॲཧ͕ෆཁͳํ๏ (ྗ೚ͤͳํ๏, KMP๏, BM๏) B. લॲཧ͕ඞཁͳํ๏ (సஔΠϯσοΫε,

    ઀ඌࣙ഑ྻ) • B͸લॲཧͷ͕࣌ؒඞཁͳ͔ΘΓʹ,
 ಉ͡จॻ͔ΒԿճ΋ݕࡧ͢Δ৔߹͸AΑΓ΋ߴ଎ • FM-Index͸Bʹ෼ྨ͞ΕΔํ๏Ͱ,
 จॻͷ௕͞ʹґଘ͠ͳ͍࣌ؒͰݕࡧͰ͖Δ
  2. લॲཧ̍ɿ઀ඌࣙ഑ྻͷߏங 0 mississippi$ 1 ississippi$ 2 ssissippi$ 3 sissippi$ 4

    issippi$ 5 ssippi$ 6 sippi$ 7 ippi$ 8 ppi$ 9 pi$ 10 i$ 11 $ 11 $ 10 i$ 7 ippi$ 4 issippi$ 1 ississippi$ 0 mississippi$ 9 pi$ 8 ppi$ 6 sippi$ 3 sissippi$ 5 ssippi$ 2 ssissippi$ ࣙॻॱͰιʔτ͢Δ ※$͸೚ҙͷΞϧϑΝϕοτΑΓ΋
 ॱҐ͕খ͍͞ͱ͢Δ ઀ඌࣙ഑ྻSA
  3. લॲཧ̎ɿBWT
 (Burrows-Wheeler Transform) 11 $ 10 i$ 7 ippi$ 4

    issippi$ 1 ississippi$ 0 mississippi$ 9 pi$ 8 ppi$ 6 sippi$ 3 sissippi$ 5 ssippi$ 2 ssissippi$ ݩͷจࣈྻʹ͓͚Δ
 ͻͱͭલͷจࣈʹ͢Δ i p s s m $ p i s s i i BWTจࣈྻT
  4. ݕࡧॲཧ • BWTจࣈྻT = ipssm$pissii ʹ͍ͭͯ,
 ࣍ͷؔ਺Λఆٛ͢Δ • Rank(c,p) :

    T[0,p)ͷൣғͰ,
 ΞϧϑΝϕοτcͷग़ݱ਺Λฦ͢ • RankLT(c) : TશମͰ, cΑΓ΋ॱҐ͕খ͍͞
 ΞϧϑΝϕοτͷग़ݱ਺Λฦ͢
  5. ݕࡧॲཧ $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$

    sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWTจࣈྻT ઀ඌࣙ഑ྻSA
  6. ݕࡧॲཧ $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$

    sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWTจࣈྻT ઀ඌࣙ഑ྻSA 'i'+"ppi$"ͷ
 ઀ඌࣙ഑ྻ্Ͱͷ
 ग़ݱҐஔ͸ʁ
  7. ݕࡧॲཧ $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$

    sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWTจࣈྻT ઀ඌࣙ഑ྻSA 'i'+"ppi$"ͷ
 ઀ඌࣙ഑ྻ্Ͱͷ
 ग़ݱҐஔ͸ʁ
  8. ݕࡧॲཧ $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$

    sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWTจࣈྻT ઀ඌࣙ഑ྻSA 'i'+"ppi$"ͷ
 ઀ඌࣙ഑ྻ্Ͱͷ
 ग़ݱҐஔ͸ʁ LF-mapping c=T[p] ʹଓ͘จࣈྻͷ
 SA্Ͱͷग़ݱҐஔ͸
 RankLT(c)+Rank(c,p)
  9. ݕࡧॲཧ $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$

    sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWTจࣈྻT ઀ඌࣙ഑ྻSA "ssi"ͷݕࡧ [RankLT('i')+Rank('i', 0),
 RankLT('i')+Rank('i', 12)) 'i'Ͱ࢝·Δ
 จࣈྻ
  10. ݕࡧॲཧ $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$

    sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWTจࣈྻT ઀ඌࣙ഑ྻSA "ssi"ͷݕࡧ [RankLT('s')+Rank('s', 1),
 RankLT('s')+Rank('s', 5)) 's'+"i"Ͱ࢝·Δ
 จࣈྻ
  11. ݕࡧॲཧ $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$

    sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWTจࣈྻT ઀ඌࣙ഑ྻSA "ssi"ͷݕࡧ [RankLT('s')+Rank('s', 8),
 RankLT('s')+Rank('s', 10)) 's'+"si"Ͱ࢝·Δ
 จࣈྻ
  12. ݕࡧॲཧ • FM-index͸, ݕࡧจࣈྻʹରԠ͢ΔҐஔͷߜΓࠐΈΛ
 LF-mappingͷ܁Γฦ͠ʹΑͬͯߦ͏ • LF-mapping͸ Rank ͱ RankLT

    Ͱߦ͑Δ • ͜ͷ2ͭͷॲཧ͸, ΢ΣʔϒϨοτ໦΍΢ΣʔϒϨοτߦྻΛ࢖͑͹
 O(log σ) ࣌ؒͰՄೳ (σ ͸ΞϧϑΝϕοτͷछྨ਺) • LF-mappingΛݕࡧจࣈྻQͷ௕͞෼͚ͩ܁Γฦ͢ͷͰ,
 Ұճͷݕࡧ͕O(m log σ) ࣌ؒͰՄೳ (m ͸ Q ͷจࣈ਺) • ݕࡧ͕࣌ؒจॻͷ௕͞ʹґଘ͠ͳ͍