タグ

関連タグで絞り込む (226)

タグの絞り込みを解除

algorithmに関するjjzakのブックマーク (514)

  • SuffixArray - みずぴー日記

    30分プログラム、その580。id:Gemmaさんに借りたWEB+DB PRESS Vol.50に、suffix arrayの解説が載っていたのでやってみた。 解説を読んだときは「ちょう簡単じゃん。さくっと実装してやんよ」と思っていたけど、いざ始めたけど、けっこう大変だった。簡単とか言って、ごめんなさい。 そもそもararyとついてる時点で大変なことに気がつくべきだった。ボク、OCamlでarrayを使ったことなんてほとんどないじゃないか。 使い方 シグネチャはこんな感じ。 type t val make : string -> t val find : t -> string -> int list まず、suffix arrayを作る。 # let s = SuffixArray.make "abracadabra";; val s : SuffixArray.t = <abstr>

    SuffixArray - みずぴー日記
  • JavascriptでSuffixArray - やればできる子の日記

    全文検索エンジンを試作してみたよ - やればできる子の日記とJavascriptを組み合わせてもうちょっとなにかできないかなあと思って、JavascriptでSuffixArrayを作ってみました。 上手い具合に組み合わせるアイデアが思いつけなかった(どうせ全文検索用のインデックスを保持しちゃうので、別途SuffixArrayを保持する意味がなさそう)ので、素のまま公開しちゃいます。 ちなみに、Javascriptも自信ないです。僕はJSでのべ2000行程度しか書いたことないはず。 /* Suffix Array構築のアルゴリズムは色々研究されています。 以下のコードはかなり最悪なアルゴリズムなので、実用の際は調査してください。*/ function genSA(text){ var sa = new Array(text.length) for(var i = 0; i < text.l

    JavascriptでSuffixArray - やればできる子の日記
  • 全文検索エンジンを試作してみたよ - やればできる子の日記

    今日は奥様とタイ料理&タイ式マッサージの日でした。マッサージはちょっと素晴らしいなあ。 表題のように、全文検索エンジンをGAE上で試作してみました。GAEはGoogle様提供のサービスにもかかわらず「なんで全文検索機能がないねん」という声が上がっていたんですよね。主にtwitter界隈から。 「Introduction to Information Retrieval」というのドラフトPDFと、たつをさんのところのIIR輪講の資料を参考に作りました。つっても、第1章の一部の知識しか使ってないですが。論理和検索もスキップリストも使ってないし(論理和検索はクエリ式のパーサを書くのが面倒だった)。 import logging import re from urllib import urlencode import wsgiref.handlers from google.appengine

    全文検索エンジンを試作してみたよ - やればできる子の日記
  • perlによる大規模データの取扱い

    ページでは,perlでどのようにして大規模なデータを保存するかついて 説明します.主にスタンドアロンで動くもの (クライアント<->サーバ型 でない,いわゆる組込み型) について紹介したいと思います. Menu Berkeley DB BerkeleyDB DB_File SDBM SDBM_File GDBM GDBM_File CDB CDB_File QDBM Depot Curia Villa TDB TDB_File SQLight DBD::SQLite SUFFIX ARRAY SUFARY SARY 複雑なデータ構造 Data::Dumper Storable MLDBM いろいろな比較 ファイルサイズ Benchmark Link サンプルデータについて Berkeley DB Berkeley DBは,組み込み向けデータベースです.通常データベースという とOracl

  • 8.4 - ::Eldesh a b = LEFT a | RIGHT b

    ある配列に含まれる,全ての部分配列の中で, [要素の合計値が最大になる部分配列]の要素の合計値を求める. 以下は文中で紹介されているアルゴリズム. O(n)で動作します. int find_max(int * xs, int N){ int currmax=0; int maxval=0; for(int i=0; i<N; i++){ currmax = max(currmax+xs[i],0); // 負数になったらリセット maxval = max(maxval, currmax); } return (maxval); } こんなに簡単にできるんですね. ちょっと感動した.

    8.4 - ::Eldesh a b = LEFT a | RIGHT b
    jjzak
    jjzak 2009/07/20
    [][][programming]
  • C++: 編集距離を求めるアルゴリズム

    編集距離(edit distance)とは二つの文字列がどの程度異なっているかを示す数値であり、レーベンシュタイン距離(Levenshtein distance)を指すことが多い。文字の挿入、削除、置換それぞれを一つの操作として必要な操作の最小数を求めるものだ。例えば、kittenとsittingの編集距離を求める場合、下記のように3回の操作でkittenをsittingに変更できるので編集距離は3となる。 1. sitten (k を s に置換) 2. sittin (e を i に置換) 3. sitting (g を挿入) そこで今回は編集距離を求める複数のアルゴリズムについてC++で実装してみた。 動的計画法 編集距離を求めるもっとも一般的なアルゴリズムは、動的計画法(dynamic programming)だろう。計算時間はO(mn)であり、手軽だ。C++で書いたコードを下に示

    jjzak
    jjzak 2009/07/20
    [][][text]
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • RPC サーバの遅延リターン - steps to phantasien(2009-07-04)

    最近は過労気味でウェブにものを書くこともできない, という話で上司の同情を誘うべく 日人の労働時間やストレスの実態をまとめた エンドレス・ワーカーズ を読んだら, 自分の労働時間は日人労働者の上位 2 割から漏れていることを知り愕然とした. あんなに働いたってのに...残業エリートへの道は険しい. 道を進みたいわけじゃないけれど. (平均は越えてたぜ!) いずれにせよ流行からはすっかり脱落しているので, 時流を無視して仕事の話でもしよう. 以前, 会社の blog で RPC の結果をノンブロッキングスタイルで受け取るプリミティブ "弱関数" を提案した. でも試行錯誤の結果, いまは使っていない. C++ での弱参照は意図しないリークを作りやすい. 使いわすれることも多く, 忘れた頃にクラッシュする. 要求は明示的にキャンセルした方がいいことがわかった. (世間はみんなそうやってます

  • フォードファルカーソン法をRubyで実装 - yasuhisa's blog

    グラフに対する基的な問題として 最小全域木 最短路問題 最大フロー の3つがあると思う。で、最小全域木は離散最適の課題としてPrim法を使って解いてみたし、最短路問題はベルマンフォードのアルゴリズムをRubyC++で解いてみた。となったら、最大フローを実装しないわけにはいかないな、ということでフォードファルカーソン法を実装してみました。上の3つの問題では一番ややこしかった気がする。というわけでコードと実行結果。 繰り返しの中で残余ネットワークを更新していって、残余ネットワークにおいて始点から終点へのパスが存在するかを幅優先探索を使って探索していくという流れ。 # -*- coding: utf-8 -*- require "pp" class DirectedGraph attr_reader :nodes attr_reader :weights attr_reader :edges

    フォードファルカーソン法をRubyで実装 - yasuhisa's blog
  • 経路からツリーへの変換 - みずぴー日記

    30分プログラム、その614。昨日やっていたやつ(id:mzp:20090630:tree)の逆変換。一晩寝たら、すんなり解けた。 (foo) (foo bar) (foo bar baz) (foo xyzzy) (foo baz) みたいな木の根から末端までの経路リストがあったとする。これから、木を再構築したい。 (make-tree 'foo (make-tree 'bar (make-tree 'baz)) (make-tree 'xyzzy) (make-tree 'baz)) これで、flash.display.Spriteとかflash.text.TextFieldみたいな完全修飾名からパッケージの階層構造を再構築できるようになる。 使い方 gosh> (path-list->tree '((foo bar baz) (foo bar) (foo xyzzy))) (foo

    経路からツリーへの変換 - みずぴー日記
  • Ohmm: Online Training for Hidden Markov Model

    English 概要 ohmmは隠れマルコフモデルにおいて,Online EMアルゴリズム[1]を用いて学習するためのライブラリです.大規模なデータを利用した学習に対応しており数十万語規模の学習データを利用した学習を行うことができます.また学習結果を他用途で利用できるような形で出力することができます. ダウンロード ohmmはフリーソフトウェアです.BSD ライセンスに従ってソフトウェアを使用,再配布することができます. ohmm-0.01.tar.gz: HTTP 更新情報 2009-05-19: ohmm 0.01 0.01をリリースしました 使い方 ソースコードで配布しています。インストール方法は以下の通りです。 >configure >make >sudo make install として使ってください。プログラムohmmが作成されます ohmmは各行に1例ずつ単語列が書か

    jjzak
    jjzak 2009/06/22
    隠れマルコフモデル
  • 終了いたしました。

    作者ホームページサービス(hp.vector)は終了いたしました。 長らくのご利用、ありがとうございます。 ご不明な点があれば、お問い合わせページをご覧の上、お問い合わせください。 ※15秒後にトップページに戻ります。 (c) Vector HOLDINGS Inc.All Rights Reserved.

    jjzak
    jjzak 2009/06/21
    undoの実装
  • 情報と通信のハイパーテキスト

    Home 「情報と通信のハイパーテキスト」 は下記へ移動しました。 http://www.mnc.toho-u.ac.jp/v-lab/

  • モンテカルロどうぶつしょうぎの試み。 - IHARA Note

    日の日記は、専門外のコンピュータ将棋・コンピュータ囲碁の話である。先日コンピュータ将棋のデモンストレーションを見て、やっぱりモンテカルロ法を将棋にも応用したいなと思った。ただし、将棋の場合は細長い読みをしなければならないためモンテカルロ法が適用しづらいらしい。でもなんとかして将棋に適したモンテカルロ法を作りたいと思ったので作ってみた。細長く読めるモンテカルロ法が目指すところである。 いきなり9×9の将棋で実験をする自信がなかったので、まずは3×4の「どうぶつしょうぎ」で実験をすることにした。どうぶつしょうぎの利点はルールに反則がないので実装が簡単であることと、それなりに奥が深いことと、将棋と同じく細長い読みが要求されることである。どうぶつしょうぎはLPSAのオンラインショップから買うことができるが、私は駒込のサロンに直接赴いて買いに行った。1200円である。なお、ルールも含めて商品の

    モンテカルロどうぶつしょうぎの試み。 - IHARA Note
  • Rubyのある風景 - Y Combinator

    再帰的な関数を作るときに関数に名前をつけずに定義するにはどうしたらいいのかというのが、Y Combinatorの中心的な話題です。 まずは、再帰の定番、階乗を計算する関数に登場願いましょう。 fact = lambda{|n| if n < 2 1 else n * fact[n - 1] end } puts fact[10] ここからfactという名前を取り除こうというわけですね。 最終目標は、以下のようにして階乗を計算する関数を定義することができるようになることです。 fact = y[lambda{|h| lambda{|n| if n < 2 1 else n * h[n - 1] end } ] ) puts fact[10] ここで出てきたyが、Y Combinatorと呼ばれるものです。 見やすさの為に、factという名前をつけましたが、関数を定義するところではfact

  • Rubyのある風景 - Y+Combinator+2

    以前取り上げたY Combinatorですが、何故"Y"なのかと思って調べてみたところ、どうやら"To Mock a Mockkingbird" がもとになっているようです。 このでは色々な鳥の名前を各ラムダ式に割り当てて、組み合わせ理論(Combinatory Logic)を解説しています。 ちなみにYは"Why Bird (aka Sage Bird)"だそうで。 さて、組み合わせ理論の有名な話として、 K = λxy.x S = λxyz.xz(yz) の二つを用いることで、チューリングマシンと等価な計算能力が得られるということが知られています(ということは、この二つさえあれば、今一般に使われているプログラムは全て記述できるわけですね)。 例えば、恒等写像I(λx.x)は SKK = (λxyz.xz(yz))(λxy.x)(λxy.x) = (λyz.(λxy.x)z(yz))(

  • Kansai.pmでコルーチンについて発表してきた - はこべにっき ♨

    Kansai.pm#11にて「Perlで学ぶコルーチン」という発表をしてきました. だいぶ前のRuby勉強会でRuby 1.9のFiberをみてPerlでもいろいろやってみていたので,その時しらべたことを中心にぐだぐだとしゃべりました. Perlで学ぶコルーチンView more presentations from hakobe. コルーンは継続や並行処理などいろいろな概念がからんでいて調査がたいへんでした.PerlでのCoroの実装がどうなっているのかもう少し詳細に調査/発表できたらよかったです. スライドにも書いてますが,Ruby 1.9のFiberとまったく同じインターフェースをもったFiber.pmをつくってみました.githubで 公開しています. http://github.com/hakobe/perl-fiber/tree 以下のように簡単にFiber(=コルーチン)をつ

    Kansai.pmでコルーチンについて発表してきた - はこべにっき ♨
  • 正規表現と文脈自由文法の話 - val it : α → α = fun

    http://d.hatena.ne.jp/wasisan/20090321/p1 まず一言。E-Mailアドレスにのみ正しくマッチする正規表現というものは存在しません。それから、RFCではこういうのはたいていBNFで記載されているので、文脈自由文法が使えるならかなりそのまんまで書けるので非常に楽です。 一方で、「正規表現来の目的=トークンの記述」というのには首をかしげます。grep使ったことがないんでしょうか。メールアドレスを正規表現でマッチさせるというシチュエーションはいろいろ考えられますが、MTAやちゃんとした MUAを実装するのでもない限り、よくある用途は「メールアドレスフィールドに突っ込まれたユーザの入力がメールアドレスっぽいかどうか検証する」といった程度のものであり、すなわちhttp://hal456.net/qdmail/validationで書かれているような程度のことで

  • 編集距離 (Levenshtein Distance) - naoyaのはてなダイアリー

    昨日 最長共通部分列問題 (LCS) について触れました。ついでなので編集距離のアルゴリズムについても整理してみます。 編集距離 (レーベンシュタイン距離, Levenshtein Distance) は二つの文字列の類似度 (異なり具合) を定量化するための数値です。文字の挿入/削除/置換で一方を他方に変形するための最小手順回数を数えたものが編集距離です。 例えば 伊藤直哉と伊藤直也 … 編集距離 1 伊藤直と伊藤直也 … 編集距離 1 佐藤直哉と伊藤直也 … 編集距離 2 佐藤B作と伊藤直也 … 編集距離 3 という具合です。 編集距離はスペルミスを修正するプログラムや、近似文字列照合 (検索対象の文書から入力文字にある程度近い部分文字列を探し出す全文検索) などで利用されます。 編集距離算出は動的計画法 (Dynamic Programming, DP) で計算することができることが

    編集距離 (Levenshtein Distance) - naoyaのはてなダイアリー
  • 最長共通部分列問題 (Longest Common Subsequence) - naoyaのはてなダイアリー

    部分列 (Subsequence) は系列のいくつかの要素を取り出してできた系列のことです。二つの系列の共通の部分列を共通部分列 (Common Subsecuence)と言います。共通部分列のうち、もっとも長いものを最長共通部分列 (Longest Common Subsequence, LCS) と言います。 X = <A, B, C, B, D, A, B> Y = <B, D, C, A, B, A> という二つの系列から得られる LCS は <B, C, B, A> で、その長さは 4 です。長さ 2 の<B, D> の長さ 3 の <A, B, A> なども共通部分列ですが、最長ではないのでこれらは LCS ではありません。また、LCS は最長であれば位置はどこでも良いので、この場合 <B, D, A, B> も LCS です。 LCS は動的計画法 (Dynamic Prog

    最長共通部分列問題 (Longest Common Subsequence) - naoyaのはてなダイアリー