タグ

Algorithmとalgorithmに関するInoHiroのブックマーク (207)

  • ワーシャル–フロイド法 - Wikipedia

    ワーシャル–フロイド法の概略は以下の通りである: 入力: (有向または無向)グラフ の各辺の長さ 出力:頂点 と頂点 を結ぶ最短経路を全ての に対して出力 計算量: 簡単の為 上のグラフ のみを考える。 を 以下の整数とし、 とする。 の 各頂点 に対し、 を に制限したグラフ上での から への最短経路を とする。(経路が無い場合は 「なし」とする。) とし、 を に制限したグラフ上での から への最短経路を とする。 内での から への最短経路は、 を経由するか、あるいは 内にあるかのいずれかであるので、 次が成立することが分かる。ただしここで記号「」は「経路 を進んだ後に経路 を進む」という経路を表す。 : が より短い場合 : そうでない場合。 よって に対する最短経路 が全ての に対して分かっていれば、 に対する最短経路 が全ての に対して求まる。 ワーシャル–フロイド法は以上の考

    ワーシャル–フロイド法 - Wikipedia
  • COSC 072  Algorithm Analysis

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

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

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

    乱択アルゴリズム(らんたくアルゴリズム)、ランダム・アルゴリズム(英: randomized algorithm)または確率的アルゴリズム(かくりつてきアルゴリズム、(英: probabilistic algorithm)は、その論理の一部に無作為性を導入したアルゴリズムである。通常のアルゴリズムでは自然数を順番にあてはめるような決定的な部分で、乱数による非決定的な選択を入れることで、「平均的に」よい性能を実現することを目的とすることがある。形式的には、乱択アルゴリズムの性能はランダムビット列で決定される確率変数となる。その期待値を期待実行時間[1]と呼ぶ。最悪の場合に関して「無視できる」ほどに低い確率であることが、一般に、この類のアルゴリズムが効果的である要件となる。 n 個の要素からなる配列から「a」という要素を探す問題を考える。この配列の各要素は半分が「a」で残りが「b」である。単純

  • MapReduceできる10個のアルゴリズム - データサイエンティスト上がりのDX参謀・起業家

    HadoopとMahoutにより、ビッグデータでも機械学習を行うことができます。Mahoutで実装されている手法は、全て分散処理できるアルゴリズムということになります。Mahoutで実装されているアルゴリズムは、ここに列挙されています。論文としても、2006年に「Map-Reduce for Machine Learning on Multicore」としていくつかのアルゴリズムが紹介されています。 そこで今回は、(何番煎じか分かりませんが自分の理解のためにも)この論文で紹介されているアルゴリズムと、どうやって分散処理するのかを簡単にメモしておきたいと思います。計算するべき統計量が、summation form(足し算で表現できる形)になっているかどうかが、重要なポイントです。なってない場合は、”うまく”MapReduceの形にバラす必要があります。 ※例によって、間違いがあった場合は随時

    MapReduceできる10個のアルゴリズム - データサイエンティスト上がりのDX参謀・起業家
  • Ruby ショートショート

    Rubyショートショート このページは、僕が Ruby を使うためのメモ書きです。特に体系立てて Ruby の解説をしようという大それたことは考えていません。あくまでも僕の私的なメモです。基的に今の僕は、RubyCGI の制作に使いたいと思っているので、CGI 方面の記述が多くなると思います。 また、できる限り記述は正確にしたいと思っていますが、僕の理解不足で、間違った記述がある可能性があります。間違いに気づかれた方は、がらくた箱サポート掲示板かメールでご連絡いただけると、すごく嬉しいです。 目次 基 応用

  • 深さ優先探索(バックトラック法) - Wikipedia

    深さ優先探索のイメージ 深さ優先探索(ふかさゆうせんたんさく、英: depth-first search, DFS、バックトラック法ともいう)は、木やグラフを探索するためのアルゴリズムである。アルゴリズムは根から(グラフの場合はどのノードを根にするか決定する)始まり、バックトラックするまで可能な限り探索を行う。「縦型探索」とも呼ばれる。 形式的には、深さ優先探索は、探索対象となる木の最初のノードから、目的のノードが見つかるか子のないノードに行き着くまで、深く伸びていく探索である。その後はバックトラックして、最も近くの探索の終わっていないノードまで戻る。非再帰的な実装では、新しく見つかったノードはスタックに貯める。 深さ優先探索の空間計算量は幅優先探索の空間計算量より最悪のケースでは同じだが一般的なケースではずっと小さい。また、探索の種類によっては、分岐を選択するためのヒューリスティックな方

    深さ優先探索(バックトラック法) - Wikipedia
  • 赤黒木 - Wikipedia

    赤黒木(あかくろぎ)は、コンピュータ科学のデータ構造である平衡二分木の一種で、主に連想配列の実装に用いられている。2色木、レッド・ブラック・ツリーともいう。 このデータ構造は1972年のルドルフ・ベイヤー (en:Rudolf Bayer) の発明である"symmetric binary B-trees"が元となっており、赤黒木という名前自体は 1978年にレオニダス・ギッバス (en:Leonidas J. Guibas) とロバート・セジウィック (en:Robert Sedgewick) によって発表された論文による。 赤黒木は、探索、挿入、削除などの操作における最悪時間計算量がO(log n)(nは木の要素数)と短く、複雑ではあるが実用的なデータ構造として知られている。 この日語版は概要のみの解説であり、具体的なアルゴリズムはwikipedia英語版(Red-black_tree

    赤黒木 - Wikipedia
  • アルゴリズム for Ruby

    このページは、ソフトバンク パブリッシングから出版されている『プログラミングの宝箱 アルゴリズムとデータ構造』を読んでいるときに、せっかくなのでサンプルコードを Ruby で書き直した場合、どうなるんだろうと思いつつ作っています。 アルゴリズムに関する解説は特にしていませんので、参考書籍をご覧下さい。 また、内容には充分注意していますが、あくまでも僕の勉強メモになっているため、間違いや勘違いがあるかと思います。その点、ご了承いただければ幸いです。同時に間違いや勘違いを発見された方は、メールや掲示板でご指摘いただけると、すごく嬉しいです。 【参考書籍】 紀平拓男、春日伸弥 『プログラミングの宝箱 アルゴリズムとデータ構造』(ソフトバンク パブリッシング 2003) 参考URL:http://www.cmagazine.jp/books/takarabako/

  • ビタビアルゴリズム - Wikipedia

    ビタビアルゴリズム(英: Viterbi algorithm)は、観測された事象系列を結果として生じる隠された状態の最も尤もらしい並び(ビタビ経路と呼ぶ)を探す動的計画法アルゴリズムの一種であり、特に隠れマルコフモデルに基づいている。観測された事象系列の確率計算のアルゴリズムである 前向きアルゴリズム(英: forward algorithm)も密接に関連している。これらのアルゴリズムは情報理論の一部である。 このアルゴリズムには、いくつかの前提条件がある。まず、観測された事象と隠されている事象は1つの系列上に並んでいる。この系列は多くの場合時系列である。次に、これら2つの並びには一対一の対応があり、1つの観測された事象は正確に1つの隠されている事象に対応している。第三に、時点 での最も尤もらしい隠されている事象の計算は、 での観測された事象と での最も尤もらしい隠された事象の系列のみに依

  • ページランク - Wikipedia

    ページランク (PageRank) は、ウェブページの重要度を決定するためのアルゴリズムであり、検索エンジンのGoogleにおいて、検索語に対する適切な結果を得るために用いられている中心的な技術Googleの創設者のうちラリー・ペイジとセルゲイ・ブリンによって1998年に発明された[1][2]。名称の由来は、ウェブページの"ページ"とラリー・ペイジの姓をかけたものである。 PageRankはGoogleの商標であり、またPageRankの処理は特許が取得されている[3]。ただし、特許はGoogleではなくスタンフォード大学に帰属しており、Googleはスタンフォード大学から同特許の権利を独占的にライセンスされている。なお、同大学は特許の使用権と交換にGoogleから180万株を譲渡されているが、その株式は2005年に3億3,600万ドルで売却された[4][5]。 PageRankの動作概

  • Sign in - Google Accounts

  • 計算量(オーダー)<アルゴリズム<Web教材<木暮

    キーワード 計算量、オーダ、O、NP問題 計算量のイメージ アルゴリズムで重要なことは、少ない計算量(短い時間)で、解に達することです。 例えば、2x3+4x2+2x+5 を計算するのに、 2×x×x×x+4×x×x+2×x+5   ・・・A とすると、乗算の回数は6回になります。 この式を変形して、 (((2x+4)x+2)x)+5   ・・・B とすれば、乗算の回数は3回になります。 一般化して、n次式、 anxn+an-1xn-1+・・・+a1x+a0 をAのように計算するならば、乗算回数は (n+1)+n+・・・+1+0=n(n+1) =(1/2)n2+(1/2)n   ・・・C になります。また、Bの形式に変形して ((...(an×x+an-1)×x+an-1)×...)×x+a0 とすれば、乗算回数はn回になります。 ここで、乗算の回数を計算量の尺度にしたのは、加減算に比べて

  • アルゴリズムと計算量

    金庫破りと計算量膨張 n 桁の番号をもつ暗証ロックがあるとします。 2 桁であれば 00 〜 99 の 100 個の正解があるわけで、 0 番から順に入力していく解き方では、 最悪の場合は 100 手目に開きます。 99 が正解とは限らないので、平均的にはこれより早く解き終わります。 0 であるときの確率は 1/100 で、このときの手数は 1 手です。 1 であるときの確率は 1/100 で、このときの手数は 2 手です。 2 であるときの確率は 1/100 で、このときの手数は 3 手です。 3 であるときの確率は 1/100 で、このときの手数は 4 手です。 : 99 であるときの確率は 1/100 で、このときの手数は 100 手です。 つまり、平均手数は により、100 手目の約半分です。 ここでいう解き方をアルゴリズムといい、 問題を解くための手数 (てかず) のことを計算

  • 漸近計算量理論

    当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。 Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。 広告配信等の詳細については、プライバシーポリシーページに掲載しています。 消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。 参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

    漸近計算量理論
  • 計算複雑性理論 - Wikipedia

    計算複雑性理論(けいさんふくざつせいりろん、英: computational complexity theory)とは、計算機科学における計算理論の一分野であり、アルゴリズムのスケーラビリティや、特定の計算問題の解法の複雑性(計算問題の困難さ)などを数学的に扱う。計算量理論、計算の複雑さの理論、計算複雑度の理論ともいう。 「計算量」と「計算複雑性」はともに computational complexity に対応する語であるが、個々のアルゴリズムの効率に着目する文脈では「計算量」が広く用いられるのに対し、問題に内在する質的困難さを表す意識からは「複雑性」「複雑さ」が好まれる傾向がある。 計算複雑性理論は計算可能関数の計算の複雑さを扱う。計算理論のもう一つの重要な分野である計算可能性理論では問題の解法があるかどうかだけを扱い、その複雑さや必要とする計算資源量は問わない点が異なる。 具体的に

  • 線形探索 - Wikipedia

    (defun linear-search (list x) (dolist (e list) (when (equal e x) (return-from linear-search T))) ;found NIL) ;not found // For basic sequence: let find value (vs: seq<_>) = use e = vs.GetEnumerator() let rec ifind index = if e.MoveNext() then if e.Current = value then Some index else ifind (index + 1) else None ifind 0 // For list: let find2 value vl = let rec ifind2 index vl = if List.isEmpty vl

  • 分割統治法 - Wikipedia

    この項目では、アルゴリズムについて説明しています。政治歴史分野での分割統治については「分割統治」をご覧ください。 分割統治法(ぶんかつとうちほう、英: divide-and-conquer method)は、そのままでは解決できない大きな問題を小さな問題に分割し、その全てを解決することで、最終的に最初の問題全体を解決する、という問題解決の手法である。 分割統治法を擬似コードによって表現すると、以下のような再帰呼出しを使ったものとなる。また、分割統治法になっている何らかのアルゴリズムを実装すると、その基的な骨組みがこのようになる。 function conquer(x) is if xは簡単にconquerできる then return conquerの結果 else (x1, x2, ...) := divide(x) // 複数の小さな副問題に分割 (y1, y2, ...) :=

  • くさもち研究室生活ブログだったもの LSHまとめ(1)

    LSHは近似最近傍探索(Approximate Nearest Neighbor)アルゴリズムの一つ. 近似最近傍探索とは,簡単に言うとクエリqから半径(1+ε)内にある点vを探索すること. つまり,半径(1+ε)の点のうち,どれか1つでも探索できればおk. 言葉の意味そのままに最近傍探索(Nearest Neighbor)の条件を少し緩くした探索といえる. (実は,特徴ベクトルの次元がd=2の場合なら,ボロノイ図を使えば近似最近傍探索ができる) LSHはハッシュ関数を用いた確率的探索で近似最近傍探索を解く. そう,実はハッシュ関数を用いるということ以上に確率的探索ということに大きな意味がある.(これが自分にとってはかなりやっかいな問題) LSHでは,クエリqと近傍(半径(1+ε)以内)にある点ではハッシュ値が一致する確率が高く, クエリqと遠い位置にある点ではハッシュ値が一致する確率が低

  • p-Stable LSHをC++11でさっくり実装 - nyanp::blog

    高次元の特徴量を持ったベクトルの集合に対して,与えられたクエリベクトルに似ているものを探し出すという問題を,近傍探索とかいう.旧来のkd-treeあたりを使った探索ではなく,近似的に近いベクトルを探す近似近傍探索が流行っている(らしい).近似近傍探索のひとつ,LSHの説明を読んでたら「これ案外簡単に実装できるんじゃね?」と思い至ったので,C++11で書いてみた. LSHについては以下の説明がとても分かりやすい. 060108 Locality-Sensitive Hashingの実装が一段落 - 飛行船通信 - Seesaa Wiki(ウィキ) 他には以下を実装の参考にした. lsh p-stable 最近のバイナリハッシングをいくつかJavaで実装してみた - るびゅ備忘録 Locality Sensitive Hashing - (setf yaruki nil) - nlpyutor

    p-Stable LSHをC++11でさっくり実装 - nyanp::blog