タグ

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

  • カハンの加算アルゴリズム - Wikipedia

    カハンの加算アルゴリズム(英語: Kahan summation algorithm、直訳するとカハンの総和アルゴリズム)とは、有限精度の浮動小数点数列の総和を計算する際の誤差を改善する計算手法・アルゴリズム。計算機において精度に制限のある計算をする場合[1]に、計算の途中の誤差を保持することで補正する。Compensated summation(補正加算)とも呼ぶ[2]。 単純に n 個の数値の総和を計算すると、n に比例して誤差が増えていくという最悪のケースがありうる。また、無作為な入力では二乗平均平方根の誤差すなわち に比例する誤差が生じる(丸め誤差はランダムウォークを形成する)[3]。補正加算では最悪の場合の誤り限界 (error bound) は n とは独立なので、多数の数値を合計しても、誤差は使用する浮動小数点数の精度に依存するだけとなる[3]。 このアルゴリズムの名は考案し

    kenichiice
    kenichiice 2016/04/20
    「総和を計算する際の誤差を最小化する数値解析のアルゴリズム」
  • 非復元抽出の高速かつ実装が簡単な方法を考える - シリコンの谷のゾンビ

    ※ @tomerun さんに書いてもらったコードとその検証結果を記事の最後に追記しました.(2013-07-21 2:00) ふとしたきっかけで非復元抽出 (random sampling without replacement) を実装するときに気になったのでどんな実装がよいのか考えてみた.なお非復元抽出はビンゴのように,N個の要素の中からk個の異なる要素をランダムに選択するという意味である. 復元抽出については @unnonouno さんのブログなどに書いてあり,非復元抽出についてもリンクが張ってあったのだけれど,リンク先のブログ記事が読めない状態になっていていたのが残念. unnonouno: 高速な復元抽出の直感的な説明 はじめに std::vector

    非復元抽出の高速かつ実装が簡単な方法を考える - シリコンの谷のゾンビ
  • Google Chromeが採用した、擬似乱数生成アルゴリズム「xorshift」の数理

    2015年12月17日、Google ChromeJavaScript エンジン(処理系)である V8 の公式ブログにて、 JavaScript の標準的な乱数生成APIである Math.random() の背後で使われているアルゴリズムの変更がアナウンスされました。 Math.random() 関数は JavaScript を利用する際には比較的よく使われる関数ですので、親しみのある方も多いのではないかと思います。 新たなバグの発見や、従来より優秀なアルゴリズムの発見によってアルゴリズムが変更されること自体はそれほど珍しくはないものの、 技術的には枯れていると思われる Math.random() のような基的な処理の背後のアルゴリズムが変更されたことに驚きを感じる方も少なくないかと思いますが、 それ以上に注目すべきはその変更後のアルゴリズムです。 実際に採用されたアルゴリズムの原

    Google Chromeが採用した、擬似乱数生成アルゴリズム「xorshift」の数理
  • Bit Twiddling Hacks

    By Sean Eron Anderson seander@cs.stanford.edu Individually, the code snippets here are in the public domain (unless otherwise noted) — feel free to use them however you please. The aggregate collection and descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and without even the implied warranty of

    kenichiice
    kenichiice 2015/08/20
    「ビット」に関する色々なアルゴリズムが書かれている
  • [ruby-dev:49209] データ構造コンテスト:テーブルデータ構造の再考

    Subject: [ruby-dev:49209] データ構造コンテスト:テーブルデータ構造の再考 From: SASADA Koichi <ko1@ d . t Date: Wed, 12 Aug 2015 19:10:54 +0900 # 概要 Ruby インタプリタのデータ構造についての協力者を募集します。具体的には、 特定のテーブルデータ構造の高速化、およびベンチマークの作成です。題目にコ ンテストと書いていますが、とくに賞品はありません。 # 詳細 Ruby インタプリタでは、テーブルデータ構造を使っています。テーブルデータ 構造だと曖昧ですが、Ruby だと Hash クラスに代表される、あるキーに対して 特定の値が返る、というデータ構造と考えてください。キーに重複はないことと します。 Ruby インタプリタのテーブルデータ構造には、st というデータ構造が利用され ており、

    kenichiice
    kenichiice 2015/08/12
    「Ruby インタプリタのデータ構造についての協力者を募集します。具体的には、特定のテーブルデータ構造の高速化、およびベンチマークの作成です。」
  • 組合せ最適化を使おう - Qiita

    野菜の選び方はナップサック問題、乗り換え駅探索は、最短路問題といいます。典型問題は、よく研究もされているので、多くの場合、効率的な解法があります。あるいは、定式化がされているので、すぐ解くことができます。あとで、やってみましょう。ここで、あげている全ての典型問題の実行例は、典型問題と実行方法をご覧ください。 汎用問題 最近、私がやっているコンテナの仕事のお話しをします。 世界中の人たちが、いろいろなものを安く買えるのはコンテナ輸送のおかげです。中国などで生産したものを日アメリカやヨーロッパに、大量に安く運べるからです。でも、空のコンテナが、どんどんたまります。また中国に戻さないといけません。いつ、どこからどこに戻すかを決めるのが、最小費用流問題になります。ところが、最小費用流問題で表せない制約条件もあります。1 つが、カボタージュとよばれるものです。カボタージュというのは、国内のみの輸

    組合せ最適化を使おう - Qiita
    kenichiice
    kenichiice 2015/07/13
    「組合せ最適化を使うためのノウハウを説明します。」
  • 第1回:組み合わせ最適化とOptaPlannerとは | オブジェクトの広場

    この連載記事は、最適化問題の1つである「組み合わせ最適化問題」を解くことのできる「OptaPlanner」を紹介します。連載第一回目の記事では、組み合わせ最適化問題の例としてシフトスケジュール作成と集荷経路作成を題材にしながらOptaPlannerが組み合わせ最適化問題を解くために利用しているメタヒューリスティックな解法の概要説明と、適切にメタヒューリスティックな解法を動作させるためのポイントを説明したいと思います。 組み合わせ最適化とは シフトスケジュール作成や巡回ルート作成などは組み合わせや順番を入れかえながらより良いパターンを試行錯誤しながら作っていくことが多いと思います。実際の業務では、シフトの作成の場合は休み希望日や保有スキルを加味しながらより負荷が均等な割当が必要となり、巡回ルート作成では拠点への到着・出発時間の制限を守りながらより効率的な拠点の周り方が必要となります。このよ

    第1回:組み合わせ最適化とOptaPlannerとは | オブジェクトの広場
    kenichiice
    kenichiice 2015/05/15
    「Javaで作られたlightweightで組込み可能な最適化エンジンであると書かれています。」
  • 初級グラフアルゴリズムをまとめてみる - テストステ論

    一週間前から集中的にプロコン勉強をしている. まるで受験生だ. 楽しい. とりあえず, 以下の3冊のをざっくり見ると, カバーする範囲において, 蟻(<=初級) =~ ALDS(全部) =~ 最強最速(全部)というのが大体成り立つと分析した. すなわち, この範囲が極めて大切だということだと解釈した. プログラミングコンテストチャレンジブック(蟻) プログラミングコンテスト攻略のためのアルゴリズムとデータ構造(ALDS) 最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド(最強最速) 時間的に, 蟻の中級以上の範囲を学ぶことは不可能だし, どうも体系立ってない領域に思えたので, 学習方針としては, 初級範囲をきっちり学んで, それで落ちたら諦めるということにした. さて, 初級において特に重要なことは, 動的計画法(DP) グラフアルゴリズム である

    初級グラフアルゴリズムをまとめてみる - テストステ論
  • DPの話 - aizuzia

    この記事は Competitive Programming Advent Calendar のために作成されました。 「DP (Dynamic Programminng: 動的計画法) がよく分からない」というつぶやきをよく目にします。何から何まで分からないというわけではないけど、 「こういうDPをすれば解けるよ」と説明されれば理解できるけど、一からそれを思い付けない メモ再帰だと書けるけどループだと書けない、またはその逆 とかいう。 この記事は、DPという技法をより深く理解する手助けをすることを目的として書かれています。これを読めばどんなDPの問題もさくさく解ける・・・ことはないと思いますが、あんまり悩まずに実装できるようになるぐらいの効果はあるんじゃないかなと思います。想定する読者層は、簡単なDPの問題をいくつか解いたことがある、TopCoderレーティング 1500 未満ぐらいの人と

    DPの話 - aizuzia
  • 正月の酔っ払い物理学者が数学者の皮を被った天使に出会うお話 | カメリオ開発者ブログ

    あけましておめでとうございます。白ヤギの物理担当、シバタアキラ(@punkphysicist)です。 皆様はどんなお正月を過ごされましたか?日の正月といえば、おせち、日酒、おばあちゃん、そしてパズル、ですよね。私の正月はそんな感じでした。お節をたらふくべ、美味しいお酒でほろ酔い気分になっている私の横で、黙々とおばあちゃんがパズルをやっているのに気づいたのです。部屋中をフワフワしている私とは全く対照的に、微動だにせずパズルを続けるおばあちゃん。御年迎えられると辛抱強さが半端ない。 そんなおばあちゃんがやっていたのはかわいいチョコレートのピースとは裏腹にこんな挑発的な文言の書かれたパズルです(この記事はアフィリエイトではありませんが、写真をクリックすると買えます) 何時間たっても答えが出ないおばあちゃん、辛抱強さは人一倍強いですが、私も何とか助けてあげたいと思いトライ。しかし日酒が・・

    正月の酔っ払い物理学者が数学者の皮を被った天使に出会うお話 | カメリオ開発者ブログ
    kenichiice
    kenichiice 2015/01/06
    「思い出したのは、今年のPyConJPで線形計画問題を解決するライブラリ、pulpを使って、あらゆるパズルを解くというすごいプレゼンをされた、構造計画研究所の斉藤さんです」
  • [KMP77] を読んでみた - d.y.d.

    17:53 14/12/22 ソートの逆流れ クイックソートってあるじゃないですか、クイックソート。 配列、たとえば [4,2,1,7,0,6,5,3] があったときに、 小さい方を左に、大きい方を右にまず適当に集める。 この「小さい方」と「大きい方」への二分割を、いわゆる再帰的に、 分かれたブロック両方で同じ事を繰り返していくと… なんと、小さい順に並んだ配列 [0,1,2,3,4,5,6,7] が出来上がるというアルゴリズムです。 逆向き! このデータの流れを「逆向きに」見てみたい。つまり、ソートが終わった最終状態から話が始まります。 しかも、さっきから説明なしで意味ありげにくっついていた、 「入力配列で元々どの位置にあったか」を表す値に注目していきます。 0の上に[4]がくっついているのは、最初は値0は配列のインデックス[4]の位置にあった、 ということを意味しています。(上のソート

    [KMP77] を読んでみた - d.y.d.
    kenichiice
    kenichiice 2014/12/27
    「値に関するクイックソートの流れを逆向きから眺めてみると、 [元々値が存在した位置] を基準にマージソートした動きになっていることがわかりました。」
  • 機械学習はじめの一歩に役立つ記事のまとめ - その後のその後

    機械学習」というワードになんとなく惹かれつつも、具体的にやりたいことがあるわけでもないので、手を動かすことなくただひたすら「いつかやる」ために解説記事やチュートリアル記事を集める日々を過ごしていたのですが、このままじゃイカン!と Machine Learning Advent Calendar 2014 - Qiita に参加登録してみました。 が、やはり何もしないまま当日を迎えてしまったので、お茶濁しではありますが、せめて「機械学習ってどんな手法やライブラリがあって、どんな応用先があるのか?」というあたりをざっくり把握して最初に何をやるのか方向付けをするためにも、たまりにたまった機械学習系の記事をいったん整理してみようと思います。 機械学習の概要 特定のライブラリや手法の話ではなく、機械学習全般に関する解説。 機械学習チュートリアル@Jubatus Casual Talks 機械学習

    機械学習はじめの一歩に役立つ記事のまとめ - その後のその後
  • 簡潔データ構造の入門の入門 - EchizenBlog-Zwei

    最近、簡潔データ構造(Succinct Data Structure)がじわじわ人気が出てきているように感じるので入門の入門、くらいの記事を書いておく。 この記事では簡潔データ構造において最も基的なデータ構造である完備辞書(Fully Indexable Dictionary)について説明する。 新しい概念が出てきた時に気になるのは「どうやって実現するのか」「それができると何が嬉しいのか」という2点だと思う。 前者についてはこの記事(http://d.hatena.ne.jp/takeda25/20140201/1391250137)がわかりやすいのでここでは述べない。この記事では「完備辞書があると何が嬉しいのか」について説明する。 完備辞書とは 完備辞書はrankおよびselectという操作が定数時間で実行できるビット列のこと。rank(i)はi番目のビットより前にいくつ1があるかを返

    簡潔データ構造の入門の入門 - EchizenBlog-Zwei
    kenichiice
    kenichiice 2014/11/06
    「この記事では「完備辞書があると何が嬉しいのか」について説明する。」
  • アルゴリズムの紹介

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

  • あなたの知らないハッシュテーブルの世界

    Please select the category that most closely reflects your concern about the presentation, so that we can review it and determine whether it violates our Terms of Use or isn't appropriate for all viewers.

  • MapReduceのパターン、アルゴリズム、そしてユースケース - きしだのHatena

    Ilya Katsov氏による「MapReduce Patterns, Algorithms, and Use Cases」の翻訳 http://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/ (下書きに入れて推敲するつもりが、なんか公開されてしまっていたので、あとでいろいろ修正すると思います) February 1, 2012 この記事では、Webや科学論文で見られる異なるテクニックの体系的な視点を与えるために、数々のMapReduceパターンとアルゴリズムをまとめた。 いくつかの実用的なケーススタディも提供している。 すべての説明とコードスニペットでは、Mapper、Reducer、Combiner、Partitionaer、ソーティングにおいてHadoopの標準的なMapReduceモデルを利用します。このフレー

    MapReduceのパターン、アルゴリズム、そしてユースケース - きしだのHatena
  • Square root of a matrix - Wikipedia

    In mathematics, the square root of a matrix extends the notion of square root from numbers to matrices. A matrix B is said to be a square root of A if the matrix product BB is equal to A.[1] Some authors use the name square root or the notation A1/2 only for the specific case when A is positive semidefinite, to denote the unique matrix B that is positive semidefinite and such that BB = BTB = A (fo

  • Numerical Computation as Software

    Numerical Computation as Software ソフトウェアとしての数値計算 Last Update: 2007-10-21 お断り&言い訳 [2007-10-21] 「今後の当面の方針」について [2007-10-13] Version 1.0.3.2公開。 内容 [Bug] 表紙 目次 初めに 数値計算のための予備知識 数学ソフトウェアの現状と数値計算の役割について 数の体系,コンピュータ,浮動小数点数 浮動小数点数と丸め誤差 多倍長計算 計算量について 初等関数の計算 連立一次方程式の解法1-- 直接法 ノルム,条件数,連立一次方程式の誤差解析 連立一次方程式の解法2 -- 反復法 連立一次方程式の解法3 -- Krylov部分空間法 行列の固有値・固有ベクトル計算 非線型方程式の解法 代数方程式の解法 補間と最小二乗法 数値微分と数値積分 常微分方程式の初期値問

    kenichiice
    kenichiice 2011/11/02
    書籍の体裁。good。「ソフトウェアとしての数値計算」
  • 頻出典型アルゴリズムの演習問題としてよさげなやつ - kyuridenamidaのチラ裏

    効率的な別解とか存在する問題もあるけど演習によさそうなやつをピックアップ。そのアルゴリズムじゃないと解けないわけではないって問題も多いので注意。(ただ演習するのには都合が良いかなと)※個人的難易度をつけてみました。とても主観的な難易度付けなので気にせず解いてみてください。深さ優先探索・Balls[☆]・Sum of Integers[☆]・The Number of Island[☆]・Block[★]幅優先探索・Mysterious Worm[★]・Cheese[★]・Seven Puzzle[★☆]・Stray Twins[★★]・Deven-Eleven[★★]・Summer of Phyonkichi[★★☆]ワーシャルフロイド法(For 全点対最短路問題)・Traveling Alone: One-way Ticket of Youth[★]・A reward for a Car

  • groongaで高速な位置情報検索 - 2011-09-13 - ククログ

    groongaのドキュメントにも位置情報検索について書かれているのですが、情報の更新が追いついていないため情報が不足しています。そこで、ここに現状に合わせたgroongaの位置情報検索についての情報をまとめておきます。なお、ここにまとめた内容もドキュメントに反映させる予定です。 できること groongaには位置情報を用いた検索機能がついています。位置情報を用いた検索では索引を利用するため、全文検索と同じように高速に検索することができます。ただし、PostGISやMySQLのように1線や面などもデータとして保持できるというわけではなく、点のみをデータとして保持できます。よって、groongaにできることは以下の通りです。 指定した四角の中に含まれている座標を持つレコードを検索する。 指定した円の中に含まれている座標を持つレコードを検索する。 座標間の距離を計算する。 ある座標からの距離が近

    groongaで高速な位置情報検索 - 2011-09-13 - ククログ
    kenichiice
    kenichiice 2011/09/14
    「groongaでは位置情報を高速に検索するために、GeoHashと同じ考え方で緯度経度をエンコードしてパトリシアトライに格納しています。」