タグ

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

  • 関連タグはありません

タグの絞り込みを解除

AlgorithmとALgorithmとProgrammingに関するagwのブックマーク (1,893)

  • 単純ベイズ分類器 - Wikipedia

    単純ベイズ分類器(たんじゅんベイズぶんるいき、英: Naive Bayes classifier)は、単純な確率的分類器である。 単純ベイズ分類器の元となる確率モデルは強い(単純な)独立性仮定と共にベイズの定理を適用することに基づいており、より正確に言えば「独立特徴モデル; independent feature model」と呼ぶべきものである。 確率モデルの性質に基づいて、単純ベイズ分類器は教師あり学習の設定で効率的に訓練可能である。多くの実用例では、単純ベイズ分類器のパラメータ推定には最尤法が使われる。つまり、単純ベイズ分類器を使用するにあたって、ベイズ確率やその他のベイズ的手法を使う必要はない。 設計も仮定も非常に単純であるにもかかわらず、単純ベイズ分類器は複雑な実世界の状況において、期待よりもずっとうまく働く。近頃、ベイズ分類問題の注意深い解析によって、単純ベイズ分類器の効率性に

  • 基数ソート

    public void sort(int[] a){ // バケツに入っているデータ数を覚えるための配列です int[] bn=new int[bucket.length]; // 最下位桁の数字を見て、対応するバケツにデータを入れます。 for(int i=0;i<a.length;i++){ bucket[a[i]%m].add(new Integer(a[i])); notifier.notify(i,-1); } // 最初のバケツから順番にデータを取りだし、データの指定桁の値を見て、 // 対応するバケツにデータを追加します。 for(int j=1;j<k;j++){ // 現在、それぞれのバケツに何個のデータが入っているかを // 覚えておきます。 for(int b=0;b<bucket.length;b++) bn[b]=bucket[b].num; // 各バケツの先頭

  • 基数ソート - Wikipedia

    基数ソート(きすうソート、英: radix sort)は、「比較によらないソート」[1]のアルゴリズムの一つで、位取り記数法で表現可能な対象について、下の桁から順番にソートしてゆき、最後に最上位桁でソートすると、全体が順序通りに並ぶ、という手法である。 nをデータの数、kを桁数として、計算量のオーダーはO(nk)である。また、アルゴリズム自身の性質により、素直な実装が安定ソートになる。[2] このアルゴリズムは、データの種類が有限で、最大値・最小値がはっきりしているという仮定を置いており、全ての入力データが「3桁の整数」や「2文字のアルファベット」など決まった形式であることが分かっていなければならない。なおそれに加え、ある値のデータが必ず一つしか現れないとか、同じ値のデータは同一のものとしてしまって良い、といった場合には、もはやソートするのではなく、単純に、全体が入る大きさの配列を用意し、

  • バケットソート

    バケットソートとは、別名バケツソートとも呼ばれ、あらかじめ順番通り並べて準備されたバケツに、データを放り込むことで並べ替えを行おうという、いささか乱暴なソートアルゴリズムです。 この方法は、データの存在する範囲が有限個に限定されていないと使えませんが、使える場合は非常に高速に並べ替えを実行できる、きわめて有用なアルゴリズムです。 1~100までの数字が書かれたたくさんのカードがあるとします。カードに書かれている数字には重複があっても構いません。また、最初、カードはばらばらに混ざっています。 これらのカードを、数字が小さい順に並べ替えるのに、バケットソートでは、1~100までの数字が横に書かれている100個のバケツを準備します。 そして、カードを適当に取り出して、その番号と一致するバケツに放り込みます。また、別なカードを取り出しては、対応するバケツに放り込みます。 これをカードがなくなるまで

  • バケットソート - Wikipedia

    バケットソート(英: bucket sort)は、ソートのアルゴリズムの一つ。バケツソート、ビンソート(英: bin sort)などともいう。バケツ数 k 個使った場合、オーダーはO(n + k)となり、ソートする要素数nとk を無関係にできる場合線形時間ソートとなるが、要素間の全順序関係を用いるソートとは異なり、キーの取りうる値がk種類である、という入力により強い制限を要求するソートである。 バケットソートの概念 整列したいデータの取りうる値がm種類であるとき、m個のバケツを用意しておき、値ごとに1個のバケツを対応づける。元のデータ列を走査して、各データを対応するバケツに入れていく。この処理が終わった後、整列したい順序に従ってバケツから値を取り出せば、データをソートすることができる。 安定ソートを実現するためには、同じバケツに入っているデータは入れたときと同じ順序で取り出す必要がある。順

    バケットソート - Wikipedia
  • レコメンデーションとエディットグラフ

    レコメンデーションとエディットグラフ:コーディングに役立つ! アルゴリズムの基(10)(1/4 ページ) プログラマたるものアルゴリズムとデータ構造は知っていて当然の知識です。しかし、教科書的な知識しか知らなくて、実践的なプログラミングに役立てることができるでしょうか(編集部) 実際のアプリケーションで使われるアルゴリズム これまで見てきたアルゴリズムは、実際のアプリケーション開発の際にそのまま使われることはあまりなく、プログラム言語やライブラリなどですでに機能が用意されているものが大半でした。 今回は最終回ということで、実際のアプリケーション開発でそのまま使えるものを紹介したいと思います。 レコメンデーション ECサイトで、「あなたにお勧めの商品」を表示していることがあります。いろいろなデータベースや行動履歴のデータから、その人ごとにお勧めの商品をはじき出して推薦する機能をレコメンデー

    レコメンデーションとエディットグラフ
  • 1時間でわからせたコンシステントハッシュで仮想ノードが必要な理由 - 西尾泰和のはてなダイアリー

    ConsistentHashing - コンシステント・ハッシュ法 とあるチャットで聞かれて図まで書いて解説したのでもったいないからエントリー化。ちなみにチャットが1時間弱だったのでこういうタイトルにした。 で、Bが消えるとBの責任範囲が全部Dに押し付けられてDがかわいそうでしょ。 Dの仕事が増えるでしょ。Cとか暇そうじゃん!サーバを複数用意しているメリットが薄れてる。みんなが同じくらい働くのが望ましい。 で、Bが1個の点で表現されているから「Bの手前」もDの1個だけで、そのせいで全部Dが引き受けるはめになった。つまり、仕事が細かく分割されてなくて1個の塊だから引き継ぐ人も1人だけで引き継いだ人涙目。あらかじめ仕事を100分割しとけばみんなで分担して肩代わりできて幸せだよね。 だからサーバが5個だけど点は5個じゃなくて500個打とう。それが仮想ノード。 実装はどうするの?という質問に対して

    1時間でわからせたコンシステントハッシュで仮想ノードが必要な理由 - 西尾泰和のはてなダイアリー
  • Canonical Huffman Codes - naoyaのはてなダイアリー

    1999年出版と少し古い書籍ですが Managing Gigabytes を読んでいます。理解のために 2.3 で出て来る Canonical Huffman Codes の習作を作りました。 ハフマン符号は情報圧縮で利用される古典的なアルゴリズムで、圧縮対象データに出現するシンボルの出現確率が分かっているときに、その各シンボルに最適な符号長の接頭語符号を求めるものです。 通常のハフマン符号はポインタで結ばれたハフマン木を構築して、ツリーを辿りながら各シンボルに対する接頭語符号を計算します。このハフマン木には曖昧な箇所が残されています。ハフマン木は木の辺を右に辿るか左に辿るかで符号のビットが決まりますが、右が 0 で左が 1 などというのはどちらでも良いという点です。(曖昧だから駄目、という話ではありません。) 従って、ハフマン木から生成される符号は一意には決まりません。 ここで各シンボル

    Canonical Huffman Codes - naoyaのはてなダイアリー
  • グラフ理論のサイトと書籍のご紹介 - salmonsnareの日記

    はじめに [更新: 2013/4/22]いくつか更新しました。 [/更新] §1では、グラフ理論のWWW上の資料で「これは良かった。役に立った。」と思えるものをご紹介します。 どちらかというと、グラフアルゴリズムより数学としてのグラフ理論を意識した資料を選びました。 §2では、グラフアルゴリズム等を含むより専門的な書籍をご紹介します。 1. グラフ理論のサイト Reinhard Diestel, Graph Theory Electronic Edition http://diestel-graph-theory.com/basic.html ディーステル先生のグラフ理論のテキストのpdf版です。基礎から応用まで丁寧に書いてあります。 応用についてはほとんど書かれておりませんが、その分数学的な色彩が強いです。 目次 1. The Basics: グラフの基礎です。次数やパス等の基的な定

    グラフ理論のサイトと書籍のご紹介 - salmonsnareの日記
  • In-place algorithm - Wikipedia

  • Tail call - Wikipedia

    In computer science, a tail call is a subroutine call performed as the final action of a procedure.[1] If the target of a tail is the same subroutine, the subroutine is said to be tail recursive, which is a special case of direct recursion. Tail recursion (or tail-end recursion) is particularly useful, and is often easy to optimize in implementations. Tail calls can be implemented without adding a

  • コサイン距離ベースのLSHをRubyで - &lt;s&gt;gnarl,&lt;/s&gt;技術メモ”’&lt;marquee&gt;&lt;textarea&gt;¥

    参考文献:Web+DB press vol.49 レコメンド特集のPart3など。 アルゴリズムの概要 詳細(特に数学的な)はぐぐれ。 モチベーションとしては、高次元における近傍点探索を高速で行いたい。まじめにやるとどう工夫しても計算量がすごいことになるので、近似で。 どうするかというと、「距離が近いと同じような値になるハッシュ関数」を使う。あるベクトルの近傍を求めたい場合、そのベクトルのハッシュと同じ(もしくは近い)値のハッシュを持つベクトルをテーブルから引いてきて返す。計算量がどうなるかはややこしいけど、とりあえず全部探すよりは速い。 で、どういう関数をハッシュとするのか。これは距離の定義によって異なる。ハミング距離、コサイン距離、ユークリッド距離などにはそういった関数の存在が知られている。 コサイン距離の場合、ランダムなベクトルをいくつか用意して、入力されたベクトルがそれらと似ている

    コサイン距離ベースのLSHをRubyで - &lt;s&gt;gnarl,&lt;/s&gt;技術メモ”’&lt;marquee&gt;&lt;textarea&gt;¥
  • 分布推定アルゴリズム - yukobaのブログ

    分布推定アルゴリズム。遺伝的アルゴリズムを改良した物です。個体の集合を交叉・突然変異させるのではなく、個体の生成確率を進化させます。最適化問題のアルゴリズムです。以下、自分へのメモです。わかったことが増えたら追記するかも。 ビットストリング 計算量に関しては、ビット数をn、反復数をTとしています。 Population-Based Incremental Learning (PBIL) http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.61.8554 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.5424 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.43.1108 Population-ba

    分布推定アルゴリズム - yukobaのブログ
  • K-means法によるクラスタリングのスマートな初期値選択を行うK-means++ - kaisehのブログ

    K-means法は、入力データからK個のランダムな個体を初期クラスタの中心として選択し、以降、クラスタの重心を移動させるステップを繰り返すことでクラスタリングを行う非階層的手法です。K-means法はシンプルで高速ですが、初期値依存が大きいのが弱点で、不適切な初期値選択をすると間違った解に収束してしまいます。 以下は、Introduction to Information Retrievalの16章に出てくる例です。 {d1, d2, ..., d6}をK=2でクラスタリングする場合、{{d1, d2, d4, d5}, {d3, d6}}が大域最適解ですが、初期クラスタの中心をd2, d5で与えると、{{d1, d2, d3}, {d4, d5, d6}}という誤った解に収束してしまいます。 この問題を改善するK-means++という手法を見つけたので、試してみました。 K-means+

    K-means法によるクラスタリングのスマートな初期値選択を行うK-means++ - kaisehのブログ
    agw
    agw 2009/05/08
    K-means++法について。
  • お手軽に強い将棋プログラムを作る10の方法 - aki.の日記 (2009-02-19)

    地元と文化活動の思い出(地元でのライブの思い出) 美術手帖の編集長が帰省中に『巨大なイオンモールだけが煌々と明るい地方都市に帰省すると、美術の「美」の字も見つけられないと』ツイートしたことが炎上していた。 調べるとどうやら編集長は私の地元・伊賀市のすぐ近くの鈴鹿市出身らしい。 鈴鹿の事情はあまり知ら…

    お手軽に強い将棋プログラムを作る10の方法 - aki.の日記 (2009-02-19)
  • asahi.com(朝日新聞社):でるかコンピューター名人 囲碁に確率重視の「モンテカルロ法」 - 囲碁

    人間に勝つのは、はるか未来の話と思われてきたコンピューター囲碁の世界が、画期的なプログラムの登場で大変革期を迎えている。確率(勝率)を重視した「モンテカルロ法」の採用で棋力が急上昇。「将棋よりも先に、囲碁の名人がコンピューターに敗れるかも」と大胆な予想をするプログラマーもいる。 ●すでに「アマ三段以上」  06年にイタリアで開催されたコンピューター・オリンピアードで、モンテカルロ法を使ったフランスのプログラム「CrazyStone」が優勝(9路盤部門)し、コンピューター囲碁界に衝撃を与えた。19路盤でも「世界最強」の呼び声は高く、東京で開かれているコンピューター大会UEC杯で、07、08年に連続優勝。昨年は青葉かおり四段に7子局で完勝し、解説にあたった鄭銘●(●は王へんに皇)九段は「アマ三段以上はあるかも」と絶賛した。  従来のプログラムは「一間トビ」「ケイマ」などの「知識」を大量に覚えさ

  • Flash-Based DBMSの最前線

    フラッシュメモリーを使ったSolid State Drive (SSD)の容量が160GBに到達し、市場価格も下がってきたことにより、ハードディスクの代替品としてSSDを使う用途がいよいよ現実味を帯びてきました。低容量のものなら既にiPodやデジカメ用のメディアなど身の回りにも普及しており、市場ではすでに「破壊的イノベーション(「イノベーションのジレンマ―技術革新が巨大企業を滅ぼすとき」より)」が起こっているといえます。(HDD搭載のWalkmanとか既に滅んでいる例もあるし。。。)

    Flash-Based DBMSの最前線
  • B木 - naoyaのはてなダイアリー

    昨年から続いているアルゴリズムイントロダクション輪講も、早いもので次は18章です。18章のテーマはB木(B Tree, Bツリー) です。B木はマルチウェイ平衡木(多分木による平衡木)で、データベースやファイルシステムなどでも良く使われる重要なデータ構造です。B木は一つの木の頂点にぶら下がる枝の数の下限と上限を設けた上、常に平衡木であることを制約としたデータ構造になります。 輪講の予習がてら、B木を Python で実装してみました。ソースコードを最後に掲載します。以下は B木に関する考察です。 B木がなぜ重要なのか B木が重要なのは、B木(の変種であるB+木*1など)が二次記憶装置上で効率良く操作できるように設計されたデータ構造だからです。データベースを利用するウェブアプリケーションなど、二次記憶(ハードディスク)上の大量のデータを扱うソフトウェアを運用した経験がある方なら、いかにディ

    B木 - naoyaのはてなダイアリー
  • SSD がコモディティになっても状況はかわらない - kazuhoのメモ置き場

    脊髄反射。 OracleMySQL など近年の RDBMS はインデックスのデータ構造にB木 (の変種) を採用していますが、その理由はここにあります。 SSD がコモディティになると状況は変わる (中略) 二次記憶上での検索用のインデックスにはこれまで B木のようなディスクに最適なデータ構造が必然的に選択されてきましたが、SSD に変わると、現実的に利用可能なデータ構造にも幅が出て、アプリケーションによっては劇的な改善が可能になるというわけです。 この先 SSD の普及によって、色々なソフトウェアで、驚くような改善が行われる機会を目にすることが多くなるのではないかと思います。その時、単に SSD に変わったから速くなったと捉えるのではなく、どのようなデータ構造が選択されて、そのデータ構造の特性が SSD とどのようにマッチしたのかという視点で見ていくことが大切ではないかと思います。

    SSD がコモディティになっても状況はかわらない - kazuhoのメモ置き場
  • 第6回 はてなブックマークの可視化(後編) | gihyo.jp

    はじめに 最終回となる今回は、これまでの学習内容のまとめとして、はてなブックマークの人気エントリーをツリーマップとして可視化します。 この可視化では、ノードの表示位置によってブックマークのカテゴリ特性を、ノードの大きさによってブックマーク数を、そして色によってブックマークの「コメント率」を、それぞれ視覚的に表現します。 ソースコードのダウンロード 今回作成するプログラムのソースコードは、こちらから一括してダウンロードすることができます。ZIPファイルを展開して生成されるフォルダを、プロジェクトとしてNetBeansに読み込むことも可能です。 特徴量ベクトルの生成 前回のプログラムでは、はてなブックマークにユーザーが付与したタグの一覧を収集しました。このタグ情報を特徴量ベクトルに変換し、第2回で作成したMultiVectorクラスのインスタンスとして表現することを考えます。 このとき問題とな

    第6回 はてなブックマークの可視化(後編) | gihyo.jp