タグ

algorithmとAlgorithmに関するWatsonのブックマーク (300)

  • C言語アルゴリズム-オープンアドレス法 CapmNetwork

    C言語アルゴリズム-オープンアドレス法 オープンアドレス法(open addressing)について ハッシュ法について ハッシュ法とは、キー値からハッシュ関数によって「ハッシュ値」を求め、ハッシュ値をバケット(bucket:ハッシュテーブルの各要素)に結びつけるデータ構造を生成し、高速な探索を実現する手法です。ハッシュ法を用いることで、データの数に関わらず挿入・探索・削除の操作を実質的に「O(1)」で行うことができます。 ハッシュ関連の用語は以下の通りです。 ハッシュ値(hash value) ハッシュ関数の返す値。キーを格納する配列の添え字。 ハッシュ表(hash table) データを格納する配列。 バケット(bucket) ハッシュ表の各要素。 衝突(collision) 異なったキーの値から同じハッシュ値が得られること。 オープンアドレス法(開番法)とは オープンアドレス法とは、

  • デッカーのアルゴリズム - Wikipedia

    デッカーのアルゴリズムはオランダ人数学者 T・J・デッカーの考案した相互排他のためのアルゴリズムである。これにより、共有メモリによる通信のみで、2つのプロセスが1つのリソースを競合することなく共有することができる。 厳密に交互にとっていく素朴なアルゴリズムを避けて発明された世界初の相互排他アルゴリズムの1つである。 ふたつのプロセスが同時に同じクリティカルセクションにアクセスしようとしたとき、このアルゴリズムはどちらのプロセスがアクセス権を得るかを決定する。もしもう一方のプロセスが既にクリティカルセクションに変更を加えていたら、その完了を待つ。 f0 := false f1 := false turn := 0 // or 1 p0: f0 := true p1: f1 := true while f1 = true { while f0 = true { if turn ≠ 0 { if

  • モジュロ演算の替わりとなる高速処理 | POSTD

    N 個の要素セットの中からランダムに整数を1つ取り出すと仮定します。使っているコンピュータに32ビット整数の乱数を生成する機能がある場合、その数をどのように N より小さいインデックスに変換すればいいのでしょうか。例えば、サイズが N のハッシュテーブルがあると仮定します。このような場合でも、ハッシュ値(通常32ビットや64ビットの整数)を N より小さいインデックスに変換する必要があります。このような場合、大抵プログラマは解決の際、 N が2のべき乗であるようにしますが、これは必ずしも理想的とは言えません。 任意の整数 N をできるだけ公平にマッピングしたいとします。2 ³² 個存在する32ビットの整数全てから始める場合、{0, 1 ,…, N – 1}の値域に定められた値に、ちょうど2 ³² / N 個の値をマッピングできるようにするのが理想的です。 残念ながら、2 ³² は N によ

    モジュロ演算の替わりとなる高速処理 | POSTD
  • TechCrunch | Startup and Technology News

    TechCrunch Daily News Every weekday and Sunday, you can get the best of TechCrunch’s coverage. Startups Weekly Startups are the core of TechCrunch, so get our best coverage delivered weekly.

    TechCrunch | Startup and Technology News
  • 勾配降下法の最適化アルゴリズムを概観する | POSTD

    (編注:2020/10/01、2016/07/29、いただいたフィードバックをもとに記事を修正いたしました。) 目次: さまざまな勾配降下法 バッチ勾配降下法 確率的勾配降下法 ミニバッチ勾配降下法 課題 勾配降下法を最適化するアルゴリズム Momentum(慣性) Nesterovの加速勾配降下法 Adagrad Adadelta RMSprop Adam アルゴリズムの可視化 どのオプティマイザを選ぶべき? SGDの並列化と分散化 Hogwild! Downpour SGD SGDのための遅延耐性アルゴリズム TensorFlow Elastic Averaging SGD 最適化されたSGDに対する更なる戦略 シャッフル学習とカリキュラム学習 バッチ正規化 早期終了 勾配ノイズ 結論 参考文献 勾配降下法は、最適化のための最も知られたアルゴリズムの1つです。これまではニューラルネット

    勾配降下法の最適化アルゴリズムを概観する | POSTD
  • Golangの新しいGCアルゴリズム Transaction Oriented Collector(TOC)

    http://golang.org/s/gctoc Goの新しいGCのProposalが出た.まだProposal段階であり具体的な実装はないが簡単にどのようなものであるかをまとめておく. GoのGCはGo1.5において単純なStop The World(STW)からConcurrent Mark & Sweepへと変更され大きな改善があった(詳しくは“GolangのGCを追う”に書いた).先の記事に書いたようにGo1.5におけるGCの改善は主にレイテンシ(最大停止時間)に重きが置かれいた.数値目標として10msが掲げられGo1.6においては大きなヒープサイズ(500GB)においてそれを達成していた. GCの評価項目はレイテンシのみではない.スループットやヒープの使用効率(断片化の対処)なども重要である.Go1.6までのGCではそれらについて大きく言及されていなかった(と思う).例えばスル

  • 「巡回セールスマン問題」を解くアルゴリズムを可視化したムービー

    by Gaël Sacré いくつもの都市を移動するセールスマンが、すべての都市を最も効率よく(最小の移動コストで)移動できる方法を求める問題を「巡回セールスマン問題」といいますが、その解き方をビジュアル化したムービーがYouTubeで公開されています。 Traveling Salesman Problem Visualization - YouTube たとえば8つの都市があるとき、これを結ぶルートは5040通りが考えられます。 解法の一つが「欲張り法(Greedy Algorithm)」という、1つの都市から常に最寄りの都市へ移動しようと考える方法。 「最適」ではないものの、最適に近い答えを導き出してくれます。 ここで、組み合わせて使うのが「2-opt法」という方法。かなり単純なアルゴリズムで、2辺を繋ぎ直していきます。このとき、ルートに重なりがあると解消して新しいルートを作ります。

    「巡回セールスマン問題」を解くアルゴリズムを可視化したムービー
  • Sublime Textの「あいまい一致」をリバースエンジニアリング | POSTD

    Sublime Text は、私のお気に入りのプログラミング用テキストエディタです。 Sublime Textで気に入っている特徴の1つは、あいまい検索アルゴリズムです。ファイルや関数の検索が超高速なのです。これまで多くの人が、インターネット上で、この仕組みについて質問していましたが、満足の行く回答はありませんでした。そこで、私が自らこれを解明することにしました。 全部読むのが面倒な方へ 文を読まずに最終結果だけ知りたいですか? 了解! 私は、あなたを責めたりしませんよ。 インタラクティブなデモ: こちらをクリック ソースコード: C++JavaScript Sublime Textの仕組み Sublime Textのあいまい一致とは何でしょうか。そして、なぜそれはそんなに賢いのでしょうか。聞いてくれてうれしいです。 Sublime Textには、2つの非常に便利なナビゲーション関

    Sublime Textの「あいまい一致」をリバースエンジニアリング | POSTD
  • 50年前に作られたメモリ管理アルゴリズム「Buddy memory allocation」

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    50年前に作られたメモリ管理アルゴリズム「Buddy memory allocation」
  • Redirecting

    Redirecting Click here if you are not redirected.

  • http://www.csg.ci.i.u-tokyo.ac.jp/~ichikawa/visual_parsing.pdf

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

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

    Google Chromeが採用した、擬似乱数生成アルゴリズム「xorshift」の数理
    Watson
    Watson 2016/01/06
    エライ簡単な実装なのに、すごそうだな
  • Scalable Bloom Filtersとは一体....? - Qiita

    Wikipediaを漁っていたところScalable Bloom Filters(SBF)というデータ構造を発見してしまったので紹介します1。 参照した論文 http://haslab.uminho.pt/cbm/publications/scalable-bloom-filters Bloom Filter SBFの説明に入る前に、Bloom Filterについて簡単に紹介します。もっとも、日語のWikipediaでも十分詳しい説明が載っていたりするのですが……。 ささっと説明 Bloom Filterはちょっと不思議な性質を持つデータ構造の一種です2。 いわゆるSetと同じ操作を提供する 要素を入れる操作と、ある要素が入っているかを調べる操作 どちらも時間計算量O(1)で実現できる ハッシュテーブルなどを用いて実装される同種のデータ型と比して、とても空間効率が良い その代わりに、ある

    Scalable Bloom Filtersとは一体....? - Qiita
  • インターネット用の新しい圧縮アルゴリズム、Brotli のご紹介

    .app 1 .dev 1 #11WeeksOfAndroid 13 #11WeeksOfAndroid Android TV 1 #Android11 3 #DevFest16 1 #DevFest17 1 #DevFest18 1 #DevFest19 1 #DevFest20 1 #DevFest21 1 #DevFest22 1 #DevFest23 1 #hack4jp 3 11 weeks of Android 2 A MESSAGE FROM OUR CEO 1 A/B Testing 1 A4A 4 Accelerator 6 Accessibility 1 accuracy 1 Actions on Google 16 Activation Atlas 1 address validation API 1 Addy Osmani 1 ADK 2 AdMob 32 Ads

    インターネット用の新しい圧縮アルゴリズム、Brotli のご紹介
  • プレイヤーが自然に感じる乱数の作り方 - A Successful Failure

    2015年11月10日 プレイヤーが自然に感じる乱数の作り方 Tweet ゲームでは擬似乱数がよく使われるが、ある種のゲーム数学的に精度の高い擬似乱数(たとえばMT)を用いているにも関わらず、コンピュータが有利になるように乱数を操作していると批判に晒されている。 実際、数学的に正しい乱数と、プレイヤーが自然と感じる乱数には、ある種の差が存在する。北陸科学技術大学院大学の池田研究室では、プレイヤーに自然に感じる乱数の生成に関する研究を行っている。 プレイヤーが不自然に感じる理由 数学的に正しい乱数に対してプレイヤーが不自然に感じる理由としては認知バイアスが考えられる。特に事象に関連する認知バイアスとして、次が挙げられている[1]。 確証バイアス: 人は自分のもつ仮説に一致する情報を求め、反証となる証拠を避ける傾向がある。ひとたび、サイコロが操作されていると感じると、それ以降、その仮説に都

    プレイヤーが自然に感じる乱数の作り方 - A Successful Failure
  • RubyからGoの関数をつかわなくても再帰をやめなくてもアルゴリズムを改善する→はやい - prime's diary

    qiita.com mattn.kaoriya.net という記事を読んだのでアルゴリズムを改善して速くしました。 いわゆる行列累乗のテクニックを使うと(乗算部分を除けば)N番目のフィボナッチ数はで求まります。 実際にはフィボナッチ数は指数的に増大するので乗算にかかる時間が支配的になるのでもっと遅くなります(Karatsuba法なら、高速フーリエ変換を使えば)。 単純な足し算のループでは足し算の桁数を考えると なのでそれよりは随分と速くなります。 40番目ぐらいでは実行時間はほとんど0なので100万番目のフィボナッチ数を求めてみます。 こちらが元のソースコード def fib(n) f0, f1, v = 0, 1, 0 n.times do |x| if x <= 1 v = x else v = f0 + f1 f0, f1 = f1, v end end return f0 + f1

    RubyからGoの関数をつかわなくても再帰をやめなくてもアルゴリズムを改善する→はやい - prime's diary
  • A Killer Adversary for Quicksort

    SOFTWARE—PRACTICE AND EXPERIENCE, VOL. 29(0), 1–4 (0 1999) A Killer Adversary for Quicksort M. D. MCILROY Dartmouth College, Hanover, NH 03755, USA SUMMARY Quicksort can be made to go quadratic by constructing input on the fly in response to the sequence of items compared. The technique is illustrated by a specific adversary for the standard C qsort function. The general method works against any i

  • 定番アルゴリズム本リスト - カレーなる辛口Javaな加齢日記

    どうせ何度も使い回ししそうなので,独立した項目に切り離した. アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書) 作者: T.コルメン,R.リベスト,C.シュタイン,C.ライザーソン,浅野哲夫,岩野和生,梅尾博司,山下雅史,和田幸一出版社/メーカー: 近代科学社発売日: 2012/08/02メディア: 単行購入: 1人 クリック: 16回この商品を含むブログ (21件) を見るアルゴリズムイントロダクション 第3版 第2巻: 高度な設計と解析手法・高度なデータ構造・グラフアルゴリズム (世界標準MIT教科書) 作者: T.コルメン,R.リベスト,C.シュタイン,C.ライザーソン,浅野哲夫,岩野和生,梅尾博司,山下雅史,和田幸一出版社/メーカー: 近代科学社発売日: 2012/12/26メディア: 単行購入: 1人 クリック: 4回

    定番アルゴリズム本リスト - カレーなる辛口Javaな加齢日記
  • 高速化/単純化/一般化のためのアルゴリズムをパズルで習得。『プログラマ脳を鍛える数学パズル』刊行

    開発環境がどれほど激しく早く変化しても、アルゴリズムの重要性は変わりません。翔泳社ではパズルを解くことでアルゴリズムを習得できる『プログラマ脳を鍛える数学パズル』を刊行しました。書はCodeIQの人気連載「今週のアルゴリズム」の問題を収録し、さらにオリジナル問題を加えたパズル形式のクイズブックです。 開発者は仕様をどのように実装すればいいのか? 一つの仕様に対する答えはいくつも存在します。しかし、できるならプログラムは高速で、単純で、一般化されているほうが優れているといえるのではないでしょうか。 そんなプログラムを実装するには、さまざまなアルゴリズムを知っていて、ときには閃かなければなりません。それができるにはいずれにせよ、どれほど多くのコードを読み、そして書いたかという経験が必要です。 翔泳社では10月13日(火)に、パズルを解きながらアルゴリズムを学べる『プログラマ脳を鍛える数学パズ

    高速化/単純化/一般化のためのアルゴリズムをパズルで習得。『プログラマ脳を鍛える数学パズル』刊行
  • 手続き型のダンジョン生成アルゴリズム | プログラミング | POSTD

    この投稿では、以前に TinyKeepDev が こちら で述べたランダムなダンジョンを生成する技法について説明しようと思います。元の投稿に比べて、もう少し具体的に話を進めるつもりです。まずは、以下に示したアルゴリズムの一般的な動作をご覧ください。 部屋の生成 はじめに、幅と高さを持つ部屋を円の中にランダムに配置しましょう。TKdevのアルゴリズムは、各部屋のサイズを生成するのに正規分布を用いています。これは一般的にとてもいいアイデアです。なぜかと言うと、これによってより多くのパラメータを扱うことができるようになるからです。幅/高さの平均と標準偏差間の異なる比率を選ぶと、通常は見た目の違うダンジョンとなります。 ここで実行すべき関数は getRandomPointInCircle です。 function getRandomPointInCircle(radius) local t = 2

    手続き型のダンジョン生成アルゴリズム | プログラミング | POSTD