タグ

algorithmに関するfukkenのブックマーク (59)

  • diffの動作原理を知る~どのようにして差分を導き出すのか | gihyo.jp

    UNIXの基的なコマンドの1つであるdiff。 これに実装されているアルゴリズムは実に興味深い世界が広がっています。 稿では、筆者が開発した独自ライブラリ「dtl」をもとに「diffのしくみ」を解説します。 はじめに diffは2つのファイルやディレクトリの差分を取るのに使用するプログラムです。 ソフトウェア開発を行っている方であれば、SubversionやGitなどのバージョン管理システムを通して利用していることが多いかと思います。稿ではそのdiffの動作原理について解説します。 差分の計算の際に重要な3つの要素 差分を計算するというのは次の3つを計算することに帰結します。 編集距離 2つの要素列の違いを数値化したもの LCS(Longest Common Subsequence) 2つの要素列の最長共通部分列 SES(Shortest Edit Script) ある要素列を別の要

    diffの動作原理を知る~どのようにして差分を導き出すのか | gihyo.jp
  • 単純グッド・チューリング推定法 (Simple Good-Turing Estimation) とは何ぞや? - あらびき日記

    この記事は abicky.net の 単純グッド・チューリング推定法 (Simple Good-Turing Estimation) とは何ぞや? に移行しました

    単純グッド・チューリング推定法 (Simple Good-Turing Estimation) とは何ぞや? - あらびき日記
  • 機械学習超入門II 〜Gmailの優先トレイでも使っているPA法を30分で習得しよう!〜 - EchizenBlog-Zwei

    最近の論文で The Learning Behind Gmail Priority Inbox D.Aberdeen, O.Pacovsky & A.Slater というのがある。これはGmailの優先トレイで使っている機械学習のアルゴリズムについて解説したもの。というと難しそうな印象があるが、この論文で紹介されているPassive-Aggressiveという手法は実装がとても簡単。なので今回はこれについて解説するよ。 参考資料: Gmail - 優先トレイ Online Passive-Aggressive Algorithms K.Crammer et al. The Learning Behind Gmail Priority Inbox読んだメモ - 糞ネット弁慶 わかりやすい日語解説 機械学習超入門 〜そろそろナイーブベイズについてひとこと言っておくか〜 - EchizenBl

    機械学習超入門II 〜Gmailの優先トレイでも使っているPA法を30分で習得しよう!〜 - EchizenBlog-Zwei
  • ランキングのつくりかた:Kenn's Clairvoyance

    遅ればせながら、あけましておめでとうございます。 先週には、ベイエリアの友人たちがやっているEchofonがPostUpに買収されるなど、幸先のよい新年のスタートとなりました。 さて、最近ホットなマーケットといえばソーシャルゲームですが、ゲームといえばリーダーボード。ハイスコアのランキング友人や見知らぬ人たちと競うのは、ビデオゲームが誕生した1970年代から欠かせない要素でした。 ところが、インターネット経由で100万人規模のプレイヤーがつながるようになってきた現在、その全体をランキングづけするのは、技術的にも大きなチャレンジとなってきました。 今回は、そのリーダーボードのつくりかたについて、ぼくらの作っているソーシャルゲーム・プラットフォームであるPankiaの運用で得られた知見を共有したいと思います。 自分の順位を知る方法 リーダーボードの基的な考え方はシンプルで、それはつまり「ユ

    ランキングのつくりかた:Kenn's Clairvoyance
    fukken
    fukken 2011/01/13
    ユーザーをキーに点数を格納するのではなく、点数をキーにする、という発想。cool
  • 第3回 ツリーマップによる木構造の可視化(前編) | gihyo.jp

    はじめに 前回は、統計学的観点からの情報可視化へのアプローチとして、「⁠階層的クラスタリング」の手法を紹介し、その実装と動作確認を行いました。 今回からは、階層的クラスタリングの実行結果を視覚的に分かりやすく表現する手段として、「⁠ツリーマップ」と呼ばれるテクニックを取り上げます。 ソースコードのダウンロード 今回作成するプログラムのソースコードは、こちらから一括してダウンロードすることができます。ZIPファイルを展開して生成されるフォルダを、プロジェクトとしてNetBeansに読み込むことも可能です。 ツリーマップの概要 ツリーマップ(treemap)とは、二次元平面上の領域を入れ子状に分割することによって、木構造のデータを可視化する手法です。 ツリーマップを利用した情報可視化の有名な例としては、世界のニュース記事をタイル状に並べて閲覧できるnewsmap(図1)があります。 図1 また

    第3回 ツリーマップによる木構造の可視化(前編) | gihyo.jp
  • Compressed Suffix Arrayの記事まとめ - EchizenBlog-Zwei

    一応CSAの記事を書き終えたので、各記事へのリンクリストを。 補足:記事を7つも読むの面倒くさい人は、↓にもう少し簡単な圧縮法の解説を書いておいたので参照されたい。 15分でわかる(とうれしい)Suffix Arrayの簡単な圧縮法 Compressed Suffix Arrayの解説(1) -Suffix Array- Compressed Suffix Arrayの解説(2) -SAの計算量- Compressed Suffix Arrayの解説(3) -圧縮の方針- Compressed Suffix Arrayの解説(4) -unary記法- Compressed Suffix Arrayの解説(5) -Succinct Bit Vector- Compressed Suffix Arrayの解説(6) -B Vectorと Ψ Vector- Compressed Suffix

    Compressed Suffix Arrayの記事まとめ - EchizenBlog-Zwei
  • R木 - Wikipedia

    2次元矩形のR木の例 R木(英: R-tree)は、B木に似た木構造のデータ構造であり、多次元情報(例えば、二次元座標データなど)のインデックス付け、すなわち空間インデックスに使われる。それは例えば、「現在位置から2km以内の全ての美術館を探す」といった用途に使われる。 R木は、階層的に入れ子になった相互に重なり合う最小外接矩形 (MBR) で空間を分割する。R木のRは矩形 (Rectangle) を意味する。 R木の各ノードのエントリ数は可変である(事前に定義された上限がある)。葉ノード以外の各エントリには2つのデータが格納される。1つは子ノードへの参照であり、もう1つはその子ノードの全エントリを囲む外接矩形のデータである。 挿入および削除のアルゴリズムはこれらの外接矩形を使い、近い要素が同じ葉ノードに属するようにする(特に、新たな要素を挿入する際に、どの最下層の外接矩形にも収まらない場

    R木 - Wikipedia
  • 【レビュー】高性能ソフトウェアの開発方法、仮想メモリを活用 | エンタープライズ | マイコミジャーナル

    Queue is the ACM's magazine for practicing software engineers. 高いパフォーマンスを発揮するプログラミングに関する興味深い実験結果と考察をまとめたPoul-Henning Kamp氏の記事がACM QueueにおいてYou're Doing It Wrongというタイトルのもの掲載されている。同氏は超高速リバースキャッシュプロクシVarnishの開発者であるとともに、FreeBSD主要開発者のひとり。これまでの開発経験から現在のOSやH/Wの特性を活用したプログラミングについて言及している。 VarnishはFacebookをはじめWikia、Slashdot、Opera、VGなどさまざまなサイトで超高速リバースキャッシュプロクシとして採用されている。従来のリバースキャッシュプロクシと比較して徹底した高速化とOSの性能をフルに発

    fukken
    fukken 2010/06/17
    "現在のソフトウェアはメモリ上で直接実行されるのではなく、仮想メモリ空間で実行されていることを指摘。このため、仮想メモリを使わない時代に研究および設計されたアルゴリズムは、H/Wの性能をフルに発揮できない"
  • yebo blog: クヌース教授は間違っていた

    2010/06/15 クヌース教授は間違っていた Slashdotによれば、この数十年間、クヌース教授をはじめとするコンピュータ科学者が最適としてきたアルゴリズムを10倍高速にする方法をPoul-Henning Kamp (PHK) というハッカーが見付けたという。その論文タイトルは「You're Doing It Wrong (あなた達のやっている事は間違っている)」で、ACM Queueに掲載されている。別にクヌース教授の考えが間違っているわけではなく、アルゴリズム的には正しいが、実用レベルでは、OSには仮想メモリがあり、VMと干渉しないようにすれば簡単に高性能なシステムが作れる。従来の考え方はモダンな計算機を考慮に入れていないので、現実的には不適合を起こしている。具体的にはヒープにBツリーの要素を取り込んだBヒープというデータ構造を使うことで、バイナリヒープの10倍のパフォーマンスを

  • 遺伝的アルゴリズムを使って数独を解く | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記

    みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー Solving Sudoku with genetic algorithms(遺伝的アルゴリズムを使って数独を解く) というブログエントリを読んで,遺伝的アルゴリズムの入門記事として面白かったので紹介。 遺伝的アルゴリズムとは,生命の遺伝の仕組みを模した方法を使って解を探索する手法のこと。データを遺伝子で表現した個体を複数用意し,適応度によって個体を選択し,遺伝子に突然変異を起こしたりして解を探索してゆく。実装例としては,PostgreSQLが問い合わせを最適化するのに遺伝的アルゴリズムを使っている。上記エントリでは,この遺伝的アルゴリズムを使って数独の問題を解く手法を紹介している。

  • LSH (Locality Sensitive Hashing) を用いた類似インスタンスペアの抽出 - mixi engineer blog

    GW 中の長距離移動のために体調が優れない takahi-i です. 今回は巨大なデータをマイニングする一つの技術として LSH (Localtiy Sensitive Hashing) を紹介させていただきます. LSH とは LSH は大量なデータから類似度が高いインスタンスのペアを高速に抽出してくれるアルゴリズムです. ここでインスタンスはデータ集合の一つの要素を表します. たとえば扱うデータが E-コマースサイトの購買ログであれば, インスタンスは各ユーザですし, 画像データ集合であれば, インスタンスは個々の画像データです. LSH の詳しい解説については以下のサイトがあります. Wikipedia のエントリ LSH に関する論文がまとめられているページ 稿ではE-コマースサイトの購買履歴データを基に LSH の機能について述べてゆきます. 以下のような E-コマースサイトの

    LSH (Locality Sensitive Hashing) を用いた類似インスタンスペアの抽出 - mixi engineer blog
  • モテるアルゴリズム講座  第2回 Skip Graphでモテたい|株式会社 フラッツ

    天方です。 それでは、アルゴリズム講座第2回をはじめたいと思います。 おかげさまで、前回の講座では、公開後、たくさんの知り合いの方から声をかけていただきました。 やはりアルゴリズムがモテるということを実感した第1回講座でした。 さて、今日は、最近クラウドのGoogle App Engine(GAE)で利用を検討したアルゴリズムについて紹介したいと思います。 GAEでは、プログラムをする際に、クラウドの特性を意識する必要があるのですが、それは、アルゴリズム、特に並列アルゴリズムの知識を生かすには非常によい環境ともいえます。 はっきりいいます。GAEでアルゴリズムができるとモテます。 この講座を通じて少しでも皆様にモテをおすそ分けできたらと思います。 さて、日も前回と同様、アルゴリズムとデータ構造に着目しています。 GAEでは、データを格納するストレージとしてRDBMSを使う代わり

    fukken
    fukken 2010/05/01
    他人のふんどしで断り無く相撲を取る男はモテない
  • #appengine で skiplist ってすごくね?・その2

    koher @koher Skiplistを使ったランキングですが、新幹線の中で考えていて、ふとSkiplistだからすごいのではなく、Indexableだからすごいんだと気づきました。Indexable B-treeも作れそうな気がします。 #appengine #ajn7 2010-04-26 00:56:45

    #appengine で skiplist ってすごくね?・その2
    fukken
    fukken 2010/04/26
    "え、ではもしかしてすごいことに気づいてしまったのでしょうか…"
  • Tetsuya Hattori; moved

    Tetsuya HATTORI 引っ越しました.クリックしてください. ブックマークとリンクの変更をお願いします.

    fukken
    fukken 2010/04/26
    「最近売れている」の「最近」をどんどん刹那的にして行くとこうなるよね
  • Google App Engineでランキングやページングを実現する - $koherent->diary

    昨日一昨日、Google App Engine (GAE)に関する日最大の勉強会(だと思う)appengine ja night #7 (ajn7)が行われました。 その中で『ランキング問題』が話題に上がりました。『ランキング問題』とは、何十万件もの点数のデータがあるときに、App Engine上で、「◯点は何位です」と高速に求めることは難しい、という問題です。(◯ページ目を表示、というページングもこれと同じ種類の問題になります。) ajn7では「上位でない限り正確な順位は必要ないのではないか」という話になりましたが、Skiplistを用いた検索アルゴリズムを使えば正確かつ高速に順位を求めることができるのではないかと思い、実装&検証してみました。 ランキング(順位取得)のデモ 下記ページで順位取得のデモを動かしています。スコア(点数)を入力すると順位と取得にかかった時間が表示されます(時

    Google App Engineでランキングやページングを実現する - $koherent->diary
  • kumofsはなぜ落ちないか - Blog by Sadayuki Furuhashi

    前回は、kumofsはなぜスケールするかということについて紹介しました。その中で最後に、耐障害性もスケーラビリティにとって重要だーと述べました。 そこで今回は、kumofsはなぜ落ちないのか、なぜ耐障害性が高いと言えるのかーということについて紹介したいと思います。 分散システムはテストが難しいことに定評がありますが(たぶん^^;)、その中でも耐障害性の検証は最上級に困難な部類です。 耐障害性は実際のところ、アルゴリズムの設計以前に実装上のバグが大きく影響するので、設計上は耐障害性が高いと言っていても、実際に使ってみると良く止まるという話はありがちな話です。(個人で開発している場合など、開発リソースが小さい場合はなおさら) そのため耐障害性の高いシステムを実現するためには、実装しやすくバグが入り込みにくい設計も重要かなーと思います(もちろん、アルゴリズムも重要ですが)。 分散システムには複雑

    kumofsはなぜ落ちないか - Blog by Sadayuki Furuhashi
    fukken
    fukken 2010/02/09
    consistent hashingを使うとサーバーが死んだ時の再配置先が分散されるので連鎖落ちを防げる
  • トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター

    トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター:最強最速アルゴリズマー養成講座(1/4 ページ) プログラミングにおける重要な概念である「探索」を最速でマスターするために、今回は少し応用となる探索手法などを紹介しながら、その実践力を育成します。問題をグラフとして表現し、効率よく探索する方法をぜひ日常に生かしてみましょう。 まだまだ活用可能な探索 前回の「知れば天国、知らねば地獄――『探索』虎の巻」で、「探索」という概念の基礎について紹介しました。すでに探索についてよく理解している方には物足りなかったかと思いますが、「問題をグラフとしてうまく表現し、そのグラフを効率よく探索する」というアルゴリズマー的な思考法がまだ身についていなかった方には、得るものもあったのではないでしょうか。 前回は、「幅優先探索」と「深さ優先探索」という、比較的単純なものを紹介しましたが

    トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター
    fukken
    fukken 2010/02/09
    "もしあなたがプログラマーであれば、9問中5問程度はすぐにイメージできてほしいところです"
  • Learning to Hash! 最新 Locality sensitive hashing 事情 - 武蔵野日記

    高速に類似度計算をしたい場合、典型的に使われるのは Locality sensitive hashing (LSH)という技術であり、元々距離が近いインスタンス同士はハッシュ値が近くなるようにハッシュ関数を作ることで高速に類似度を計算したりできるというお話なのだが、最近 Semantic hashing や Spectral hashing、また Kernelized LSH という手法が登場して盛り上がりつつあるところ、同じグループの人がもっといいのを出しました、ということらしい。ちなみに情報推薦とか画像検索とか大規模クラスタリングとか、いろいろな分野で高速な類似度計算の応用例がある。 そういうわけで、今日は manab-ki くんが Brian Kulis and Trevor Darrell. "Learning to Hash with Binary Reconstructive

    Learning to Hash! 最新 Locality sensitive hashing 事情 - 武蔵野日記
  • 乱数の取り扱いについて注意したいポイント | _level0 - KAYAC Front Engineer Blog

    どうも、こんばんは。taroです。 今回はゲーム等でしばしば登場する乱数についてのお話をします。 乱数というと確率論の中の一分野なのですが、これが意外と難しいです。 難しいからと言ってほっておくと、この分布の確率モデルはどうでといって積分記号を何個もつけた 式を書き付けてしまいかねないので辞めにします。 今確率モデルという言葉を出しましたが、確率を計算することとモデルを作ることはほぼ同じです。 いきなりムツカシイ言葉遣いでなんのことだかさっぱりかもしれませんが、 例えば、宇宙人が存在する確率ってどれ位でしょうか? 「居るか、居ないかの2通りだから、1/2だね」なんていうと、信じる人も居るかもしれません。 これはあるモデルでは正しいです。つまり、「居る」・「居ない」という二つしかなく、また「この二つが 同様の確からしさである」ということです。ちょっと言葉遊びみたいですが、これを侮ってはいけま

    乱数の取り扱いについて注意したいポイント | _level0 - KAYAC Front Engineer Blog
  • The C10K problem

    [Help save the best Linux news source on the web -- subscribe to Linux Weekly News!] It's time for web servers to handle ten thousand clients simultaneously, don't you think? After all, the web is a big place now. And computers are big, too. You can buy a 1000MHz machine with 2 gigabytes of RAM and an 1000Mbit/sec Ethernet card for $1200 or so. Let's see - at 20000 clients, that's 50KHz, 100Kbytes