タグ

algorithmとAlgorithmに関するgologo13のブックマーク (108)

  • ボイヤー-ムーア文字列検索アルゴリズム - Wikipedia

    テキスト T = "ANPANMAN" に対して k = 3 から k = 8 までパターン P = "PAN" を配置した様子。この場合、k = 5 の位置で一致する。 文字列 S に対する操作を以下のように表す: S[i]: 文字列 S の i 番目の文字 S[i..j]: 文字列 S の i から j 番目までの部分文字列(i 文字目、j 文字目をそれぞれ含む) 文字列 S に含まれる文字の個数を文字列の長さと定義する。また、文字列 S の先頭を含む部分文字列をプレフィックス、末尾を含む部分文字列をサフィックスと定義する。 len(S):S の長さ S[1..i], 1 ≤ i ≤ len(S):S のプレフィックス S[i..len(S)], 1 ≤ i ≤ len(S):S のサフィックス 検索文字列をパターンと呼び、P で表す。被検索文字列をテキストと呼び、T で表す。また T

  • エイホ–コラシック法 - Wikipedia

    エイホ–コラシック法(英: Aho–Corasick algorithm)とは、1975年にアルフレッド・エイホと Margaret J. Corasick が発見した文字列探索アルゴリズムである[1]。 エイホ–コラシック法は、入力テキストについて有限の文字列群(辞書)の各要素を探す辞書式マッチングアルゴリズムの一種である。全パターンのマッチングを一斉に探索するため、そのアルゴリズムの計算量はパターン群の長さに対しても対象テキストの長さに対しても線形であり、さらに見つかったマッチングの数に対しても線形である。全てのマッチングを検出するため、パターン群にサブ文字列があれば、重複して検出される点に注意されたい(つまり、辞書が a, aa, aaa, aaaa で、入力テキストが aaaa の場合など)。 大まかに言えば、このアルゴリズムはトライ木を構築し、サフィックス木的に文字列(例えばab

    エイホ–コラシック法 - Wikipedia
  • SimString - A fast and simple algorithm for approximate string matching/retrieval

    A fast and simple algorithm for approximate string matching/retrieval SimString is a simple library for fast approximate string retrieval. Approximate string retrieval finds strings in a database whose similarity with a query string is no smaller than a threshold. Finding not only identical but similar strings, approximate string retrieval has various applications including spelling correction, fl

    gologo13
    gologo13 2010/04/25
    類似文字列検索
  • C++: 編集距離を求めるアルゴリズム

    編集距離(edit distance)とは二つの文字列がどの程度異なっているかを示す数値であり、レーベンシュタイン距離(Levenshtein distance)を指すことが多い。文字の挿入、削除、置換それぞれを一つの操作として必要な操作の最小数を求めるものだ。例えば、kittenとsittingの編集距離を求める場合、下記のように3回の操作でkittenをsittingに変更できるので編集距離は3となる。 1. sitten (k を s に置換) 2. sittin (e を i に置換) 3. sitting (g を挿入) そこで今回は編集距離を求める複数のアルゴリズムについてC++で実装してみた。 動的計画法 編集距離を求めるもっとも一般的なアルゴリズムは、動的計画法(dynamic programming)だろう。計算時間はO(mn)であり、手軽だ。C++で書いたコードを下に示

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • 最強最速アルゴリズマー養成講座:アルゴリズマーの登竜門、「動的計画法・メモ化再帰」はこんなに簡単だった (1/5) - ITmedia エンタープライズ

    動的計画法とメモ化再帰 今回は、非常によく用いられるアルゴリズムである、「動的計画法」「メモ化再帰」について説明します。この2つはセットで覚えて、両方使えるようにしておくと便利です。 なお、メモ化再帰に関しては、第5・6回の連載の知識を踏まえた上で読んでいただけると、理解が深まります。まだお読みになっていない方は、この機会にぜひご覧ください。 中学受験などを経験された方であれば、こういった問題を一度は解いたことがあるのではないでしょうか。小学校の知識までで解こうとすれば、少し時間は掛かるかもしれませんが、それでもこれが解けないという方は少ないだろうと思います。 この問題をプログラムで解こうとすると、さまざまな解法が存在します。解き方によって計算時間や有効範囲が大きく変化しますので、それぞれのパターンについて考えます。 以下の説明では、縦h、横wとして表記し、プログラムの実行時間に関しては、

    最強最速アルゴリズマー養成講座:アルゴリズマーの登竜門、「動的計画法・メモ化再帰」はこんなに簡単だった (1/5) - ITmedia エンタープライズ
  • Spaghetti Source - アトキンのふるい

    ソースコード void sieve_of_atkin() { int n; for (int z = 1; z <= 5; z += 4) { for (int y = z; y <= sqrtN; y += 6) { for (int x = 1; x <= sqrtN && (n = 4*x*x+y*y) <= N; ++x) isprime[n] = !isprime[n]; for (int x = y+1; x <= sqrtN && (n = 3*x*x-y*y) <= N; x += 2) isprime[n] = !isprime[n]; } } for (int z = 2; z <= 4; z += 2) { for (int y = z; y <= sqrtN; y += 6) { for (int x = 1; x <= sqrtN && (n = 3*x*x+y*

    gologo13
    gologo13 2010/04/04
    エラトステネスのふるいよりも計算量の意味でも実用的な意味でも高速に動作する.
  • Libicpc - nya3.jp

    libicpc チーム kkntkr / Unknown による、ACM-ICPC 向けのアルゴリズムの実装をまとめたページです。 基礎 テンプレート マクロ 計算 ビット演算 実数比較 幾何 基礎 データ構造 内積・外積 回転方向関数 射影 面積・体積 円と円の共通部分 多角形の面積 交差 円と円の交点 円と直線の交差判定 円と直線の交点 凸多角形と線分の包含判定 多角形と点の包含判定 直線と直線の交差判定 直線と直線の交点 直線と線分の交差判定 線分と点の交差判定 線分と線分の交差判定 距離 最遠点対 直線と点の距離 直線と直線の距離 直線と線分の距離 線分と点の距離 線分と線分の距離 多角形 凸包 凸多角形のクリッピング その他 アレンジメント ダイス 三次元幾何 直線と直線の距離 グラフ 基礎 データ構造 最短路 Bellman-Ford Dijkstra Warshall-Flo

  • 可逆圧縮 - Wikipedia

    可逆圧縮アルゴリズムはすべての入力データに対して圧縮後のデータサイズが圧縮前より小さいことを保証できない。すなわち、どのような可逆圧縮アルゴリズムでも圧縮処理後にデータサイズが小さくならない入力データが存在し、また圧縮処理後にデータサイズが小さくなる入力データが存在する場合、圧縮処理後にデータサイズが大きくなる入力データも必ず存在する。前者の証明は下記の通り[3]。 すべての入力データを小さくできるアルゴリズムの場合、アルゴリズムを繰り返して適用することでデータサイズを1ビットにできる。 しかし、1ビットでは記録できる情報が2種類しかなく、解凍が明らかに不可能である。 したがって、前提である「すべての入力データを小さくできるアルゴリズムが存在する」が成立しない。 後者の証明は鳩の巣原理を用いたものであり、下記の通りとなっている[3][4]。 「圧縮処理後にデータサイズが小さくなる入力データ

    gologo13
    gologo13 2010/04/02
    圧縮アリゴリズムも勉強してみたいなぁ,というか全く知らないし
  • アルゴリズム行進こそ至高のアルゴリズムである - chokudaiのブログ

    NHKで大人気の教育番組「ピタゴラスイッチ」における、アルゴリズム行進やアルゴリズム体操はあまりにも有名です。知ってる人も知らない人も、まずはこの動画を見ていただきましょう。 これが実際にNHKで放送された番組中の動画です。この動画を見ていただければ、タイトルの通りであるという説明をするまでもないとは思いますが、蛇足となることを覚悟しつつ、あえて、『なぜアルゴリズム行進が至高のアルゴリズムであるか』、その一部分を説明しようかと思います。 アルゴリズム行進から見える並列処理 皆さん、コンピュータがどう動いているかはご存知でしょうか?このブログを見てくれている方はかなり詳しく理解されている方が多いかとは思いますが、そうでない方も非常に多いのではないでしょうか?ここで少し難しい話をしますが、コンピュータの頭脳である、CPUがどのような働きをしているかを解説しようと思います。 CPUの場合 CPU

    アルゴリズム行進こそ至高のアルゴリズムである - chokudaiのブログ
    gologo13
    gologo13 2010/04/01
    アルゴリズムの面白さを非常にコミカルな形で伝えておきながら、アルゴリズムが何であるかに触れていないのです。
  • JOI 春合宿での講義資料 - iwiwiの日記

    情報オリンピックの春合宿で担当した講義のスライドをアップロードしました. プログラミングコンテストでの動的計画法 プログラミングコンテストでのデータ構造 講義は動的計画法についてとデータ構造についてで,それぞれ独立しています. 動的計画法については,動的計画法のアルゴリズムを導くにあたっての非常に基的な部分について話しています.動的計画法がよく分かっていない人や,苦手な人にオススメ. データ構造については,Union-Find 木,バケット法,セグメント木について話しています.特に,バケット法やセグメント木の話は,中上級者向けですが,世の中の資料がかなり少ないので,活用されることを期待します. 講義を受け持つのははじめてで不安でしたが,生徒さん達に褒めてもらえたりもしていて嬉しいです. http://twitter.com/tozangezan/status/10718667041 ht

    JOI 春合宿での講義資料 - iwiwiの日記
  • クラスタリング (クラスター分析) - Toshihiro Kamishima

    クラスタリング (clustering) とは,分類対象の集合を,内的結合 (internal cohesion) と外的分離 (external isolation) が達成されるような部分集合に分割すること [Everitt 93, 大橋 85] です.統計解析や多変量解析の分野ではクラスター分析 (cluster analysis) とも呼ばれ,基的なデータ解析手法としてデータマイニングでも頻繁に利用されています. 分割後の各部分集合はクラスタと呼ばれます.分割の方法にも幾つかの種類があり,全ての分類対象がちょうど一つだけのクラスタの要素となる場合(ハードなもしくは,クリスプなクラスタといいます)や,逆に一つのクラスタが複数のクラスタに同時に部分的に所属する場合(ソフト,または,ファジィなクラスタといいます)があります.ここでは前者のハードな場合のクラスタリングについて述べます.

    クラスタリング (クラスター分析) - Toshihiro Kamishima
  • 数学・アルゴリズム研究室

    当コーナーでは、ゲーム制作や一般アプリケーション開発といったプログラミングの「土台」となる各種アルゴリズムや初級レベル数学の基的概念を確かめるプログラムを作って試してみます。コードの中で何をしたいのか、具体的な「手順」や数学的な背景を考え、それをプログラミング言語の変数やデータ構造、制御構造などで実現していきましょう。 ただ、私自身が数学に関しては素人なので、たいしたことはできません。内容も無保証ですので、ご注意ください。 コーナーでは、Javaアプレットを使用しているページがあります。Javaアプレットが埋め込まれているページでは、プラグインがないとプログラムが実行されません。 数式処理への第一歩>足し算(1999/10/ 6) 連結リスト(1999/10/ 6) 参照(ポインタ)の繋ぎあわせでデータを保持。 16進文字列と数値の変換(2000/ 6/20) 文字列の検索(1999/

  • 点集合の凸包-数学アルゴリズム演習ノート-

    凸包とは、平面グラフ上の点(ある点集合)の中で最も「外側」にある点を直線で結んで出来る線分の集合です。つまり、凸包の直線群はその線の内側にすべての点が含まれるような、いわばその点集合の最短の「境界線」と言えるでしょう。 今回は、その凸包を求めるアルゴリズムを、点同士を結ぶ直線の角度に注目して考えてみます。 凸包を求めるアルゴリズム まず、「すでにある凸包上にある点を出発点として次の凸包上の点を探す」アルゴリズムを考えてみましょう。凸包は「直線」の集合なので、2つの点を結ぶ直線の「角度」に注目してみると良さそうですね。 まず凸包上の最も左下にある点を出発点として、その点からx軸に平行に直線を延ばしてみましょう。そして、その直線を反時計周りつまりx軸との角度を大きくしていくような方向に回転させていきます。こうして角度を大きくしてき最初に出会った点は、その「外側」に点がないわけですから、明らかに

    gologo13
    gologo13 2010/03/23
    へーへー
  • MIT's Introduction to Algorithms, Lectures 1 and 2: Analysis of Algorithms

    I just finished watching the last lecture of MIT's "Introduction to Algorithms" course. Having a great passion for all aspects of computing, I decided to share everything I learned with you. This is the first post in an article series about this course. As I wrote earlier, I am very serious about watching video lectures. If they are math-intensive, I usually take notes as if I were in the classroo

    MIT's Introduction to Algorithms, Lectures 1 and 2: Analysis of Algorithms
  • MIT OpenCourseWare OCW Home

    We need your input! Take this brief survey to shape the future of MIT OpenCourseWare.

    MIT OpenCourseWare OCW Home
  • アルゴリズムの紹介

     ここでは、プログラムなどでよく使用されるアルゴリズムについて紹介したいと思います。 元々は、自分の頭の中を整理することを目的にこのコーナーを開設してみたのですが、最近は継続させることを目的に新しいネタを探すようになってきました。まだまだ面白いテーマがいろいろと残っているので、気力の続く限りは更新していきたいと思います。 今までに紹介したテーマに関しても、新しい内容や変更したい箇所などがたくさんあるため、新規テーマと同時進行で修正作業も行なっています。 アルゴリズムのコーナーで紹介してきたサンプル・プログラムをいくつか公開しています。「ライン・ルーチン」「円弧描画」「ペイント・ルーチン」「グラフィック・パターンの処理」「多角形の塗りつぶし」を一つにまとめた GraphicLibrary と、「確率・統計」より「一般化線形モデル」までを一つにまとめた Statistics を現在は用意して

  • Introduction to Roman Architecture | Yale History Lecture

    Join the increasing number of students enrolling in online college courses and start earning credits towards your degree. One in every four students now take at least one class online, and during the fall 2014 term, 5.8 million college students were taking some of their classes — if not all of them — through distance learning. To keep up with increasing demand for online options, more and more sch

  • Introduction to Algorithms

    Introduction to Algorithms
  • algorithm

    奥村晴彦さんの「C言語による最新アルゴリズム事典」技術評論社、1991年、の C 言語プログラムの Ruby への翻訳に挑戦します。プログラムの説明は同書を読んでください。変換はできるだけ逐語的に行っています。プログラムの動作は原作の C プログラムのそれと比較してチェックしていますが、うまく動作しないときは C から Ruby への変換のさいに起きたものです。バグレポートは tnomura@mnet.ne.jp までお願いします。 この Ruby 翻訳版はできるだけレイアウトも含めて原作の C プログラムを変更しないようにしたため、必ずしもRuby らしいコーディングスタイルとは言えないかもしれませんが、プログラムがきちんと動作することを優先しました。C から Ruby への翻訳の著作権に関しては Ruby のライセンスに準じます。配布、改変は自由です。ただし、プログラム体には原作者の