タグ

algorithmに関するa2ikmのブックマーク (195)

  • ボックス=ミュラー法 - Wikipedia

    ボックス=ミュラー法のイメージ。単位正方形(u1, u2)内部の色の付いた点は円状に散布され、2次元正規分布となる。上と右の余白に点で示される曲線は変換後の確率密度関数である。図は有限の区間でのプロットであるが、実際には変換後の分布は無限に広がる。the SVG fileでは、カーソルを合わせた点と関係する点をハイライトする。 ボックス=ミュラー法(ボックス=ミュラーほう、英: Box–Muller's method)とは、一様分布に従う確率変数から標準正規分布に従う確率変数を生成させる手法[1]。計算機シミュレーションにおいて、正規分布に従う擬似乱数の発生に応用される。統計学者ジョージ・ボックス(英語版)とマーヴィン・マラー(ミュラー)によって考案された[2]。 概要[編集] 確率変数 X 及び Y が互いに独立で、ともに(0, 1)上での一様分布に従うものとする。このとき、 で定義され

    ボックス=ミュラー法 - Wikipedia
  • ケリー基準 ~最適ベッティング戦略について考えよう~ - Qiita

    原文 今回はこちらの論文(The Kelly Criterion: Implementation, Simulation and Backtest, Niels Wesselhofft)の読書感想文を書いていきたいと思います。 私自身の知識の整理と皆さんの参考になれば幸いです。 あくまでも読書感想文であるため、あくまで参考までにお願い致します。 また、原文の誤植や計算ミスが多かったのですが、そちらはこちらで出来る限り訂正させていただいております。 また、この記事が与える如何なる結果に対しても責任は持ちませんので、ご容赦くださいませ。 専門家からの意見もお待ちしておりますので、どんどんコメントして下さると幸いです。 概要(この論文の主旨) この論文では、ポートフォリオ理論で広く使用される平均分散アプローチ以外で、ケリー基準によるアプローチを検証します。主にシミュレーション研究および経験に基づ

    ケリー基準 ~最適ベッティング戦略について考えよう~ - Qiita
  • グラフィカルモデルに基づく因果探索手法の調査 - Fire Engine

    最近,因果推論や因果探索に興味を持ち,勉強している.というのも最近,ゆううきさん と一緒に分散システムの異常の原因を即時に診断するための研究を進めている.原因を診断するためのアプローチとして,サーバやコンテナ等から取得できる様々なメトリック(CPU使用率やメモリ使用率など)を(グラフ理論における)ノードとして,因果グラフを構築することを考えている.メトリック同士の単なる「相関」ではなく,結果と原因の関係である「因果」を捉えようとするアプローチである.例えば,システムの障害が発生した場合,相関だけでは,AとBが関連がありそうというところまでしか言えないが,因果を特定できると理想的には,Aの原因はBであるといった議論ができるため,有用だと考えている. 実際に,前述のような因果グラフを構築して障害の原因を特定しようというアプローチは,以下の例に挙げるようにここ数年で増えている印象がある. 「Mi

    グラフィカルモデルに基づく因果探索手法の調査 - Fire Engine
  • 最小カットを使って「燃やす埋める問題」を解く

    最小カットを使って「燃やす埋める問題」を解く方法について、問題とソースコードつきで、まとめました。ニコニコ生放送「TopCoderでプログラムしてみた」2000回記念放送の資料です。

    最小カットを使って「燃やす埋める問題」を解く
  • 素因数分解アルゴリズム(特にSQUFOF)のこと - 再帰の反復blog

    主要な素因数分解アルゴリズム SQUFOFについて 目次 主要な素因数分解アルゴリズム 素因数の性質に依存するアルゴリズム(ρ法、p-1法、楕円曲線法) 素因数の性質に依存しないアルゴリズム(SQUFOF、二次ふるい法、一般数体ふるい法) SQUFOFについて 連分数をもちいた素因数分解 シャンクスの改良 アルゴリズムの説明 例 アルゴリズムの改良 Schemeによるプログラム例 主要な素因数分解アルゴリズム ここでいう素因数分解アルゴリズムは完全に素因数分解をするアルゴリズムではなく因数(約数)をひとつ見つけ出すアルゴリズムなので、完全な分解が必要なら再帰的に実行したり試し割り法と組み合わせる必要がある。 素因数の性質に依存するアルゴリズム(ρ法、p-1法、楕円曲線法) 都合のよい性質を持った素因数を含んでいる場合に成功するアルゴリズム。都合のよい素因数を含んでいる場合は、汎用のアルゴリ

  • Tkrzw: a set of implementations of DBM

    In general, if you want a key-value storage with the highest performance, choosing the file hash database is recommended. If you need ordered access of records, choosing the file tree database is recommended. If you need scalability of ordered databases, choosing the file skip database is recommended. If you need extreme performance, the on-memory hash database and the on-memory tree database are

  • Goで作るテキストエディタ - Sansan Tech Blog

    はじめに みなさんこんにちは。Sansan事業部プロダクト開発部のiOSエンジニア荒川です。 以前はRDBMSの記事*1を寄稿し、好評いただいたこともあり、定期的に車輪の再発明系の記事を書いていこうと思います。 さて日はタイトルの通り、VimEmacsに代表されるターミナルで動作するインラインテキストエディタをGoで開発してみました。 ソースコードは以下のリポジトリに置いているため、ぜひ参考にしてください。 github.com 完成品 文字だけだとイメージも湧きにくいので、まずは完成品をお見せします。 最低限エディタの動きは出来ている、というレベルの完成度ですね🙏 特徴 1000行インラインエディタ 文字入力/挿入/削除 画面スクロール キーボードショートカット ファイル読み込み/保存 Goのコードハイライト機能 実装の方針 今回はただ開発するだけではなく、いくつかのこだわりポイン

    Goで作るテキストエディタ - Sansan Tech Blog
  • 中年プログラマの競プロ事始 - hydrakecat’s blog

    これはなに 自分がここ2年ほど趣味として競技プログラミングをやった経緯と感想です。いわゆるプログラマの定年と呼ばれる35歳を過ぎてから始めたのですが、思ったよりも楽しめました。自分のようなシニアと呼ばれるプログラマが競プロに興味を持ってくれたらいいなと思って書きました。 競技プログラミング競プロ)とは 競技プログラミング(以後、競プロ)は、プログラミングをして順位を競うコンテストです。コンテストはたいていオンラインで毎週のように開かれており、誰でも参加できます。形式としては、与えられた時間内にいくつかの問題を解くコードを提出して、その正解数と提出までにかかった時間を競うというものです。たいていは、コードの実行時間および使用メモリに制限があり、その制限内で実行できるコードを書く必要があります。またコードが正解かどうかは出題者が用意したテストケースをパスするかどうかで判定されます。 多くのコ

    中年プログラマの競プロ事始 - hydrakecat’s blog
  • 動的計画法によるDVDのディスク分割の改善

    こんにちは。「家族アルバム みてね」の開発チームに所属している黒川と申します。今回は、その「みてね」の機能の1つで、写真や動画をDVDにして注文できる機能を動的計画法を使って改善した話をします。 「みてね」では家族の写真や動画をアップロードし、アプリ上で月ごとに振り返ることが可能になっています。一方、たとえば自宅のテレビやパソコンでまとめて振り返りたいという要望もあり、「みてね」では最長過去1年間の写真や動画をDVDにまとめて注文することができます。 このときに問題となるのがDVDのディスク分割です。1年分の写真や動画はともすると1枚のディスクに収まりきらず、複数のディスクに分割する必要があります。いままでは、動画を月ごとに分けて各ディスクに入れていく、というシンプルなアルゴリズムで分割を行っていました。しかし、ユーザーさんからは「1枚のディスクにすこしの動画しかないがどうなっているのか」

    動的計画法によるDVDのディスク分割の改善
  • bmf-tech.com - GolangでgoblinというURLルーターを自作した

    概要GolangでURLルーターを自作したので実装するまでの過程をメモしておく。 準備URLルーターを実装する際に行った下準備をまとめる。 データ構造とアルゴリズムURLをどのようにマッチングさせるか、というロジックについて検討する。 多くのライブラリでは、データ構造として木構造がよく扱われているので、どんな種類の木構造を採用するかを考えてみた。 文字列探索に特化した木の中で、時間的・メモリ的計算量がよりベストなものを選定しようとすると、基数木というのが良さそうに見えるので最初はそれを採用しようとしていたのだが、実装が難し過ぎて挫折をした。 もう少し身近でシンプルなものをということでトライ木を採用することにした。 net/httpのコードリーディングnet/httpが持つマルチプレクサの拡張として実装を行うため、内部の仕組みについてある程度理解しておく必要がある。 GolangのHTTPサ

    bmf-tech.com - GolangでgoblinというURLルーターを自作した
  • キャッシュ機構 TinyLFU のアーキテクチャと、それを支えるアルゴリズム - 好奇心に殺される。

    Computer Science キャッシュ機構 TinyLFU のアーキテクチャと、それを支えるアルゴリズム TinyLFUの論文を読んだので概要と、それを支えるアルゴリズムを紹介します。 Overview TinyLFU はアクセス頻度を近似し、軽量でハイパフォーマンスに設計されたキャッシュアルゴリズムです。最近、Database Internals を読んでいて TinyLFU を知ったのですが、Database Internals では TinyLFU の詳細が書かれていなかったので、TinyLFUが提案されている論文を読んでみました。その内容をザックリ解説してみようと思います。 論文はこちらです。 TinyLFU: A Highly Efficient Cache Admission Policy いきなりTinyLFUの紹介を始めると混乱するので、ベースとなる技術やアルゴリズム

    キャッシュ機構 TinyLFU のアーキテクチャと、それを支えるアルゴリズム - 好奇心に殺される。
  • 二分探索アルゴリズムを一般化 〜 めぐる式二分探索法のススメ 〜 - Qiita

    0. はじめに 二分探索法は単純ながらも効果が大きく印象に残りやすいもので、アルゴリズム学習のスタート地点に彩られた花という感じです。二分探索というと「ソート済み配列の中から目的のものを高速に探索する」アルゴリズムを思い浮かべる方が多いと思います。巨大なサイズのデータを扱う場面の多い現代ではそれだけでも十分実用的ですが、二分探索法はもっとずっと広い適用範囲を持っています。 記事では、二分探索法のエッセンスを抽象化して、適用範囲の広い「二分探索法の一般形」を紹介します。同時に無数にある二分探索の実装方法の中でも「めぐる式二分探索」がバグりにくいと感じているので、紹介したいと思います。 注意 1: 二分探索の計算時間について 二分探索の計算時間について簡単に触れておきたいと思います。例えば「$n$ 個の要素からなるソート済み配列から目的の値を探索する」というよく知られた設定であれば、 単純な

    二分探索アルゴリズムを一般化 〜 めぐる式二分探索法のススメ 〜 - Qiita
    a2ikm
    a2ikm 2020/07/05
    “a[index] >= key という条件を満たす最小の index を見つけたい” その逆についても言及されている。
  • circleci tests split --split-by=timingsについて調べた・自作してみた ·

    この記事はCircleCI Advent Calendar 2018の24日目の記事です。 テスト分割実行ファンの皆さんこんにちは。 今回はCircleCIの並列テストにおいて、いい感じにテストファイルを分割することを考えていきたいと思います。 【イメージ アニgif】 テストファイルをいい感じに分割したい まず前提として、「いい感じに分割したい」とはどういうことかということを説明します。 例えば今、テストファイルが7個あって、それぞれのテストにかかる時間が経験上「10秒、6秒、5秒、4秒、3秒、2秒かかる」ということがわかっているとします。 この場合、普通に1プロセスで実行すると10+6+5+4+3+2で30秒かかります。 ここで、CircleCIでparallelism: 3(3並列)で分割テストすることを考えます。 まず悪い例として「[10, 3], [6, 5], [4, 2]」と

    circleci tests split --split-by=timingsについて調べた・自作してみた ·
  • Raft Consensus Algorithm

    What is Raft? Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. We hope Raft will make consensus available to a wider audience, and that this wider audience will be

    Raft Consensus Algorithm
  • 分岐予測の簡単な歴史 - Part 1 | POSTD

    ※これは、 RC(The Recurse Center:プログラマ教育施設) によって組織された講演シリーズである”localhost”を始動するために、Two Sigma(ツーシグマ)での2017年8月22日の分岐予測に関する講演の原稿を仮に書き起こしたものです。 コードで分岐を使われている方は、どれくらいいらっしゃいますか? ifステートメントやパターンマッチングを使われているという方、よろしければ手を挙げてください。 ほとんどの聴衆が手を挙げる 次の質問に関しては手を挙げてもらうつもりはありませんが、もしそうお願いした場合、恐らく手を挙げる人の数は少なくなるのではないでしょうか。その質問とは、「分岐を実行する際、CPUが何をして、そのパフォーマンスは何を意味しているのかを十分に理解しているか」、そして「分岐予測に関する最新の論文を理解できるか」というものです。 この講演の目的は、CP

    分岐予測の簡単な歴史 - Part 1 | POSTD
  • すごいTrie - Qiita

    「to」がキーで「7」がバリューです。これを trie で表すと下図のようになります。 Trie - Wikipediaより引用 ノードの中に書かれている「tea」や「in」がキーであり、ノードの下に書かれている「3」や「5」がキーに対応する値です。 あるノードのキーは、その親ノードのキーに、親ノードから伸びる有向辺に書かれている文字を、付け足した文字列です。実際には、ノードには直接キーが保存されず、そのノードに到達するまでの辺のラベルの列がキーになってます。 接頭辞がノードと対応するので prefix tree とも呼ばれます。 計算量 計算量は色々な表現をすることが可能ですが、ノードの分岐は高々アルファベットの種類数なのでこれを定数とすれば、$ m $を文字列の長さとして以下の操作が$ O(m) $で出来ます。(アルファベットの種類数を考慮すると$\log$が付きます。) 文字列の検索

    すごいTrie - Qiita
  • Implementing Raft: Part 0 - Introduction - Eli Bendersky's website

    This is the first post in a multi-part series describing the Raft distributed consensus algorithm and its complete implementation in Go. Here is a complete list: Part 0: Introduction (this post) Part 1: Elections Part 2: Commands and log replication Part 3: Persistence and optimizations Raft is a relatively new algorithm (2014), but it's already being used quite a bit in industry. The best known e

  • Algorithms with Go

    Algorithms with Go is free, but you need to provide a working email address to gain access. I won't spam you and unsubscribing is very easy. "I understand how basic algorithms work, but I can't actually implement them in code" Don't worry, you aren't alone! Not everyone will admit it, but many developers feel exactly what you are feeling when they get started with coding, algorithms, and more. Whe

    Algorithms with Go
  • 二分木 - Rustではじめるデータ構造とアルゴリズム(第1回)

    Rustの特徴のひとつは、所有権(ownership)・移動(move)・借用(borrow)の概念です。これらがコンパイル時に厳格にチェックされることにより、古くから未定義挙動でプログラマを悩ませてきたダングリングポインタなどの問題がなくなり、メモリ安全性がもたらされます。 しかし一方で、自分で多少複雑なデータ構造を定義しようとする場合にはコンパイルを通すだけでもかなりの知識・力量が要求されます。 この(不定期)連載では、 Rustではじめるデータ構造とアルゴリズム と題し、プログラミングコンテストなどでよく見かける基礎的なデータ構造とアルゴリズムを、できるだけシンプルにRustで実装していきます。 &, &mut, Box, Rc, Cell, RefCell などの使い分けや、なぜそれを使う必要があるかの解説を、実例を通して行います。 第1回は、最もシンプルな木構造である 二分木 を

    二分木 - Rustではじめるデータ構造とアルゴリズム(第1回)
  • 数学好きから見た量子コンピュータ~57を因数分解した話~

    Quantum Computer Programmer, Software Engineer at The University of Tokyo

    数学好きから見た量子コンピュータ~57を因数分解した話~