タグ

関連タグで絞り込む (347)

タグの絞り込みを解除

Algorithmに関するslay-tのブックマーク (187)

  • LIS でも大活躍! DP の配列使いまわしテクニックを特集 - Qiita

    0. はじめに 動的計画法の解法に対しては、「一次元 DP」や「二次元 DP」といった呼称でよびたくなりがちです。たとえば ${\rm dp}[i] := i$ 番目の地点まで到達するまでの最小コスト というような DP テーブルを用いるような DP1 は一次元 DP であり、 ${\rm dp}[i][w] := N$ 個の品物のうち最初の $i$ 個の品物の中から、重さが $w$ を超えない範囲でいくつか選んだときの、選んだ品物の価値の総和の最大値 というような DP テーブルを用いるような DP2 は二次元 DP である、といった具合です。後者はいわゆるナップサック問題に対する DP として有名ですね! 二次元 DP の配列を再利用して一次元へ しかし今回は、DP を一次元や二次元とよぶことにあまり意味がないかもしれない...という話をします。たとえばナップサック DP は、なんと実

    LIS でも大活躍! DP の配列使いまわしテクニックを特集 - Qiita
  • 二分探索木 - Rustではじめるデータ構造とアルゴリズム(第2回)

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

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

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

    二分木 - Rustではじめるデータ構造とアルゴリズム(第1回)
  • 様々なrate limitアルゴリズム - Carpe Diem

    概要 インターネットに晒されているWebサービスでは TV等で紹介されたことによる大量流入 悪意ある人物からの攻撃 クライアントのバグに依る大量リクエスト など、来想定していた以上のトラフィックが来ることはよくあります。 単純にシステムを構築すると大規模トラフィックに対応できずシステムがスローダウンしてしまうため、何かしらrate limitをかけておいた方が良いです。 ただしrate limitと一口に入っても色々あるため、今回は主なrate limitアルゴリズムを紹介します。 Leaky bucket Leaky bucketはデータ転送レートを一定にする(=上限を設定する)アルゴリズムです。 下の図のように、様々な流量の水流がそのバケツに流れ込んでも小さな穴からは一定の水流が流れ出す仕組みです。 ref: What is the difference between token

    様々なrate limitアルゴリズム - Carpe Diem
  • プログラミングコンテストでのデータ構造

    2. 内容 • Union-Find 木 • バケット法と平方分割 • セグメント木 • 共通点:自分で実装するデータ構造 • セグメント木が中心 – IOI でのセグメント木の出題が非常に多い

    プログラミングコンテストでのデータ構造
  • タッパーの自己言及式 - Wikipedia

    タッパーの自己言及式は、ジェフ・タッパー (Jeff Tupper) によって考案された不等式であり、特定の条件の下で式を満たす二つの数の組を二次元のグラフに描くと不等式そのものの形となる。 2001年にコンピュータグラフィックスを扱う国際会議SIGGRAPHで発表された[1]。 不等式は次のように定義される。 は床関数、 は剰余を表す。ここで、k を以下の値とする (543桁の数を3桁区切りで記述している)。 960 939 379 918 958 884 971 672 962 127 852 754 715 004 339 660 129 306 651 505 519 271 702 802 395 266 424 689 642 842 174 350 718 121 267 153 782 770 623 355 993 237 280 874 144 307 891 325

    タッパーの自己言及式 - Wikipedia
  • The Master Algorithm

    最近いくつかのところで The Master Algorithm (Domingos 2015) というが話題になったのでざっと見てみました。日でも翻訳作業が進行中らしいです。内容は、機械学習歴史を概観し、最後に、著者のやっていたプロジェクトを押す、というものです。 (2021年5月更新。邦訳は「マスターアルゴリズム ─ 世界を再構築する『究極の機械学習』」) 著者によれば、機械学習は、記号論理派(Symbolist)、神経回路網派(Connectionist)、進化計算派(Evolutionary)、ベイズ派(Bayesian)、類推派(Analogizer)、という5つの流派からなっており、それを統合するのが著者の提案したマルコフ論理ネットワークとのことです。書の前半はこれらの流派それぞれを、数式を使わずにノリで説明するものです。類推派って何だよと思うかもしれませんが、これは支

    The Master Algorithm
  • 論文|snmalloc: A Message Passing Allocator (ISMM 2019)

    「snmalloc: A Message Passing Allocator」という論文を読んだのでその紹介です。論文は ISMM (International Symposium on Memory Management) 2019 に採択されており、論文とソースコードは GitHub (microsoft/snmalloc) で公開されています。リポジトリ名から分かる通り、著者の多くが Microsoft Research に所属しています。 免責 読み間違えている可能性があります。正確な情報が欲しい方は必ず論文を読んでください。誤りの指摘や補足、議論などは GitHub Issue や Twitter へお願いします。 更新履歴 2019/07/08 bump pointer と free list の next entry pointer を判定する方法について追記 2019/0

    論文|snmalloc: A Message Passing Allocator (ISMM 2019)
  • 因果推論で検索システムを問い直す(2) - Counterfactualを知りたい

    はじめに ランキング学習のシリーズ記事の第二弾です*1. 前回の記事ではUnbiased Learning-to-Rankと呼ばれる, clickというimplicit feedbackを用いて relevanceに対して最適なスコアリング関数を学習するための損失関数を設計する方法について議論しました. その中で紹介したのがexamination parameter の逆数によって損失を重み付けするInverse Propensity Weighting (IPW)と呼ばれる方法でした. IPWはclickデータのみから真の損失関数を不偏推定することができるという嬉しさがあった反面, 肝心のexamination parameterの推定方法に関しては Result Randomizationの紹介のみに留まっていました. 記事では, ユーザー体験を著しく害したり, KPIに大きな打撃を

  • 15パズル

    最近, 高木貞治先生の「数学小景」を眺めていたら, その中に「十五の駒遊び」という題で15パズルの話があった. ところで, 最近知った15パズルの面白い解き方は, 福岡教育大学の藤さんの提案する「回転型操作」によるものだ. 2件の論文がある. 情報処理学会研究報告にある「スライドパズルにおける回転型操作とアクセスビリティ」と, 近着の数式処理にある「Loop generatorによる15パズルの最適アルゴリズムとGod's numberについて」. 私は明解な手順には関心があるが, 最短手順には興味がないので, 後の論文は眺めた程度であった. 前の論文も解法は数式処理しシステムGAPを使って記述してあるので, GAPに馴染まぬ凡人にはとんと理解し得ぬ. 以下では私がSchemeで書いたプログラムの考え方を述べる. この回転操作(英語ではloop generatorというらしい)は, 前回

  • GitHub - opencomputeproject/Project-Zipline: Defines a lossless compressed data format that is independent of CPU type, operating system, file system, and character set, and is suitable for compression using the XP10 algorithm.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

    GitHub - opencomputeproject/Project-Zipline: Defines a lossless compressed data format that is independent of CPU type, operating system, file system, and character set, and is suitable for compression using the XP10 algorithm.
  • 【決定版】コンピュータ将棋のHASHの概念について詳しく | やねうら王 公式サイト

    いまどきの将棋ソフトを使っていると、「HASH 50%」などと表示されている。これはHASH利用率と呼ばれる。この数字が大きくなってくると探索の効率が悪くなる。要するに潤沢にメモリがある場合に比べると弱くなる。これは、どれくらいの値までであるなら適切なのか?HASH利用率が99%にならない限りHASHには余裕があるものなのか?HASHはどういう仕組みになっているのか?HASH利用率が50%の状況で、ハッシュ衝突はしているのか?など、わりとソフトを長年使っていても知らない人が多いのでここに原理から詳しく説明した決定版的な記事を書く。 ShogiGUI将棋神やねうら王に表示されている「HASH」とは何ですか? 一度探索した局面を保存しておく表です。 この表に登録するときにハッシュ(hash)という値を使って登録するため、ハッシュテーブル(hash table)と呼ばれます。これを略して(値と

  • コーディング面接とSnakeゲームに唯一共通すること | POSTD

    80年代か90年代に生まれた方ならおそらく、「Snake」というゲームのことをご存じでしょう。「ご存じ」とはつまり、Nokia 3310のちっぽけな画面上でたわいもない巨大ヘビを育てるのに膨大な時間を費やしていたのではないかということです。Nokiaの携帯電話について、皆さんは他にどんな特徴を覚えていますか? バッテリーが長持ちしたことではないでしょうか。 Nokiaはとても”原始的な”携帯電話であったにもかかわらず、バッテリーを使い果たすことなくSnakeゲームで何時間も遊べたのは、どういう訳だったのでしょう? 理由の大部分は、優れた強固なコンポーネントのおかげでした。しかし、貢献度はそれより低く、あまり語られることもありませんが、スライディングウィンドウと呼ばれる手法も長時間のプレイに役立っていたのです。 Snakeだけを扱った記事を1書きたいのは山々ですが、実は記事では後者の、魅

    コーディング面接とSnakeゲームに唯一共通すること | POSTD
  • Understanding Go Memory Allocation - Gophercon UK

    Ever wondered how does Go manage memory allocation? In this talk we are going to explore Go’s memory allocator and understand how its algorithm interacts with the operating system to manage memory!

    Understanding Go Memory Allocation - Gophercon UK
  • Backpropagation demo

    Backpropagation algorithm The backpropagation algorithm is essential for training large neural networks quickly. This article explains how the algorithm works. Please scroll down... Simple neural network On the right, you see a neural network with one input, one output node and two hidden layers of two nodes each. Nodes in neighboring layers are connected with weights \(w_{ij}\), which are the net

  • 計算量オーダーについて - Qiita

    プログラムの計算量を表すO記法について、使用例を調査しました。 計算量(オーダー)とは? あるアルゴリズムを使った演算の性能を表す指標。 計算量は大きく二つに分けられる。 時間計算量(処理時間の計算量) 空間計算量(メモリ使用量の計算量) 単に計算量(オーダー)と言った場合、時間計算量のことを指す。 O記法(オーダー記法) 特定のアルゴリズムでの計算が、どれくらい掛かるかを表した記号。 処理対象のデータが非常に大きくなった時の処理時間を大雑把に評価する。 処理時間が短い順(性能が良い順)に代表的なオーダーをまとめる。 O記法 概要 使用例

    計算量オーダーについて - Qiita
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 今回はソートについて記します。 0. はじめに データ構造とアルゴリズムを学ぶと一番最初に「線形探索」や「ソート」が出て来ます。これらのテーマは応用情報技術者試験などでも頻出のテーマであり、アルゴリズムの Hello World とも呼ぶべきものです。 特にソートは、 計算量の改善 ($O(n^2)$ から $O(n\log{n})$ へ) 分割統治法 ヒープ、バケットなどのデータ構造 乱択アルゴリズムの思想 といった様々なアルゴリズム技法を学ぶことができるため、大学の授業でも、アルゴリズム関連の入門書籍でも、何種類ものソートアルゴリズムが詳細に解説される傾向にあります。記事でも、様々なソートアルゴリズムを一通り解説してみました。 しかしながら様々な種類のソートを勉強するのもよいが、「ソートの使い方」や

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
  • EMアルゴリズム徹底解説 - Qiita

    ブログは、混合ガウス分布を題材に、EMアルゴリズムという機械学習界隈では有名なアルゴリズムを丁寧に解説することを目的として書いています。 また、この記事は、「数学とコンピュータ Advent Calendar 2017」の24日目の記事です。 そして長いです。 1. はじめに 観測した確率変数 $X$ をよく表現する、モデル $p(x|\theta)$ のパラメータを求めることが確率分布の推定ではよく行われます。つまり最尤法ですね。より複雑な分布になるとその分布の構造に潜在変数(Latent Variable) $Z$ があると仮定してモデル化を行うと、シンプルな組み合わせで $X$ の分布を表現できることがあります。今回扱う混合ガウス分布もその一つです。 のちに説明しますが、データセットの種別を完全データ集合と不完全データ集合に分けた場合、不完全データ集合に属するようなデータセットはデ

    EMアルゴリズム徹底解説 - Qiita
  • NVIDIAが「この画像をあの画像っぽく」できる高速で高品質なAIアルゴリズム「FastPhotoStyle」を公開

    NVIDIAが「この画像をあの画像っぽく」できる高速で高品質なAIアルゴリズム「FastPhotoStyle」を公開2018.03.28 12:4531,133 たもり 物かと見間違うクオリティ。 以前取り上げた雪原を草原に変えるAdobeのアルゴリズムなど、画風変換のアルゴリズムは何も真新しいものではありません。しかし、NVIDIAが発表したAIアルゴリズム「FastPhotoStyle」は、既存のアルゴリズムより各段に速い処理スピードを誇り、出来上がった画像のクオリティも高いのです。 FastPhotoStyleを開発したのは、 NVIDIAとカリフォルニア・マーセッド大学の科学者チーム。先月、「A Closed-form Solution to Photorealistic Image Stylization」という論文を発表しました。 PetaPixelによれば、従来のこういった

    NVIDIAが「この画像をあの画像っぽく」できる高速で高品質なAIアルゴリズム「FastPhotoStyle」を公開
  • 軽い気持ちでLinkedListを使ったら休出する羽目になった話 - Qiita

    ざっくり言うと リスト構造のデータに対してランダムアクセスはしちゃだめだぞ。お兄さんとの約束だ! 発端 数年前に他部署の支援で作ったJavaのシステムに、ちょっとデカめのデータを突っ込んだらありえないほど遅いので助けてくれ、と連絡が入った。 まぁクエリとかインデックスをちょっと見れば直るっしょ・・・と鼻をほじりながら支援に向かった。 処理内容 遅い部分の処理は以下のようなものであった。 処理対象のデータをListで受け取る。 それをforループで1件ずつ前処理する。 処理結果をオブジェクトに格納し、ORマッパーでDBにINSERTする。 これだけ? そう、これだけだ。並列処理なんて高級なことはもちろんやってない。 インフラ調査 処理中のサーバのようすを調査する。今回のインフラは典型的な3層3サーバ構成。 WEBサーバはなにもかもが余裕。 APサーバではCPUを1つ使い切っている。 14コア

    軽い気持ちでLinkedListを使ったら休出する羽目になった話 - Qiita