タグ

Stringに関するagwのブックマーク (12)

  • Runの列挙 (Main-Lorentz algorithm) - 迷いませんか?

    Main-Lorentz Algorithm 概要 文字列のrunをで列挙することができるアルゴリズム runは文字列内に現れる部分文字列の繰り返しのことで、特に長さが極大で周期が最小のものを指すっぽい 情報としては区間と周期を持ち、実際に使うときは(l, r, period)としてs[l, r)の周期がperiodみたいに持つ 注意するべきなのは、繰り返しはピッタリである必要はなくて(r - l) % period != 0でもよい ただしr - l >= 2*periodであるもののみを考える 例 "mississippi" 区間: [1, 8), period: 3 長さ3の"iss"が7/3周期分ある s[0] != s[0+period(= 3)] かつ s[8] != s[8-period(= 5)]だからこれ以上伸ばせなくて長さが極大である あとは周期1で2周期分のやつが3つ

  • 文字列の頭良い感じの線形アルゴリズムたち3 - あなたは嘘つきですかと聞かれたら「YES」と答えるブログ

    昨日の記事の続きです。 Z algorithm 文字列が与えられた時、各 i について「S と S[i:|S|-1] の最長共通接頭辞の長さ」を記録した配列 A を O(|S|) で構築するアルゴリズムです。 例えば、 aaabaaaab 921034210 こんな感じです。 Z algorithmのテクニックはManacherとよく似ています。ですので、以下の解説記事を読む前に少し考えてみると分かるかもしれません。 さて、結論から言うと、Z algorithmのコードは以下のようになります。 A[0] = S.size(); int i = 1, j = 0; while (i < S.size()) { while (i+j < S.size() && S[j] == S[i+j]) ++j; A[i] = j; if (j == 0) { ++i; continue;} int k

    文字列の頭良い感じの線形アルゴリズムたち3 - あなたは嘘つきですかと聞かれたら「YES」と答えるブログ
  • Animation of Aho-Corasick string matching algorithm

  • TRIE-Optimized Regexp : 404 Blog Not Found

    2005年09月11日07:06 カテゴリLightweight Languages TRIE-Optimized Regexp これをPerlで直接使えたらうれしいよね>おおる きまぐれ日記: はてなキーワードを高速に付与 そこで、はてなキーワードを TRIE を使って付与するプログラムを作ってみました。 というわけで、やってみました。 最初はDartsのXSを作ろうとしたのだけど、どうもtemplateばりばりのC++コードとXSは相性が悪い。でもTrieを作るだけなら、Perlでもそこそこ出来るし、実際Regexp::OptimizerやRegexp::Assembleのようなモジュールもある。ただこれらはTrie以外のOptimizeもしてしまうので、ちょっと重たいというわけで、mk_trie_regexp.plというScriptをサクっと書いてみました。 使い方は簡単。/usr/

    TRIE-Optimized Regexp : 404 Blog Not Found
  • きまぐれ日記: Autolink: 前方最長一致ではなく最長キーワード優先一致を実現する

    Hatena のキーワード置換アルゴリズムがTRIE ベースの手法に変更になったようです。以前に AC法でやる方法の記事を書いたのですが、それと似たことをやってるのでしょうか。 AC法のやり方は単純で、前方から最長一致でキーワードを見つけていきます。これまでは長いキーワードから順番に見つけていく方法(最長キーワード優先一致)だったそうですが、前方から見つけていく方法だと短いキーワードが優先される場合があります。 http://d.hatena.ne.jp/ita/20060119/p1 http://d.hatena.ne.jp/hatenadiary/20060119/1137667217 文:あいうえおかきくけこさしすせそ KW1 いう KW2 うえおかき KW3 かきく KW4 きくけこさし という文でKW1-KW4のキーワードがマッチする場合、新しくなった方法では「いう」と「かき

  • Aho Corasick 法 - naoyaのはてなダイアリー

    適当な単語群を含む辞書があったとします。「京都の高倉二条に美味しいつけ麺のお店がある」*1という文章が入力として与えられたとき、この文章中に含まれる辞書中のキーワードを抽出したい、ということがあります。例えば辞書に「京都」「高倉二条」「つけ麺」「店」という単語が含まれていた場合には、これらの単語(と出現位置)が入力に対しての出力になります。 この類の処理は、任意の開始位置から部分一致する辞書中のキーワードをすべて取り出す処理、ということで「共通接頭辞検索 (Common Prefix Search)」などと呼ばれるそうです。形態素解析Wikipediaはてなキーワードのキーワードリンク処理などが代表的な応用例です。 Aho Corasick 法 任意のテキストから辞書に含まれるキーワードをすべて抽出するという処理の実現方法は色々とあります。Aho Corasick 法はその方法のひと

    Aho Corasick 法 - naoyaのはてなダイアリー
  • 15种姿势让女人最深-男女洞房最刺激的姿势-性知识大全姿势

  • 文字列検索のいろいろ

    2. 文字列検索って? ● パターンと呼ばれる文字列が 文中のどこに存在するかを見つける手法 ←パターン 文 ※某有名パクツイボット 4. Bruteforce(力まかせ) ● 完全に名前負けしている。 ● 誰でも思いつく以下のような手法である。 ① 文中での比較開始位置を決める。 ② そこからパターンと一致しているか比較する。 不一致が確定した時点で打ち切り。 ③ ①,②を文中の全ての位置に行う。 例) パターン : kyubuns 文: x k y u r i k y u b u n s k y u b u n s ↑ 5. Bruteforce(力まかせ) ● 完全に名前負けしている。 ● 誰でも思いつく以下のような手法である。 ① 文中での比較開始位置を決める。 ② そこからパターンと一致しているか比較する。 不一致が確定した時点で打ち切り。 ③ ①,②を文中の全ての位置に行う。

    文字列検索のいろいろ
  • Wavelet Treeをもう一度 - 気ままなブログ

    文字列のメインであるウェーブレット木をもう一度素直に見直すことにした。 高速文字列解析の世界――データ圧縮・全文検索・テキストマイニング (確率と情報の科学) 作者: 岡野原大輔出版社/メーカー: 岩波書店発売日: 2012/12/27メディア: 単行購入: 15人 クリック: 324回この商品を含むブログ (5件) を見る Wavelet Treeに関する著者のスライドは以下である。 http://www.slideshare.net/pfi/ss-15916040 ふらふらと論文を眺めていたら、Navarro神の「Wavelet Trees for All」というサーベイ論文が加筆されて更新されていた。内容自体はあまり変わっていないと思うが図が増えていた。以下がその論文である。 http://www.dcc.uchile.cl/~gnavarro/ps/jda13.pdf 大半の内

    Wavelet Treeをもう一度 - 気ままなブログ
  • 高速な文字列マッチング - 気ままなブログ

    最近は、簡潔データ構造を中心に調べたりしていたけど、文字列マッチングを考えた場合、別のアプローチもあります。そう、grepのような逐次文字列検索ですね。以下の解説がおもしろいです。 http://www.i.kyushu-u.ac.jp/~takeda/papers/IPSJMagazineCPM.pdf CSAとかFM-Indexに隠れてしまっていますが、実はかなり強力です。特に、クエリが固定で、テキストが頻繁に変更されるようなケースでは有効です。中でも使いやすのは、Aho-Corasick法(AC法)ですね。複数のパターンを同時に検索することができます。KMPを拡張した方法です。 AC法については、日語だと 情報検索アルゴリズム 作者: 北研二,津田和彦,獅々堀正幹出版社/メーカー: 共立出版発売日: 2002/01メディア: 単行購入: 6人 クリック: 552回この商品を含むブ

    高速な文字列マッチング - 気ままなブログ
  • 文字列の中から効率良くキーワードを探し出せ

    文字列の中から効率良くキーワードを探し出せ:コーディングに役立つ! アルゴリズムの基(7)(1/4 ページ) プログラマたるものアルゴリズムとデータ構造は知っていて当然の知識です。しかし、教科書的な知識しか知らなくて、実践的なプログラミングに役立てることができるでしょうか(編集部) 前回「Firebugで探索アルゴリズムを見ていこう」では、数値の集合の中から特定の数値を探索しました。今回は文字列の中から検索ワードを探索してみましょう。 UNIXのコマンドならgrep、Javaなどのプログラムなら文字列のindexOfメソッドなどに相当する処理です。 力任せ法 それでは例によって最もベタなアルゴリズムの紹介から始めましょう。 文字列の中に検索ワードがあるかどうか調べます。文字列の先頭から1文字ずつ検索ワードと比較していきます。不一致があったら文字列の2文字目から1文字ずつ検索ワードと比較し

    文字列の中から効率良くキーワードを探し出せ
  • きまぐれ日記: はてなキーワードを高速に付与

  • 1