タグ

algorithmに関するyokochieのブックマーク (184)

  • 開発メモ: Kyoto Cabinetのロック機構の改善

    Kyoto CabinetはIO負荷が高い場合にCPU負荷も高くなりがちだという指摘を受けて、それを解決すべくロック機構を見直したという話。 スロットロック ハッシュテーブルの操作はハッシュバケット毎に完全に独立して実行できるのが強みだ。ハッシュテーブルは計算量が有利なだけでなく、並列性にも優れるということ。実際には下層のファイルIOで実装依存の排他制御が行われることになるが、ハッシュ層だけ見れば理想的な並列性を備えている。ただし、同じバケットに連なるレコード群の操作は互いに依存関係があるので、それらは一括して排他制御してやる必要がある。となると、バケット毎にロックを用意するのが理想だが、実際にはメモリを節約するために、予め決めた数のロックを用意して、ここのロックに複数のバケットを割り当てる構成をとる。リソース空間をスロットに分けるというイメージから、これをスロットロックと呼ぼう。 スロッ

  • The Learning Behind Gmail Priority Inbox読んだメモ - 糞糞糞ネット弁慶

    The Learning Behind Gmail Priority Inbox(pdf) GmailにおけるPriority Inbox(日語だと優先トレイ)に関する論文(というよりもメモ書き)。 簡単なまとめ モデルはpassive-aggressive(PA-2) 分類というよりスコアとその閾値で判別 Feature Featureの量は多いがカテゴリ分類できる。 Social features : 送信者と受信者間の交流(例:送信者のメールの何割を受信者が読んだか) Content features : 受信者のメールに対する行動に対応するようなヘッダーや最近の単語?(recent term) Thread features : ユーザがそのスレッドを始めたかどうかみたいな情報 Label features : ユーザのフィルタによって付けられたラベルの情報を分析 これらfeat

    The Learning Behind Gmail Priority Inbox読んだメモ - 糞糞糞ネット弁慶
  • 独断と偏見によるノンパラ入門 - 木曜不足

    「ノンパラメトリック」って言うくらいだからパラメータ無いんかと思ってたら、パラメータめっちゃあるし。 機械学習のネーミングのひどさはこれに始まった話じゃあないけど、それにしたって。 ノンパラの一番素朴なやつ( K-means とか)は当にパラメータ無くてデータだけだから納得なんだけど、だんだん欲が出てパラメータ足しちゃったり派生させちゃったりしてるうちに、よくわかんなくなってきちゃったんだろうかねえ。まったく。 どれどれ、と英語Wikipedia の "Non-parametric statistics" を見たら、なんか意味が4種類くらい書いてあるし。じゃあ名前分けろよ。 en.wikipedia.org とりあえずここで言う「ノンパラ」とは、変数の個数決めなくていい「分布の分布」なメタっぽいやつのこと。つまりディリクレ過程とか、ディリクレ過程とか、そこらへん。 「あー、ノンパラベ

    独断と偏見によるノンパラ入門 - 木曜不足
  • Lock-free Stack - くまメモ

    ではLock-free Stackについて図とプログラムを交えながら説明します。C++ではなくCを使います。 これは複数スレッドからロックによる排他無しで共有できるスタックで、外部には node* top; void push(const T*, node** top); bool pop(T*, node** top); を提供します。*1 このスタックはbottomへと繋がる線形リストをベースとして動作するため、配列ベースのスタックにパフォーマンスで劣ることもあります。*2 その線形リストを構成するノードのデータ構造から見てみましょう。 struct node{ T data; node* next; }; ごく典型的な線形リストのノードと同じです。 道具の紹介 lock-freeデータ構造を構成する場合に頻出のCompare And Swap。 C言語の擬似コードで書くと以下のような

    Lock-free Stack - くまメモ
  • RJ のジャーナル - libketama - a consistent hashing algo for memcache clients | Last.fm

    2007年 04月 11日 水曜日 02:36 We wrote ketama to replace how our memcached clients mapped keys to servers. Previously, clients mapped keys->servers like this: server = serverlist; This meant that whenever we added or removed servers from the pool, everything hashed to different servers, which effectively wiped the entire cache. We add (and sometimes remove) servers from the memcached pool often enough t

    RJ のジャーナル - libketama - a consistent hashing algo for memcache clients | Last.fm
  • 平方根のアルゴリズム

    平方根である。sqrtである。私の数学知識は非常に乏しく、かろうじて平方根の何たるかを解するばかりであるが、ふと、平方根を計算するアルゴリズムが知りたくなった。理由は、constexprなsqrtを実装してみたくなったからだ。 日語では、いい情報がWeb上に存在しないので、ここに書いておく次第。この説明は、私のように数学の知識を持たない人間にも理解できるはずである。 ここで使うのは、バビロニア人の方法(Babylonian method)と呼ばれている、歴史あるアルゴリズムである。この方法は、手動でも、プログラミングでも、非常に簡単に計算できる、大変便利で汎用的なアルゴリズムである。しかも、速度もそれほど遅くない。 √Sに対して、 任意の正の整数を初期値X0と定める(できるだけ平方根に近い値が望ましい) Xn+1を、Xnと S / Xnの平均値とする(平均値は相加平均で求める) 必要な精

  • perlで高速な類似検索エンジンを構築できるようにしてみた - download_takeshi’s diary

    すみません。タイトルはやや釣り気味です。 類似検索エンジンというか、そのアイデア程度の話なんですが、以前から考えていた類似検索エンジン風のネタがあったので、ちょっとperlで書いてみたので、そいつを晒してみます。 Luigi   https://github.com/miki/Luigi 類似検索なのでLuigi。ルイージとか読みたい人はそう読んじゃっても良いです。(冷) 考え方と仕組み 類似文書の検索、となりますと一般的には超高次元での空間インデックスとかが必要になります。 昔からR-TreeやSR-Treeなど、いろいろと提案されていますが、より高次元になると「次元の呪い」によりパフォーマンスが出なくなる、なんて言われていますね。 そこで最近ではLSHに代表されるような、より高度な「近似」型のインデキシング手法が人気を集めているようです。 で、今回考えたLuigiも実は近似型のインデッ

    perlで高速な類似検索エンジンを構築できるようにしてみた - download_takeshi’s diary
  • 「第3回自然言語処理勉強会@東京」でCSAについて発表します - EchizenBlog-Zwei

    @nokunoさんの好意で「第3回自然言語処理勉強会@東京」でCompressed Suffix Arrayについて発表させていただくことになりました。 つきましては参考のため発表資料を以下に置いておきます。参加される方はもちろん、興味のある方はご覧になっていただけるとうれしいです。 第3回自然言語処理勉強会@東京 : ATND 第3回自然言語処理勉強会@東京を開催します - nokunoの日記 なお資料は以下の皆様のアドバイスを頂きました。ありがとうございました(とくに@overlastさんには4-5時間もお付き合い頂きました。おかげさまでスライドの質が大幅アップしました。感謝)。 @overlastさん @tamago_donburiさん @tsubosakaさん @machyさん

    「第3回自然言語処理勉強会@東京」でCSAについて発表します - EchizenBlog-Zwei
  • 美しすぎるプログラムを解読せよの巻 - やねうらおブログ(移転しました)

    #include <iostream> #include <cstring> using namespace std; long long dp[18][4][4][4][4][4][4][4][4][4][4]; #define FORN( n ) for ( int i##n = 0; i##n < 4; i##n ++ ) int main() { memset( dp, 0, sizeof( dp ) ); FORN( 0 ) FORN( 1 ) FORN( 2 ) FORN( 3 ) FORN( 4 ) FORN( 5 ) FORN( 6 ) FORN( 7 ) FORN( 8 ) FORN( 9 ) dp[0][i0][i1][i2][i3][i4][i5][i6][i7][i8][i9] = 1; for ( int r = 1; r <= 17; r ++ ) { FORN

    美しすぎるプログラムを解読せよの巻 - やねうらおブログ(移転しました)
  • http://atnd.org/events/8207

    http://atnd.org/events/8207
    yokochie
    yokochie 2010/09/24
    この日はいけないなぁ。。。
  • Consistent Hashing を試す

    Consistent Hashing は、 複数のノードにレコードを分散させる方法として、 Amazon Dynamo や Cache::Memcached::Fast などで使われているアルゴリズムです。 この文章では、Perl で実際に Consistent Hashing を実装し、 その特徴を理解することを目的とします。 更新履歴 2008-06-01: 公開 サーバー台数で割った余り (mod) を使用する まず Consistent Hashing と比較するために、レコードに対して整数のハッシュ値を求め、 ハッシュ値をノード数で割った余り (mod) で、ノードを選択するという方法を書いてみます。 ここでは、ハッシュ値の算出に CRC (Cyclic Redundancy Check) を使用しています。 use strict; use String::CRC; use Pe

  • [VM][JIT]Brainf*ckで学ぶスクリプト言語処理系高速化。インタプリタ→VMインタプリタ→JITコンパイラ。 - hogelogの日記

    スクリプト言語処理系を高速化したくてしたくてたまらない少年少女に届け。表題の通りスクリプト言語処理系の高速化について書きます。対象言語はBrainf*ckにします。Brainf*ckというのは Brainf*ck Brainfuck - Wikipedia というような言語です。要は処理系を実装するのが簡単なおもちゃ言語。おもちゃ言語ゆえに他のどんな実用的スクリプト言語処理系にも出てくるような基的な処理だけでできているので、Brainf*ck処理系の高速化で有用なテクニックは他の処理系でもうんたらかんたら。 じゃあまず叩き台になるような処理系を書いてみましょう。言語はC++です。JavaだのPythonだので高速な処理系を記述するテクニックやらなんやらというのもありますけども、まずはごく簡単にCPUやらメモリといったものと仲の良い言語で記述することで理解を深めましょう。当はC言語の方が

    [VM][JIT]Brainf*ckで学ぶスクリプト言語処理系高速化。インタプリタ→VMインタプリタ→JITコンパイラ。 - hogelogの日記
  • javascript - Mathを再発明してみた : 404 Blog Not Found

    2010年09月14日06:30 カテゴリMathLightweight Languages javascript - Mathを再発明してみた 「基というからには四則演算で三角関数実装しないとねー」と思いつつ書いていたら… C言語による最新アルゴリズム事典 奥村晴彦 [javascript]三角関数の基 Math.random()を除いてMathを全部再発明しおえたので。 多倍長演算バージョンを作る時の下ごしらえにもなるかも。 下ごしらえ 仕様は Math - MDC アンチョコはもはや最新というにはあまりに古い、しかし代わりなき「C言語による最新アルゴリズム事典」。低レベルな車輪を再発明する人必携! 初期化と定数 定数の精度はおおげさに。 MyMath = {}; MyMath.E = 2.718281828459045235360287471352662497757; MyMat

    javascript - Mathを再発明してみた : 404 Blog Not Found
  • http://atnd.org/events/7828

    http://atnd.org/events/7828
  • 行列分解ライブラリredsvdを公開しました - DO++

    大規模疎行列向けの行列分解ライブラリredsvdを公開しました. redsvd 大規模疎行列向けの特異値分解や主成分分析,固有値分解を行うライブラリredsvdを公開しました. 修正BSDライセンスで公開しており,コマンドラインから使える他,C++ライブラリが用意されています. 例えば,行と列数がそれぞれ10万,非零の要素が1000万からなる疎行列に対する上位20位までの特異値分解を約2秒で処理します. 特異値分解とか,使っている技術の詳細とか応用事例を以下に簡単に紹介しましたので,興味のある方は参考にしてください. 特異値分解とは まず行列を適当に復習します.行列Xの転置をX^tと表すことにします.またIを単位行列とし,Oを全ての成分が0である零行列とします.また,行列XX^t=IであるようなXを直交行列と呼びます.Xが直交行列の時,Xvはベクトルvを長さを変えずに回転させます.ここでは

    行列分解ライブラリredsvdを公開しました - DO++
  • 定兼 邦彦 (Kunihiko Sadakane) - 圧縮接尾辞配列ライブラリ - researchmap

    文字列を圧縮したまま検索するライブラリです. 文字列の一部を高速に復元することもできます. 圧縮接尾辞配列ライブラリ (2010-08-10版) Direct BWT construction External Memory BWT construction http://code.google.com/p/csalib/ にもあります. 注意: dbwt100717.zipにはバグがありました.Ubuntuでは動かない可能性が高いです. dbwt100730.zipを使ってください. 索引とは,の索引と同じ意味で,検索を高速に行うためのデータのことです. ただし,の索引では代表的な言葉のみが登録されていますが,このライブラリの索引は 任意の語が検索できるようになっています. このライブラリの索引は自己索引 (self-index) と呼ばれるもので,索引自体に 元のファイルの情報を全

  • - MYCOM BOOKS - プログラミングコンテストチャレンジブック

    ■内容紹介 現在、プログラミングコンテストは数多く開催されています。Google Code Jam、TopCoder、ACM/ICPCなどの名前を聞いたことがある人も少なくないでしょう。書で扱うのはそれらのような、問題を正確にできるだけ多く解くことを競うプログラミングコンテストです。 プログラミングコンテストは気軽に参加することができます。例えば、Google Code JamやTopCoderはインターネット経由でコンテストが行われるので、Webサイトでの登録を済ませ、決まった時間にコンピュータの前に居れば参加することができます。 しかし、プログラミングコンテストの世界は非常に奥が深く、経験を積んだプログラマーであっても良い成績を残すことは容易ではありません。プログラミングコンテストで勝つには、柔軟な発想力と幅広い知識を用いて問題を解くアルゴリズムを考え、それらを正確に実装しデバッ

  • 【レポート】GNU grepが高速な理由 | エンタープライズ | マイコミジャーナル

    FreeBSD - The Power To Serve why GNU grep is fast (なぜGNU grepは高速なのか)といったタイトルの興味深いメールがFreeBSD開発者メーリングリストに投函された。メールを出したのはGNU grepのオリジナル開発者であるMike Haertel氏。Mike Haertel氏はFreeBSDユーザでもあり、FreeBSD開発者メーリングリストで興味深いやりとりがあったため、このメールを流したとしている。Mike Haertel氏の紹介する内容はgrep(1)の実装のみならず、高速な文字列処理を実現するひとつの方法として参考になる。紹介されているGNU grep高速さの秘訣は次のとおり。 GNU grepは入力バイトのすべてをチェックするようなことは避けている。 GNU grepはバイトごとに適用する操作を極力最小限に減らしている。 G

  • 開発メモ: KCで各種圧縮アルゴリズムを使う

    QDBMでもTCでも各種の圧縮アルゴリズムをDBに適用できるようにしているが、KCでも任意の圧縮アルゴリズムを後付けで組み込んで利用できるようになっている。その使い方と性能について紹介する。 圧縮アルゴリズムのプラグイン CacheDB、GrassDB、HashDB、TreeDB、DirDB、ForestDBのいずれも、tune_optionsおよびtune_compressorの2つのメソッドがある。tune_options(BasicDB::TCOMPRESS) とするとデータベースの圧縮が有効になり、デフォルトではZLIBの生フォーマットが適用されるようになる。任意の圧縮アルゴリズムを適用するには、さらにtune_compressorでCompressorクラスを継承して作った派生クラスのオブジェクトを登録する。Compressorクラスはcompressメソッドとdecompres

  • データ圧縮法概説 目次

    最終更新日:2001年7月2日 第1章へ webmaster@snap-tck.com Copyleft (C) 2000 SNAP(Sugimoto Norio Art Production)