タグ

algorithmに関するhide_o_55のブックマーク (99)

  • ウェーブレット木の効率的で簡単な実装 "The Wavelet Matrix" - EchizenBlog-Zwei

    久しぶりに論文を読んだ。 http://www.dcc.uchile.cl/~gnavarro/publ.html The Wavelet Matrix Claude & Navarro; SPIRE2012 "The Wavelet Matrix"はSPIRE2012のNavarro無双のうちの一。タイトルからするとウェーブレット木の拡張のように思える。 機能としてはウェーブレット木と同一でデータ列に対するaccess,rank,selectを提供する。しかし実装は既存手法と比べて効率的でしかも簡単になっている。 これまでにウェーブレット木の実装としてはノードをポインタでつないだ普通の木として実装する方法(Standard Wavelet Tree. 論文のAlgorithm 1)と、木の階層ごとにノードをつなげた配列で表現する方法(Levelwise Wavelet Tree. 論文

    ウェーブレット木の効率的で簡単な実装 "The Wavelet Matrix" - EchizenBlog-Zwei
  • Island Life - Unbounded spigot algorithm

    Unbounded spigot algorithm ふとしたきっかけでπなどの値を「頭から順番に」求めるSpigotアルゴリズムを 見直していたら、「メモリの許す限り順番に値を計算し続ける」アルゴリズムを示した 論文を見つけた。 Jeremy Gibbons, Unbounded Spigot Algorithms for the Digits of Pi よくあるspigotアルゴリズムは計算したい桁数を最初に決めてデータ構造を初期化する必要がある。Gaucheのexamples/spigotに入ってるのもそれ。 一方、こちらのアルゴリズムはあらかじめ精度を決めておく必要がない。 論文のコードはHaskellで書かれている。 piとpiLは使っている級数の違い。後者の方が生成が速い。論文には他にもう一種類出ている。 実行例。結果は無限数列で返ってくるので欲しいところまで取れば良い。 *

    Island Life - Unbounded spigot algorithm
  • プログラミングコンテストでの乱択アルゴリズム

    2013/1/9に統数研チャンネルにて、ウェーブレット木の解説をしました。岩波書店より出版されました「高速文字列解析の世界」の解説になっています。

    プログラミングコンテストでの乱択アルゴリズム
  • 平方根を使わずに高速で2点間の距離を近似する - きしだのHatena

    2点間の距離の計算では平方根が必要になりますが、平方根は少し重い計算です。ということで、平方根を使わず、掛け算・割り算・足し算と絶対値・最大・最小だけで距離を近似する方法についての記事を翻訳してみました。 flipcode - Fast Approximate Distance Functions (12:02 補足:おそらく今の標準的なCPUでやる意味はほとんどないと思います。近似のアプローチとして面白いというくらいの話。Z80でやりましょう) 距離関数高速近似 by Rafael Baptista (27 June 2003) 2点間のユークリッド距離を求める計算式は次のようになる。 二次元では次のようになる。 この関数の計算には、平方根が必要になる。これは最近のコンピュータでも高価な計算である。平方根は逐次近似によって求められる。つまり、コンピュータは平方根近似のループを行って、与え

    平方根を使わずに高速で2点間の距離を近似する - きしだのHatena
  • 指数時間アルゴリズム - てきとーな日記

    指数時間アルゴリズムというのは,NP困難問題を頑張って指数時間かけて解くアルゴリズムのことで,できるだけ指数の底の小さいアルゴリズムを開発することが目指されています. コンテスト界では部分和問題の半分全列挙による2^(n/2)時間アルゴリズムなどが特に有名だと思います. この分野は近年盛んに研究され始め,自分も大学でこの分野を中心に研究をしています. 今回,情報オリンピック春合宿講義とPFIセミナーで発表する機会があったので,この分野の基礎的な手法から最先端の手法までをまとめてみました. 指数時間アルゴリズム入門@情報オリンピック春合宿講義 http://www.slideshare.net/wata_orz/ss-12131479 指数時間アルゴリズムの最先端(キャンセリング)@PFIセミナー http://www.slideshare.net/wata_orz/ss-12208032

    指数時間アルゴリズム - てきとーな日記
  • Tumblr

    「JPEG Tilt」というページを公開しました。MotionJPEG Builder を作った時に、JPEG のヘッダを読み込む処理を作ったので(結局これは使わなかったんですが)圧縮データの読み込み部分も作ってみようか、という気になって作ったのがこれです。JPEG ファイルで画像が圧縮される様子を視覚的に表現する…… という目標だったのですが、どうでしょうか。まあ内容が内容なので説明無しではさすがに意味が分からないと思います。 ということで、JPEG Tilt の見方を以下で簡単に説明します。 図1は、JPEG Tilt の画面です。画像が iTunes の CoverFlow のように並んでいますが、これの左側は画像の低周波成分のみを抜き出した物で、右に行くとより高周波の成分も含めるように並んでいます(低周波、高周波という言葉の意味はこの先で出てきます) 画像の上にマウスカーソルを乗せ

    Tumblr
  • Story of Your Life » Blog Archive » Hopscotch Hashingを実装してみた

    動機 数年前Cuckoo Hashingも知らないの?と友人から信じられないという目で見られた経験から、いつかCuckoo Hashingを超えるアルゴリズムを実装してやるという(考案してやるという程は高くない)野望を持っていました。 そこで今回はHopscotch Hashingを実装してみました。 Herlihy, M., N. Shavit, and M. Tzafrir, “Hopscotch Hashing,” Proceedings of the 22nd International Symposium on Distributed Computing (DISC), pp. 350-364, Arcachon, France, September 2008. Hopscotch HashingはCuckoo Hashingと同様、定数時間での検索を可能にするハッシュテーブ

  • algorithm - 基数木 + 平衡二分探索木 = 三分探索木 : 404 Blog Not Found

    2012年01月22日16:36 カテゴリアルゴリズム百選翻訳/紹介 algorithm - 基数木 + 平衡二分探索木 = 三分探索木 珠玉のプログラミング Jon Bentley /小林健一郎訳 最有力候補は、これかも。 Ternary search tree - Wikipedia, the free encyclopedia 三分探索木 - Wikipedia 404 Blog Not Found:algorithm - Patricia Trie (Radix Trie) を JavaScript で最近のTrie研究の傾向は、要素の動的変更が自在にできる一般向けのものではなく、一旦作成したら要素の追加と削除が困難な代わりにものすごくコンパクトになる、簡潔データ構造の応用手段の方に偏っていると素人目に感じるのですが、そろそろJudyたんのごとくハッシュテーブルとガチで闘うとか、逆

    algorithm - 基数木 + 平衡二分探索木 = 三分探索木 : 404 Blog Not Found
  • Algorithm - 連想配列の実装としてのハッシュはオワコン? : 404 Blog Not Found

    2012年01月17日11:45 カテゴリアルゴリズム百選Tips Algorithm - 連想配列の実装としてのハッシュはオワコン? 珠玉のプログラミング Jon Bentley / 小林健一郎訳 つまり「終わったコンテナ」。 以前からうすぼんやりと考えて来た危惧が、すこしはっきりと見えてきた。 徳丸浩の日記: Webアプリケーションに対する広範なDoS攻撃手法(hashdos)の影響と対策 もうそろそろハッシュ(テーブル)以外の手段の連想配列の実装手段を格的に模索するべきではないか、と。 そのデータ構造は、君の魂を差し出すに足るものかい? 連想配列(Associative array)がコレクション(Collection)、すなわち数多のデータ構造をまとめるデータ構造としての覇者となったのはもはや疑いようがない事実でしょう「配列で実装されるデータ構造ではなくて、配列を実装するデータ構

    Algorithm - 連想配列の実装としてのハッシュはオワコン? : 404 Blog Not Found
  • Algorithm - Suffix Array を JavaScript で再発明してみた : 404 Blog Not Found

    2012年01月16日16:30 カテゴリアルゴリズム百選Lightweight Languages Algorithm - Suffix Array を JavaScript で再発明してみた WEB+DB 総集編 [Vol. 1〜60] もう10年以上前に某社のCTOだったころ、Suffix array(接尾辞配列)の解説を毎週の技術者ミーティングでしたら一名を除いて「ハァ?」状態だったことを思い出しつつ。 Suffix Arrayは何が画期的だったのか? 以下は、計算機科学者でなくても直感的に理解できると思います。 ソートされていない通常のデータの中にあるサブデータ(キー)を検索しようとすると、データの大きさに比例した時間(O(n))がかかる。 ソート済みのデータであれば、二分探索でデータの大きさの対数時間(O(logn))でキーを検索できる。 さらにキーからIDを定数時間で作成でき

    Algorithm - Suffix Array を JavaScript で再発明してみた : 404 Blog Not Found
  • 大規模グラフアルゴリズムの最先端 - iwiwiの日記

    昨日,PFI セミナーにて「大規模グラフアルゴリズムの最先端」というタイトルで発表をさせてもらいました.スライドは以下になります. 大規模グラフアルゴリズムの最先端 View more presentations from iwiwi 当日は Ustream もされており,録画された発表もご覧になれます. http://www.ustream.tv/recorded/19713623 内容の流れとしては,以下のようになっています. 導入 アルゴリズム界隈での話題 最新の研究動向 道路ネットワークでの最短路クエリ処理 基礎的な手法:双方向 Dijkstra,A*, ALT 最新の手法:Highway Dimension + Hub-Labeling Algorithm DB 界隈での話題 最新の研究動向 複雑ネットワークでの最短路クエリ処理 基礎的な手法:ランドマークを用いた最短距離推定 最

    大規模グラフアルゴリズムの最先端 - iwiwiの日記
  • quick sortよりも高速でmerge sortのように安定しているソートアルゴリズムtim sort [勘違い] - Islands in the byte stream

    <追記>ベンチマークプログラムに誤りがありました。ソート済のシーケンスに対してソートを掛けていました。ご指摘ありがとうございます>ak氏 そんな夢のようなソートアルゴリズムがあるのかというと、あるらしいんです。それがtim sortと呼ばれるアルゴリズムです。 画期的(?)なソートアルゴリズム「Sleep Sort」:濃縮還元オレンジニュース|gihyo.jp … 技術評論社 このあたりで拾ってきたネタですね。 merge sortを改良したアルゴリズムで、安定*1しており、しかも実行速度にも優れているとか。アルゴリズムの性能の評価は済んでいるらしく、CPythonやJDK7には既に導入済みのようですね。 ならば当然Perlのソートも…と考えるわけですが、まず評価のためにJavaのソースをC++にそのまま移植してみました。それがこれ(いちおうテスト済): https://github.co

    quick sortよりも高速でmerge sortのように安定しているソートアルゴリズムtim sort [勘違い] - Islands in the byte stream
  • クラウド時代の新しいソートアルゴリズムTask Queue Sortを発明しました. - kissrobberの日記

    Task Queue Sortは, Google App Engineの並列処理の仕組みTaskQueueを使ってソート処理を行う,クラウド時代の新しいソートアルゴリズムです. (クラウドソートとも言う) ネタ元 http://d.hatena.ne.jp/gfx/20110519/1305810786 http://www.yuyak.com/1339 http://togetter.com/li/137698 重要な仕様 ソートした結果のソート順は保証されない. たまにソート対象の要素が増える事がある. Java(slim3)での実装例 TaskQueueを投げる側 public class IndexController extends Controller { @Override public Navigation run() throws Exception { addToQue

    クラウド時代の新しいソートアルゴリズムTask Queue Sortを発明しました. - kissrobberの日記
  • 常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)

    TwitterのTLで知ったのだが、少し前に海外掲示板で"sleep sort"というソートアルゴリズムが発明され、公開されたようだ。このアルゴリズムが面白かったので紹介してみる。 Genius sorting algorithm: Sleep sort 1 Name: Anonymous : 2011-01-20 12:22 諸君!オレは天才かもしれない。このソートアルゴリズムをみてくれ。こいつをどう思う? #!/bin/bash function f() { sleep "$1" echo "$1" } while [ -n "$1" ] do f "$1" & shift done wait example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7 2 Name: Anonymous : 2011-01-20 12:27 >>1 なん…だと

    常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)
  • 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
  • 機械学習超入門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
  • 有名どころな機械学習手法の年表 - 木曜不足

    ちょっと機械学習の比較的有名なモデルやアルゴリズムの初出について年表を作ってみた。 って今週末用の資料なんだけどねw 1805 Method of Least Squares 1901 PCA (Principal Component Analysis) 1905 Random Walk -1925 Logistic Regression 1936 Fisher's Linear Discriminant Analysis 1946 Monte Carlo Method 1948 n-gram model 1950 RKHS (Reproducing Kernel Hilbert Space) 1950s Markov Decision Process -1957 Perceptron 1958 Kalman Filter 1960s Hidden Markov Model -1961 N

    有名どころな機械学習手法の年表 - 木曜不足
  • nabokov7; rehash : 意外に奥が深いシャッフルアルゴリズム

    October 25, 201014:30 カテゴリプログラミング 意外に奥が深いシャッフルアルゴリズム 前の記事に引き続き,ブログチームの「シャッフルのお時間」の話をします。 毎週の進捗ミーティングのあと,次の週の監視(レビュー)相手を決めるためにシャッフルを行うのですが,ここはプログラマ集団。くじ引きとかではなく,ワンライナーでさらっとシャッフルのプログラムなどを走らせて決めたいものですよね。 ということで,進捗ミーティングの最後はシャッフルのお時間と呼ばれ,誰かひとりがプロジェクタにつながったマシン上でライブコーディングをし,その出力結果によって次週の監視相手が決まる,という儀式の時間になりました。 シャッフルの基のきまりは以下の通りです。メンバー名の配列を入力とし,「見る人→見られる人」の組み合わせを出力するプログラムを書く。「自分自身を担当する人」が発生してはダメ。その場でコー