タグ

algorithmに関するtakuya-aのブックマーク (125)

  • 計算量オーダーの求め方を総整理! 〜 どこから log が出て来るか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。今回は計算量オーダーの求め方について書きます。 0. はじめに 世の中の様々なシステムやソフトウェアはアルゴリズムによって支えられています。Qiita Contribution ランキング作成のために用いるソートアルゴリズムのような単純なものから、カーナビに使われている Dijkstra 法、流行中のディープラーニングに用いられている確率的勾配降下法など、様々な場面でアルゴリズムが活躍しています。アルゴリズムとはどんなものかについて具体的に知りたい方には以下の記事が参考になると思います: アルゴリズムとは何か ~ 文系理系問わず楽しめる精選 6 問 ~ アルゴリズムを学ぶと $O(n^2)$ や $O(n\log{n})$ や $O(2^n)$ といった計算量オーダーの概念が登場します。こうした記法を見ると

    計算量オーダーの求め方を総整理! 〜 どこから log が出て来るか 〜 - Qiita
  • 典型データ構造まとめ - beet's soil

    なんか前回伸びたので 参考 hamayanhamayan.hatenablog.jp ei1333's page 宣伝 beet-aizu.hatenablog.com 以下とりあえず辞書順(そのうち典型度順にしたい) Binary Indexed Tree 一点加算、先頭からの区間和、k番目に大きい値が で可能 library/binaryindexedtree.cpp at master · beet-aizu/library · GitHub 容易に多次元に拡張が可能(実用上は2次元くらい? library/binaryindexedtree2D.cpp at master · beet-aizu/library · GitHub Binary Trie 二進数を管理するTrie木 全体にXOR、k番目に大きい値、lower_bound等が で可能 library/binarytri

    典型データ構造まとめ - beet's soil
  • アルゴリズムとは何か!? ~ 文系理系問わず楽しめる精選 6 問 ~ - Qiita

    今の場合は A さんが 31 歳の場合のストーリーでしたが、A さんが 20 歳~ 35 歳のうちのどの年齢であったとしても、似たようなストーリーで必ず 4 回の質問で当てることができます!(他の例も是非考えてみてください。) ちなみに、このような「真ん中で切ってどちらかに絞って行く」タイプのアルゴリズムには二分探索法という名前がついています。応用情報技術者試験でも頻出のテーマですので馴染みのある方も多いと思います。 1-2. つまり、アルゴリズムとは 上の年齢当てゲームという問題では、相手の年齢を当てる「方法・手順」を二分探索法に基づいて導きました。このようにアルゴリズムとは、 問題を解くための方法・手順 のことです。さて、アルゴリズムと聞くと「コンピュータ上で実装されたプログラム」のことを思い浮かべる方も多いと思いますが、必ずしもコンピュータと関係がある必要はなく、日常生活でも多々登場

    アルゴリズムとは何か!? ~ 文系理系問わず楽しめる精選 6 問 ~ - Qiita
  • Revisiting b+-trees

    Apr 18, 20183 likes1,378 viewsAI-enhanced description This document discusses B+-trees, which are commonly used to index data in databases. It provides an overview of the structure and functionality of B+-trees, including keys, pointers, fanout, leaf nodes, and internal nodes. It also describes Btree4j, an open source Java implementation of B+-trees that supports features like paging, prefix index

    Revisiting b+-trees
    takuya-a
    takuya-a 2018/04/19
    実装してみたい
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

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

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
  • learning-algorithms.com

  • 検索や推薦をWebWorkerでやる - 橋本商会

    [ {title: "タイトル1", links: ["リンク先1", "リンク先2", "リンク先3"] }, {title, links}, {title, links} ]

    検索や推薦をWebWorkerでやる - 橋本商会
  • 高次元ベクトルデータ検索技術「NGT」のpythonライブラリ公開のお知らせ

    ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog はじめに 検索技術の菅原です。 以前にこのTech Blogで紹介されたNGT(Neighborhood Graph and Tree)という高速な近傍探索を実現するソフトウエアのpython用インターフェースが公開されました。python機械学習のライブラリが多く公開されており、より手軽にNGTを組み合わせて使うことができるでしょう。 そこで今回はword2vecのベクトルを近傍探索する実践的な内容を紹介します。word2vecを扱うライブラリとしてgensimを使用します。word2vecやgensimの詳しい説明は省略しますが、分からなくてもpythonの文法を知っていれば理解できると思います。今回使用した環境はMacBo

    高次元ベクトルデータ検索技術「NGT」のpythonライブラリ公開のお知らせ
  • ビット演算 (bit 演算) の使い方を総特集! 〜 マスクビットから bit DP まで 〜 - Qiita

    はじめに はじめまして。 NTTデータ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 C や C++ を使用しているとしばしばビット演算を行う場面が出て来ます。 計算機リソースが限られている状況では、ビットを用いることでデータ量を少なく済ませたり、計算コストを小さく抑えたりすることができるメリットがあります。 記事では、ビット演算を用いて実現できる処理について、簡単なものから高度なものまで集大成します。極力わかりやすく頑張って執筆しました。特に前半 4 つはビットの説明の中でもかなりわかりやすい方だと思います。後半の 7 つのテーマは比較的高度なアルゴリズムの話題ですので、フラグ管理やマスクビットについて詳しく学びたい方は前半 4 つを中心に読んでいただいて、後半 6 つは必要に応じて読んでいただければと思います。反対にビットの知識はあってビットを用いたアルゴリズ

    ビット演算 (bit 演算) の使い方を総特集! 〜 マスクビットから bit DP まで 〜 - Qiita
  • New benchmarks for approximate nearest neighbors

    New benchmarks for approximate nearest neighbors 2018-02-15 UPDATE(2018-06-17): There are is a later blog post with newer benchmarks! One of my super nerdy interests include approximate algorithms for nearest neighbors in high-dimensional spaces. The problem is simple. You have say 1M points in some high-dimensional space. Now given a query point, can you find the nearest points out of the 1M set?

    New benchmarks for approximate nearest neighbors
  • 典型的な DP (動的計画法) のパターンを整理 Part 1 ~ ナップサック DP 編 ~ - Qiita

    はじめに --- DP は役に立つ はじめまして。NTTデータ数理システムでアルゴリズムを探求している大槻 (通称、けんちょん) です。 好きなアルゴリズムは最小カットやマッチングですが、会社ではなぜか「DP が好きな人」と呼ばれています。 巷ではよく「DP なんて実務では使わない」といった言説が定期的に流れますが、そんなことはないです。僕自身この 2 年間で DP が使える実務案件に 3 件くらい関わりました! それはともかくとして、DP を学び立ての方がよく抱く悩みとして「バリエーションが多すぎて混乱するし、統一的なフレームワークがほしい」というのがあります。確かに DP のバリエーションは非常に多岐にわたるのですが、そのほとんどが以下の 3 つのフレームワークで説明できると思います: ナップサック DP 区間 DP bit DP 今回はこのうちのナップサック DP について、とにかく

    典型的な DP (動的計画法) のパターンを整理 Part 1 ~ ナップサック DP 編 ~ - Qiita
  • ‪実世界で超頻出!二部マッチング (輸送問題、ネットワークフロー問題)の解法を総整理!‬ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 0. はじめに --- 二部マッチング問題は実世界で超頻出 はじめまして。NTTデータ数理システムでアルゴリズムを探求している大槻 (通称、けんちょん) です。 好きなアルゴリズムはタイトルにもある二部マッチングですが、会社ではなぜか「DP が好きな人」と呼ばれています。 以前に動的計画法 (DP) の典型パターンを整理した記事を執筆したのですが、DP と並んで超頻出の話題として二部マッチング問題があります。二部マッチング問題とは、例えばマッチングアプリなどに見られるように、2 つのカテゴリ間で最適なマッチングを構成していく問題です。実

    ‪実世界で超頻出!二部マッチング (輸送問題、ネットワークフロー問題)の解法を総整理!‬ - Qiita
  • 二重振り子の精度保証付き数値計算

    少し前(5月頃)、二重振り子のシミュレーション動画がtwitterで流行したことがありました。最初のtweetがこれ。 わずかに異なる初期値をもった50の二重振り子のシミュレーションを動画にしたもので、途中まで完全に重なっているように見える振り子が一気にバラける様子がとても面白い。 次は、それを三重振り子にしたもの。 gmpを用いて高精度計算をしており、ねとらぼで記事にもなりました。 どちらも常微分方程式の計算にはルンゲクッタ法を用いています。わずかな初期値のずれが後に大きな違いをもたらすことがとてもよく分かる動画ですが、一方で、ルンゲクッタ法で計算された値も真値とはわずかにずれており、当然その誤差も同様に後で大きな違いをもたらすことになります。だとすると、果たして意味のある計算になっているのかという疑問が生じます。 そこで、二重振り子の軌道を精度保証付きで計算し、ルンゲクッタ法とどのく

    二重振り子の精度保証付き数値計算
  • flint blog: 相関係数のインクリメンタル計算

    先月と今月は、ソフトウェア開発 (この記事で触れた案件の続き) のお仕事を在宅で。 今回作成したプログラムは、最初に先方から説明を受けた時点では処理の内容も単純で、それほど難度の高くないものだと思っていましたが、実は意外なところに罠が潜んでいました。 サンプル (標) が逐次追加されていく集合の間の相関係数を計算し、その結果をリアルタイム表示する、というのが件で開発するソフトウェアに要求される主要な機能だったのですが、これがなかなかのクセモノ。 扱うサンプルの数は数千~数万個のオーダなのですが、その集合に対して、リアルタイムで4,096通りの組み合わせで相関係数を算出する必要があります。 処理対象となるサンプルの数が増えるにつれ、計算処理に要する時間は急速に増加。 表示の更新間隔はどんどん間延びしていき、傍から見ているぶんには、フリーズしている状態と区別が付きません。 (一応、計算処理

  • お天気プロコンと圧縮アルゴリズムについて - 兼雑記

    https://beta.atcoder.jp/contests/wn2017_1/standings むっちゃ僅差で2位。残念。この212点差がどのくらい僅差かというと、最後にいじってたところにもう2行変更を入れることを思いつけていれば、軽く2000点は差がついて勝ててたと思いますし、そうでなくても後30分もあれば実装できた細かいヘッダの圧縮で逆転できた量です。自分に悔しがる気持ちというのがこれほど残ってたのか、と驚くほど悔しいです。でも勉強になったし楽しかったです。 やったことを書きつつ、そもそも圧縮アルゴリズムについて、私としては感動的だった知見を得られたので、書いてみようかと思います。 今回のコンテストは、チャンネル1つの(RGBじゃなくてグレースケールだと思えば良い)画像を64枚を可逆圧縮するというものでした。その64枚の画像は同じ座標について光の波長と時間を変えて気象衛星が観測

    お天気プロコンと圧縮アルゴリズムについて - 兼雑記
  • ダブル配列で決定性有限オートマトンを表現する - Qiita

    はじめに Qiitaデビューです.@kampersandaです. この記事では,さまざまな文字列処理アルゴリズムの理論的基礎となっている決定性有限オートマトン(以下,オートマトンと書きます)をダブル配列により表現する方法を紹介します.この記事で紹介する手法は以下の論文で提案されているものです. 前田敦司, 水島宏太. オートマトンの圧縮配列表現と言語処理系への応用. プログラミングシンポジウム, pp. 49–54, 2008. まずダブル配列について簡単に説明しますと,ダブル配列とはトライと呼ばれるラベル付き木を表現するためのデータ構造の一つです.検索が非常に高速であり,形態素解析器MeCabの辞書引きなどに用いられています.トライのダブル配列表現についての解説はブログや書籍などで多く拝見されます.Wikipediaのトライ木にも説明が載っています.一方で,実はオートマトンも表現できると

    ダブル配列で決定性有限オートマトンを表現する - Qiita
  • Bing検索の裏側―BitFunnelのアルゴリズム - Hatena Developer Blog

    はてなアプリケーションエンジニアの id:takuya-a です。 この記事では、Microsoft の検索エンジン Bing で採用された BitFunnel アルゴリズムを紹介します。 昨年のエンジニアアドベントカレンダーでは、文字列検索のアルゴリズム全般について紹介しました(文字列アルゴリズムの学びかた - Hatena Developer Blog)。今年はそのなかでも、インデックス(索引)を使った全文検索アルゴリズムについてのお話になります。 この記事の前半は全文検索の入門にもなっていますので、検索技術になじみがない方にも楽しんでいただけるのではないでしょうか。 逆に、「そんなのもう知ってるよ!」という方は、題である「BitFunnel アルゴリズムの詳細」から目を通していただければと思います。 この記事は、はてなエンジニア Advent Calendar 2017の21日目の

    Bing検索の裏側―BitFunnelのアルゴリズム - Hatena Developer Blog
    takuya-a
    takuya-a 2017/12/22
    検索も楽しいよ!って伝えたくて書きました。これをきっかけに情報検索に興味をもってくれる方が増えたらうれしいです。
  • 論文 "BitFunnel: Revisiting Signatures for Search" を読んだメモ - stop-the-world

    まとめると 気になりポイント 1. Introduction 2. Background and prior work 2.1 Inverted Indexes 2.2 Bit-String Signatures 2.3 Bit-Sliced Signatures 2.4 Bit-Sliced Blocked Signatures 3. THE BITFUNNEL SYSTEM 3.1 Architectural Overview 3.2 The Cost of False Positives 4. BITFUNNEL INNOVATIONS 4.1 Higher Rank Rows 4.2 Frequency Conscious Signatures 4.3 Sharding by Document Length 5. PERFORMANCE MODEL AND OPTIMIZATION

    論文 "BitFunnel: Revisiting Signatures for Search" を読んだメモ - stop-the-world
    takuya-a
    takuya-a 2017/12/22
    読みました
  • The Case for Learned Index Structures

    Tim Kraska111Work done while author was affiliated with Google. MIT Cambridge, MA kraska@mit.edu Alex Beutel Google, Inc. Mountain View, CA alexbeutel@google.com Ed H. Chi Google, Inc. Mountain View, CA edchi@google.com Jeffrey Dean Google, Inc. Mountain View, CA jeff@google.com Neoklis Polyzotis Google, Inc. Mountain View, CA npolyzotis@google.com Abstract Indexes are models: a B-Tree-Index can b

    The Case for Learned Index Structures
  • Index 1,600,000,000 Keys with Automata and Rust - Andrew Gallant's Blog

    It turns out that finite state machines are useful for things other than expressing computation. Finite state machines can also be used to compactly represent ordered sets or maps of strings that can be searched very quickly. In this article, I will teach you about finite state machines as a data structure for representing ordered sets and maps. This includes introducing an implementation written