アルゴリズムに関するdai1741のブックマーク (17)

  • プログラムを高速化する話

    9. 9 最適化について 「細かい効率のことは忘れて、時間の 97% について考え よう。時期尚早な最適化は諸悪の根源だ。それでも残り 3% についても機会を逃すべきではない」 - Donald E. Knuth 「プログラム最適化の第一法則 : 最適化するな。 プログラム最適化の第二法則 ( 上級者限定 ): まだするな。 」 - Michael A. Jackson 11. 11 最適化の対象 主に Intel の Haswell マイクロアーキテクチャ以降を対象 多くのテクニックは他のプロセッサにも応用できます ベース マイクロアーキテクチャ プロセスルール 登場年 Nehalem Nehalem 45nm 2008 〃 Westmere 32nm 2010 Sandy Bridge Sandy Bridge 32nm 2011 〃 Ivy Bridge 22nm 2012 Hasw

    プログラムを高速化する話
  • 出、出~~wwwww銀行員待行列解説奴~wwwwwww - モナドとわたしとコモナド

    銀行員待行列(Banker's deque)、二つのリストで構成奴~~wwwww 入奴と出奴~wwwwwwwww ↓入奴 三(^o^)ノ [(^o^)ノ, (^o^)ノ, (^o^)ノ] ヽ(^o^)三 [ヽ(^o^), ヽ(^o^), ヽ(^o^)] ↑出奴 追加は入奴にcons、取り出しは出奴にuncons奴~wwwリストなので基定数時間奴~wwwwww リスト枯渇防止の為、リストの長さに以下の条件課奴~~~wwwwww length (入奴) <= length (出奴) * 3 + 1 length (出奴) <= length (入奴) * 3 + 1 条件充足不能場合、|length (入奴) - length (出奴)| <= 1なるよう余剰分反転後短い側の末尾に結合して調整奴~wwwww時間計算量O(length (入奴) + length (出奴))必要~~~~wwww

  • プログラミングコンテストで、C++を使って全ての問題を解くのに必要なアルゴリズムは何ですか? | POSTD

    これが私の提案するリストです。必要とされるアルゴリズムや概念のほとんどが挙げられています。いくつかの要素はアルゴリズムではなかったり(フェイクや状態、関心事など)、重複していたりもします。 最後に1つ、アドバイスを。 知識を蓄える前に、まずは思考能力を鍛えることを重要視しましょう。これはコンテストのみならず、あなた自身の将来にも役立ちます。思考能力を鍛えるには、アルゴリズムではなく純粋な思考を必要とする、アドホックを使いこなせるようになりましょう。 topcoderのDiv2とCodeforcesのDiv2の2つに集中することも効果的だと思います。どちらも、低いレベルから問題に取り組んでいきましょう。例えば、Div2-250をマスターしてからDiv2-500に取り組む、などです。

    プログラミングコンテストで、C++を使って全ての問題を解くのに必要なアルゴリズムは何ですか? | POSTD
  • 中学生にもわかるウェーブレット行列 - アスペ日記

    id:echizen_tm さんの記事「ウェーブレット木の効率的で簡単な実装 "The Wavelet Matrix"」から始まったウェーブレット行列ブームから半年以上が過ぎ、すでに枯れた技術として確立されつつある感があります。 …嘘です。 日以外ではあんまり来ていません。 理由としては、やはりアルファベット圏では単語境界が明確であるため、こちらの記事で書かれているような「キーワード分割の難易度」といったことがあまり問題にならないということがあるかもしれません。 まあ、そういうわけで局所的に来ているウェーブレット行列ですが、日語をはじめとする単語境界のない言語圏にとっては重要なネタであると思うため、解説記事を書き直して*1みようと思います。 ウェーブレット行列でできること 主となる操作は、文字列に対する 定数時間の rank() と select()*2 です。 rank() は、「文

  • Aho-Corasick – implementation and animation

    Today we will learn how to implement the Aho-Corasick algorithm. It is used for finding occurences of words in text and it is faster than other common algorithms. Code will be in ActionScript 3, but implementation in C, C++, C# or Java will be very similar. You can also try a fullscreen version of an applett. Aho-Corasick algorithm We can divide the algorithm into 2 steps: constructing a finite st

  • Collision Detection an Overview

  • w.l.o.g. ギャップバッファ

    04:40 04/06/04 ピーステーブル PieceTable とも言う。文字列の Piece(小片)を繋げて、 一つの巨大な文書を表現する方式。 検索すると引っかかる文書のほとんどが AbiWord 関係なので、 このワープロソフトの主要な内部データ構造ということなのかな。 他に、MS-WordやOpenOffice.org関連の文書にも登場していて、 基的に単なるテキストエディタよりは、文字に付加情報をくっつける系の 編集ソフトに使われる場面が今のところ多いみたいです。 余談ですがAbiWordは、綱渡り的にですがBeOS版の開発が続いている貴重なワープロソフトなのです。感謝感謝。 概要 ファイルを読み込んだとしましょう。ABCDEFG、という7文字のファイル。 とりあえず、7文字分のOrigという名前のバッファを用意して、そこに格納します。 それと別に、Addという名前の空のバ

  • Open Data Structures

    Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues, unordered dictionaries, ordered dictionaries, and graphs. Data structures presented in the book include stacks, queues, deques, and lists implemented as arrays and linked-lists; space-efficient implementations of lists; skip lists; hash tables and hash codes; binary search

  • Computational Geometry - Lecture Notes

    第一章 基概念 [Handout] [Slide] 第二章 線分交差 [Handout] [Slide] 第三章 凸包 [Handout] [Slide] 第四章 ボロノイ図 [Handout] [Slide] 第五章 ドローネ三角形分割 [Handout] [Slide] 第六章 幾何的領域探索 [Handout] [Slide] 第七章 多角形の三角形分割 [Handout] [Slide] Created by Computational Geometry Team, 2008

  • シンプレックス法

    線形計画問題に対するシンプレックス法 製作者:向 譲治 何はともあれ下の例題を考えてみよう。 例題 ある会社が、A、Bという製品を売り出している。 それらを製作するための材料はプラスチック、アルミ、ゴムである。 それぞれ1個を製作するために必要な材料の量は下の表のとおりである。

  • 指数時間アルゴリズム入門

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

    指数時間アルゴリズム入門
  • プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~

    続き (動的木編) はこちら http://www.slideshare.net/iwiwi/2-12188845Read less

    プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
  • [Lib] 最小費用流のかいつまんだ(いい加減な)説明 - 2012-03-20 - なんとなくな日々のコメント

    ソースも図もないけれど、ライブラリのお話。 対象とする人 ダイクストラより重たいものは(ry。(ダイクストラ、と言われて分かる人。)賢い人向けのもっと専門的な説明はいくらでもあるので、いい加減だなぁ、うさんくさいなぁ、と思う場合はそちらをどうぞ。(あくまでこういう気持ちでやればなんとなく分かったつもりになれる、というのがこれを書いた意図です。) 大雑把な話(ここは最大流を知らないと分かりにくいかも...。) たとえば流量Kの最小費用流を求めたい場合、K回始点から終点までの最小距離を計算してやれば良いらしいです。このときのポイントは、ちょっと前の最短路で通った道を、やっぱや〜めた、すると実はより良い結果になることがあります。そもそも流量Kを確保しないといけないので、どんなに最短路でも使えない場合があります。 この、やっぱや〜めた、を実現するために、最大流とか最小費用流とかのお話をするときは、

    [Lib] 最小費用流のかいつまんだ(いい加減な)説明 - 2012-03-20 - なんとなくな日々のコメント
  • 【速報】ランダムネスが捕まった - とりマセ

    数学セミナー2011年2月号 特集◎ランダムネスを捕まえる数学セミナー 2011年 02月号 [雑誌]出版社/メーカー: 日評論社発売日: 2011/01/12メディア: 雑誌購入: 1人 クリック: 1回この商品を含むブログ (2件) を見る 二ヶ月以上遅れて速報とはこれ如何に。 ランダムネスに関するランダムな年表(チョイスはかなり偏ってます)西暦出来事1919フォン・ミーゼスがランダム性を数学的に定式化しようと試みる1920--6Xランダム性の定式化に辿り着くまでの多数の数学者による試行錯誤の時代1933コルモゴロフによる確率論の公理化ランダムネス誕生の時代1960ソロモノフが現在コルモゴロフ複雑性と呼ばれる概念を導入(数年後にコルモゴロフが同じ概念を独立に発見)1966マーティン=レフによる構成的ランダム性の定式化1970ソロヴェイはランダム強制法を導入し, の部分集合が全てルベー

  • 大規模テキストにおけるN-gram統計 - Negative/Positive Thinking

    はじめに 大規模なテキストデータでのN-gram統計を取る場合、特にNが大きい場合(N>=3)は、組み合わせの数が多くなり出てくるN-gramをすべてメモリに保持しながら個数をカウントするのが難しい。効率的な方法があるのを知ったのでちょっと試してみた。 大規模テキストにおけるN-gram統計の取り方 岩波講座ソフトウェア科学15「自然言語処理」 論文: http://ci.nii.ac.jp/naid/110002934647 手順 ngramを取りたい文章を1つの文として扱う この文をメモリに読み込み、各文字の先頭アドレスを保持する配列を作成 その先頭アドレスの場所の文字から文最後までの部分文字列を1つの単語とみる この単語を辞書順に並び替える(アドレス配列だけ) ソートした単語の順番で、次の単語と「先頭から共通している文字数」を保持する配列を作成 Ngramをカウントするときは、単語の

    大規模テキストにおけるN-gram統計 - Negative/Positive Thinking
  • クラスタリングの定番アルゴリズム「K-means法」をビジュアライズしてみた - てっく煮ブログ

    集合知プログラミング を読んでいたら、K-means 法(K平均法)の説明が出てきました。K-means 法はクラスタリングを行うための定番のアルゴリズムらしいです。存在は知っていたんだけどいまいちピンときていなかったので、動作を理解するためにサンプルを作ってみました。クリックすると1ステップずつ動かすことができます。クラスタの数や点の数を変更して、RESET を押すと好きなパラメータで試すことができます。こうやって1ステップずつ確認しながら動かしてみると、意外に単純な仕組みなのが実感できました。K-means 法とはK平均法 - Wikipedia に詳しく書いてあるけど、もうすこしザックリと書くとこんなイメージになります。各点にランダムにクラスタを割り当てるクラスタの重心を計算する。点のクラスタを、一番近い重心のクラスタに変更する変化がなければ終了。変化がある限りは 2. に戻る。これ

  • http://sps.nus.edu.sg/~limchuwe/cgt/

  • 1