タグ

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

  • javascript-algorithms/README.ja-JP.md at master · trekhleb/javascript-algorithms

    数学 B ビット操作 - set/get/update/clear bits, 2つの乗算/除算, 否定的にする. 等 B 因果関係 B フィボナッチ数 - クラシックとクローズドフォームのバージョン B 素数性テスト (trial division 方法) B ユークリッドアルゴリズム - 最大公約数を計算する (GCD) B 最小公倍数 (LCM) B エラトステネスのふるい - 与えられた限度まですべての素数を見つける B Is Power of Two - 数値が2の累乗であるかどうかを調べる(単純なアルゴリズムとビットごとのアルゴリズム) B パスカルの三角形 B 複素数 - 複素数とその基演算 B ラジアン&度 - 度数と逆方向の変換に対するラジアン B 高速電力供給 A 整数パーティション A Liu Hui π アルゴリズム - N-gonsに基づく近似π計算 A 離散フ

    javascript-algorithms/README.ja-JP.md at master · trekhleb/javascript-algorithms
  • Feature Column from the AMS: Pagerank

    Imagine a library containing 25 billion documents but with no centralized organization and no librarians. In addition, anyone may add a document at any time without telling anyone. You may feel sure that one of the documents contained in the collection has a piece of information that is vitally important to you, and, being impatient like most of us, you'd like to find it in a matter of seconds. Ho

    Feature Column from the AMS: Pagerank
    takuya-a
    takuya-a 2019/01/03
    PageRankの解説
  • 自動微分を実装して理解する(前編) - Qiita

    近年、機械学習への応用により自動微分の技術が再び脚光を浴び始めています1。例えばDeepLearningを微分な可能な関数の組み合わせ論へと発展させた微分可能プログラミング2では、プログラミングにより実装した関数の導関数を求める操作が基的な役割を果たしています。この記事では自動微分に対する理解をより深めるために、自動微分のアルゴリズムをゼロから実装していきたいと思います。 自動微分 自動微分はプログラムによって定義された数学的な関数が与えられたときに、その導関数をアルゴリズムによって機械的に求める手法です。 例えば

    自動微分を実装して理解する(前編) - Qiita
  • Billion-scale similarity search with GPUs - Speaker Deck

    近似近傍探索ライブラリ Faiss の元論文、"Billion-scale similarity search with GPUs" https://arxiv.org/abs/1702.08734 の紹介です。

    Billion-scale similarity search with GPUs - Speaker Deck
    takuya-a
    takuya-a 2018/11/17
    論文読み会で使用したスライドです。GPUで超高速に近似近傍探索できるFaissのアルゴリズムに関する論文です。面白かったのでぜひ。
  • 単体マシン(x86/x64)における最速sort algorithmは何か? - maropuのメモ墓場

    今日はsortの日なのでしょうか・・・ twitterのタイムラインを眺めていると,tim-sortというalgorithmが話題のようです. quick sortよりも高速でmerge sortのように安定しているソートアルゴリズムtim sort http://d.hatena.ne.jp/gfx/20111019/1318981818 単体マシン(x86/x64)における高速なsort algorithmの研究はIntelが近年行っていて,有名な実装だとbufferingを利用したradix-sort実装と,SIMDを利用したmerge-sort(bitonic-sort)実装があります. 1. radix-sort: Fast Sort on CPUs and GPUs: A Case for Bandwidth Oblivious SIMD Sort, SIGMOD'10, ht

    単体マシン(x86/x64)における最速sort algorithmは何か? - maropuのメモ墓場
  • http://www.is.doshisha.ac.jp/text/basic/pseudocode20090921.pdf

    takuya-a
    takuya-a 2018/11/12
    擬似コードゼミ
  • PACT 2007 | AA-Sort: A New Parallel Sorting Algorithm for Multi-Core SIMD Processors - Abstract

    古い論文ですが,PACT 2007で発表したSIMDを使うソートアルゴリズムについての解説を書いてみます.これは,VLDB 2015で発表する論文("SIMD- and Cache-Friendly Algorithm for Sorting an Array of Structures") のベースになっており,PACTの論文では整数配列のソートを対象にしていて,VLDBの論文ではそれを構造体配列のソートに拡張しました.PACTの論文で提案した技術のうち,SIMDを使うマージソートは,その後,いろいろな論文で再実装されてCPU上やGPU上でも使われています. 論文とスライドなどはこちらから→http://researcher.ibm.com/researcher/view_person_subpage.php?id=3982 論文の概要 やりたいこと 目的は "ソートを高速に実行したい!

    PACT 2007 | AA-Sort: A New Parallel Sorting Algorithm for Multi-Core SIMD Processors - Abstract
  • データ競合(data race)と競合状態(race condition)を混同しない - Qiita

    T/O マルチスレッド・プログラミングの文脈では、「データ競合(data race)」と「競合状態(race condition)」は直交した異なる概念を表す1。両者ともに回避すべき事象だが、問題を取り扱うレイヤは明確に区別されるべき。 データ競合(data race)は、マルチスレッド・プログラム実装上の問題である。 競合状態(race condition)は、並行処理システム設計上の問題である。 ここではJava, C#, C++あたりのマルチスレッド対応手続き型ベースのプログラミング言語を取り上げるが、言語パラダイムによらずマルチスレッド処理(共有メモリ型の並行処理機構)ならば広範に適用可能である。また言語仕様として両者を明確に区別するRust言語も取り上げる。 「データ競合(data race)」が何であるかは、それぞれのプログラミング言語仕様にて定義される。競合状態(race c

    データ競合(data race)と競合状態(race condition)を混同しない - Qiita
  • RecSys'18@Vancouver trip report - myui's memo

    10月上旬にRecSys'18というレコメンデーション分野の国際会議に初参加してきた。出張報告がてらに聴講した内容をまとめる。twitterに記録していたので文章はそこから起こした。時差ぼけもあり、全部は聞けていないので悪しからず。 レコメンデーション分野はNetflix、Spotify、Hulu、Pandora、Criteoなどインダストリでの研究が盛ん。実データを持ってたり、実際にビジネス適用しているので研究背景に説得力がある。 Industrial Sessionもそうだったけど推薦だと企業もエッジな研究していて良い..(critriaがどこも異なるのでやりやすい )*1日の推薦業界の人もこの辺まできて発表してほしい。 Netflixにおける取り組みなど企業の取り組みの方がアカデミアよりも進んでいるところもあった。日からもGyao!(Yahoo!J)、U-next、Abema、リ

    RecSys'18@Vancouver trip report - myui's memo
  • 簡潔ビットベクトルでRubyをlog N倍速くした - クックパッド開発者ブログ

    技術部のフルタイムRubyコミッタの遠藤(@mametter)です。昨日の Hackarade #04 の開催報告に続き、2日連続で記事を投稿します。 今回は、ある条件下でのRubyの実行速度を高速化した話を紹介します。この改善はすでにMRIの先端にコミットされていて*1、年末リリース予定のRuby 2.6に含まれる予定です。 ひとことで言うと、「簡潔ビットベクトルを索引に使うことで、プログラムカウンタから行番号を計算するアルゴリズムをO(log N)からO(1)に改善した。これにより、TracePoint有効時やコードカバレッジ測定下で、長さ N のメソッドの実行が O(N log N) から O(N) に高速化される」ということです。順に説明します。 背景:Rubyのバイトコードの構造 この最適化を理解するにはまず、Rubyのバイトコードのある特徴を知る必要があります。 たとえば x

    簡潔ビットベクトルでRubyをlog N倍速くした - クックパッド開発者ブログ
  • TCP BBR congestion control comes to GCP – your Internet just got faster | Google Cloud Blog

    We're excited to announce that Google Cloud Platform (GCP) now features a cutting-edge new congestion control algorithm, TCP BBR, which achieves higher bandwidths and lower latencies for internet traffic. This is the same BBR that powers TCP traffic from google.com and that improved YouTube network throughput by 4 percent on average globally — and by more than 14 percent in some countries. BBR all

    TCP BBR congestion control comes to GCP – your Internet just got faster | Google Cloud Blog
    takuya-a
    takuya-a 2018/10/09
    TCP BBR: Googleが開発した新しい輻輳制御アルゴリズム
  • TCAMと同等以上の性能をソフトウェアで実現したBGPルータ@Interop Tokyo 2018:Geekなぺーじ

    Latency Numbers Every Programmer Should Know より 今回、Kamueeで使われている機材でのCPUキャッシュ参照にかかる時間は、上記値とは異なりますが、メインメモリ参照がCPUキャッシュ参照と比べて著しく遅いことは変わりません。 (Intel 64とIA-32アーキテクチャのCPUでの値(単位はサイクル)は、「Intel 64 and IA-32 Architectures Optimization Reference Manual」のp.54参考にしてください。) 100Gbpsの性能をPCアーキテクチャの機材で稼働するソフトウェアで実現するために、CPUキャッシュに収めることが非常に大事なのです。 そして、CPUキャッシュに収まるようなサイズに経路情報を扱うデータを圧縮して収めることで高速化ができるのは、メインメモリからの読み込みが頻繁に発生

  • 前処理O(n)クエリO(1)のLCAと静的RMQ - ジョイジョイジョイ

    時間計算量 <O(n), O(1)> の LCA(Lowest Common Ancestor) と RMQ(Range Minimum Query) を C++ で実装しました。 アルゴリズムの解説はDさんのスライド [1] LCA and RMQ ~簡潔もあるよ!~ がとても分かりやすいのでそちらを参照してください。 概要だけ説明します。 LCA の概要 LCA は頂点を dfs 順で訪れた順に並べると深さの列の RMQ に帰着されます。このことは [2] 蟻 などに載っています。 この列は隣り合う数の差がちょうど になっています。 この列を 個ずつのブロックに分け、それぞれのブロック内の最小値を求めます。 ブロックの数は 個になるので、ブロックの区間の最小値を求めるクエリは sparse table を使うと前処理 、クエリ で処理できます。 ブロックの中についてですが、各ブロック

  • LCA and RMQ ~簡潔もあるよ!~

    2. ERATO若手輪読会 2014/11/19 • LCA: Lowest Common Ancestor (最近共通祖先) • 根付き木 T 上の2頂点 u, v に対するクエリ LCA(u,v) • u と v の祖先であって、もっとも深い頂点 x を返す • RMQ: Range Minimum Query (区間最小値) • 列 A[1:n] 上の区間 [l, r] に対するクエリ RMQ(l,r) • A[l:r] 中での最小値 A[i] を取るような i を返す • LCA と RMQ には密接な関係がある LCAとRMQ 2 u v x id 1 2 3 4 5 6 A[id] 1 8 2 6 3 5 l r i T

    LCA and RMQ ~簡潔もあるよ!~
    takuya-a
    takuya-a 2018/09/10
    これはわかりやすい
  • レシピの画像検索に必要な技術 - クックパッド開発者ブログ

    研究開発部の @ayemos です。ダイエット中です。 画像検索とは 検索という言葉からは、いくつかの単語を入力してそれを含む文章を検索するという体験を自然と連想できるかと思います。このような検索の体験の第一歩は、ユーザーが欲しい情報に対して単語の列としてクエリを構築するということから始まります。例えば、「支払うべき住民税の額」という情報を得たい時には「目黒区 住民税」というクエリを自ら考えて入力するといったようにです。 単語列を利用した文章検索を行う際、検索クエリが来るたびに検索対象となる文章を上から下まで全探索するのでは時間がかかってしまいます。そのためしばしば全探索の代わりに転置インデックスを用いて高速化された探索手法を用います。転置インデックスは端的に単語からそれを含む文章(とその位置)をマップする情報であり、これを用いることで、単語の列をクエリとして、それらのすべてあるいは一部を

    レシピの画像検索に必要な技術 - クックパッド開発者ブログ
    takuya-a
    takuya-a 2018/08/28
    いいやつ来てた
  • リレーショナルデータベースの仕組み (1/3) | POSTD

    リレーショナルデータベースが話題に挙がるとき、私は何かが足りないと思わずにはいられません。データベースはあらゆるところで使われており、その種類も、小規模で便利なSQLiteからパワフルなTeradataまで様々です。しかし、それがどういう仕組みで機能しているかを説明したものとなると、その数はごくわずかではないでしょうか。例えば「リレーショナルデータベース 仕組み」などで検索してみてください。ヒット数の少なさを実感できると思います。さらにそれらの記事は短いものがほとんどです。逆に、近年流行している技術(ビッグデータ、NoSQLJavaScriptなど)を検索した場合、それらの機能を詳しく説明した記事はたくさん見つかると思います。 リレーショナルデータベースは、もはや大学の授業や研究論文、専門書などでしか扱われないような古くて退屈な技術なのでしょうか? 私は開発者として、理解していないものを

    リレーショナルデータベースの仕組み (1/3) | POSTD
  • 分散システム、本当に「正しく」開発できますか? #JTF2018 / July Tech Festa 2018

    July Tech Festa 2018 で使用したスライドです。二相コミットを例として、分散アルゴリズムの検証にモデル検査を使用する手法について解説しています。また、代表的なモデル検査ツールである SPIN、TLA+、P について、同じシステムを各ツールで記述してみることでその特定の違いについて学びま…

    分散システム、本当に「正しく」開発できますか? #JTF2018 / July Tech Festa 2018
  • 『みんなのデータ構造』発売および予約開始のお知らせ – 技術書出版と販売のラムダノート

    ご来店ありがとうございます。 日より、新刊『みんなのデータ構造』の発売を開始しました。紙書籍の発送は7月25日前後を予定しています。電子書籍は購入後すぐにお読みいただけます。 『みんなのデータ構造』は、Pat Morin氏による “Open Data Structures” を翻訳して書籍として出版するものです。Pat Morin氏による原文は、クリエイティブコモンズ継承ライセンス(CC BY)で公開されており、誰でも自由に教材として活用できるだけでなく、内容に手を入れて別のライセンスで再配布したり、販売したりできるようにされています。堀江氏、陣内氏、田中氏による翻訳と、ラムダノート株式会社による編集も、すべてCC BYで公開しており、同様に自由に利用していただくことが可能です。 書籍版『みんなのデータ構造』(紙書籍および電子書籍)につきましては、クリエイティブコモンズライセンスではなく

    『みんなのデータ構造』発売および予約開始のお知らせ – 技術書出版と販売のラムダノート
  • 分散システムの限界について知ろう

    ↓↓↓↓訂正あります。↓↓↓↓ 2018/07/02に株式会社エフコード社内で行われた勉強会のスライドです。 訂正版(随時更新中): https://docs.google.com/presentation/d/15HOMfAbtdWwO48njcB8IdkN3kVAMu3wsmZo0O3S-f_4/edit?usp=sharing 専門家による資料・専門家向けの資料ではありません。自分自身で学習し、論文・文献等を読解してまとめた内容となります。間違い等あるかもしれませんが、あれば是非コメント頂ければと思います。 【訂正事項】 スライド16: 誤:たった一つのプロセスが故障しただけでも有限時間で合意できない 正:たった一つのプロセスが故障しうるだけでも有限時間で合意できない スライド20: 誤: 重要: あるschedule σ1, σ2 がdisjoint (nodeが被ってない) なら

    分散システムの限界について知ろう
  • 計算量オーダーの求め方を総整理! 〜 どこから log が出て来るか 〜 - Qiita

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

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