タグ

algorithmに関するyuguiのブックマーク (210)

  • ネット上に氾濫する自己組織化マップ(SOM)の情報を俺が整理する【随時更新】 - Qiita

    【こちらの記事は新しい情報を見つけ次第、更新していきます。また皆さんからの「こんなのもあるよ!」も大歓迎です!】 はじめに 皆さんは自己組織化マップもしくは自己組織化写像(Self-Organizing Maps: SOM)と呼ばれる手法をご存知でしょうか?多変量データの可視化などに使われるアルゴリズムで、現在の機械学習やデータ解析ブームの遥か昔から使われてきました。 しかし、私が思うにSOMは非常に「初見殺し」な手法です。SOMについて学ぼうとする人の多くは、ネット上のあらゆる種類の情報に惑わされ、用途に対してあまり適切な説明がされていないテキストで学んでしまうことも少なくありません。その理由は大きく2つあります。 二つの解釈があり、それぞれで適切な運用方法も異なる SOMには脳機能のモデル化というサイエンス的な側面とデータ解析という工学的な側面があります。元々は前者の発想で考案されたも

    ネット上に氾濫する自己組織化マップ(SOM)の情報を俺が整理する【随時更新】 - Qiita
  • [0.0, 1.0) の乱数を得るための“本当の”方法

    レイトレ合宿9(*)のセミナー発表スライドです。 * https://sites.google.com/view/rtcamp9/home - 2023/09/08 “除算法2”追記。(@Reputelessさんありがとうございました)

    [0.0, 1.0) の乱数を得るための“本当の”方法
  • Pike VMとEarley法の関係についてRubyで実装して考えてみる | makenowjust-labs/blog

    正規表現マッチングの実装手法の1つとしてPike VMと呼ばれるものがあります。 これはGo言語の正規表現実装やRustのregex crateで使われている手法であり、正規表現rrrと入力文字列wwwに対してO(∣r∣×∣w∣)O(|r| \times |w|)O(∣r∣×∣w∣)の計算量でマッチングができるのが特徴です。 Earley法はJay Earleyの提案した文脈自由文法 (CFG) の構文解析手法の1つです。 すべてのCFGを構文解析できる手法で最悪計算量はO(∣w∣3)O({|w|}^3)O(∣w∣3)ですが、無曖昧であればO(∣w∣2)O({|w|}^2)O(∣w∣2)で、決定的であればO(∣w∣)O({|w|})O(∣w∣)で構文解析ができます。 実装してみると分かりますが、Pike VMとEarley法には類似している点があり、Earley法をPike VMの発展系の

    Pike VMとEarley法の関係についてRubyで実装して考えてみる | makenowjust-labs/blog
  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
  • キャッシュアルゴリズムの比較 - falsandtruのメモ帳

    アプリケーションなどOSより上に作られる高水準のプログラムではハードウェアの速度と容量を考慮しない数学的キャッシュアルゴリズムが使われ主にこれを稿の対象とする。キー探索用マップと明示的キャッシュサイズ(対となる値が保持されているキーのサイズ)は計算量に含まれない。 LRU 最も単純かつ高性能な基礎的キャッシュアルゴリズム。そのため性能比較のベースラインとして常に使用される。逆に言えば実用最低水準の性能である。スキャン耐性皆無でスキャン一発でキャッシュとヒット率がリセットされゼロからやり直しになるため非常に脆く不確実な性能となりベンチマークにおける性能が表面上さほど悪くなく見えても実際の性能はこのような外乱により大きく低下しやすい。このためLRUより高度な主要アルゴリズムはすべて大なり小なりスキャン耐性を備えている。ちなみにプログラミング言語最大のパッケージマネージャであるJavaScri

    キャッシュアルゴリズムの比較 - falsandtruのメモ帳
  • 披露宴の席次を Gromov-Wasserstein 最適輸送で決めた話

    数理最適化 Advent Calendar 2022の9日目です。 新緑の頃、新型コロナ流行の合間をぬって、ささやかな結婚披露宴を表参道の式場にて催しました。諸々の準備の中でも席次はこだわるとキリがなく、数理最適化を使って決めました。人間関係をできるだけ保つようなゲスト集合から座席集合への写像を考えます。 ゲスト間人間関係を考慮して良い感じの配席を考えたい tl;dr 披露宴をしました 知り合い関係が複雑かつ長机でゲストの席配置が難しい 組合せ爆発は物。高々20人の配置に1週間以上悩んだ結果、数理最適化した方が早いと結論 「知り合い同士を近くに配席する」問題は非凸な二次計画になり汎用ソルバでうまく解けない ゲストを席に"輸送"すると考えて最適輸送の一種で解くとうまくいった 質的に非凸な問題を非凸のまま、しかし性質の良い距離構造を活用するアプローチが奏功したのではないか 再現用Colab

    披露宴の席次を Gromov-Wasserstein 最適輸送で決めた話
  • log をつけずに解くのが好きな人向けの記事 - えびちゃんの日記

    \(\Theta(n \polylog(n))\) 時間で解くのは簡単だけど、実際には \(\Theta(n)\) 時間で解けるよーという問題はちょくちょくあります。 競プロ界隈では log を削ることに意欲的な人は一部だけな気がします*1が、話として知っておいても損はあまりない気がするので、挙げてみます。 ここではざっくり紹介するに留め、詳細は各自調べてもらうようなスタンスになっています。 紹介 RMQ 中央値 篩による素数判定 過半数 行最小値 接尾辞配列 最深共通祖先 Decremental neighbor query Level ancestor SWAG Gray code の利用 ±1 配列の転倒数 周期検出 周期検出 2 その他メモ おわり 紹介 RMQ 長さ \(n\) の配列 \(a = (a_0, a_1, \dots, a_{n-1})\) に対して、区間最小値 \

    log をつけずに解くのが好きな人向けの記事 - えびちゃんの日記
  • テキストエディタで使われがちなデータ構造 Piece Table の概要と実装 - A Memorandum

    テキストエディタのデータ構造 Gap method Piece Table method Piece Table の構造 Piece Table の実装 Piece Table のメソッド まとめ テキストエディタのデータ構造 テキストエディタで採用されているデータ構造にはいろいろあります。 こちらの論文 Data Structures for Text Sequences では各種データ構造について比較検討されています。 多くは、Gap method や Piece table method をベースにしたものが多いのではないでしょうか(図で言う最下部の中心の丸印に当たります)。最近では Rope なども有名ですね。 Gap method Gap method では、現在のカーソル位置で、テキストバッファを2つに分割し Gap を間に挟み、カーソル位置に対する編集(テキスト追加/削除)を

    テキストエディタで使われがちなデータ構造 Piece Table の概要と実装 - A Memorandum
  • CRDT (Conflict-free Replicated Data Type)を15分で説明してみる - Qiita

    CRDTについて勉強したので纏めてみました。15分くらいでざっとわかったつもりになれる感じで纏めてみたつもりです。 全体スライド Slideshareのスライドが埋め込めなかったので、↓からアクセスしてくださいm(-_-)m 下記はスライドの講演の書き下しのようになっているので、スライドだけ見るんじゃなくて、スライドを見ながら文章を読み進めたい方向けです。 CRDTとは 今回は、CRDTというデータ構造について紹介します。CRDTはそもそも2011年にSSS(Stabilization, Safety, and Security of Distributed Systems)という国際会議で、INRIA(フランス国立情報学自動制御研究所)のMarc Shapiro博士によって発表された、比較的新しいモノです。 CRDTは"Conflict-free Replicated Data Type

    CRDT (Conflict-free Replicated Data Type)を15分で説明してみる - Qiita
  • 共同編集を支える技術とライブラリの活用 - ICS MEDIA

    Google Docs』や『Figma』といったリアルタイムな共同編集ツールの恩恵を受けている人は数多くいるでしょう。『Visual Studio Live Share』のようなエンジニアに嬉しいツールも生まれ、今日ではオンライン上でも円滑なコミュニケーションが可能になっています。 これらのツールの基礎にあるのが「共同編集」のテクノロジーです。記事ではこの技術に焦点を当て、その仕組みと主にフロントエンドでの実用例について紹介します。 記事の前半では、リアルタイムな共同編集に用いられる技術やアルゴリズムについて、発展の歴史とあわせて紹介します。解説用のコードにはJavaScriptおよびTypeScriptを使用しますが、フロントエンドエンジニアに限らず共同編集の仕組みについて気になる読者が知識を深めるきっかけとなるはずです。 さらに後半ではフロントエンドの開発者目線で、前半で紹介した技

    共同編集を支える技術とライブラリの活用 - ICS MEDIA
  • リアルタイム共同編集のアルゴリズム (Operational Transformation; OT) を理解する試み – RORO

    Google Docsのように文書を複数人でリアルタイムに共同編集できるアプリケーションがあります。あのような機能は、多かれ少なかれ、Operational Transformation (OT; 操作変換) という考え方を使って実現されているようです。興味があったので、このOTについて調べてみました。 (追記: これからは OT でなく CRDT だという話 → I was wrong. CRDTs are the future) なおGoogle Docsではいわゆる「リッチテキスト」を共同編集できますが、ここでは話を簡単にするために「プレーンテキスト」を共同編集することを想定します。 リアルタイム共同編集の流れ 共同編集システムの登場人物は次の通りです: サーバ x 1(各クライアントから届く編集操作をもとに、最新の文書を保持します) クライアント x N(文書を編集する側です) そ

  • 中日新聞:自動車工場のガロア体 QRコードはどう動くか

    その誕生を地元新聞も経済新聞も記事にしなかった。2年後、『コードの情報を白黒の点の組み合わせに置き換える』と最下段のベタ記事で初めて紹介された時、その形を思い浮かべることができる読者はいなかった。いま、説明の必要すらない。QRコードはなぜ開発され、どう動くのだろうか。 QRコードは、自動車生産ラインの切実な要請と非自動車部門の技術者の「世界標準の発明をしたい」という野心の微妙な混交の下、1990年代前半の日電装(現デンソー)で開発された。 トヨタグループの生産現場では、部品名と数量の記された物理的なカンバンが発注書、納品書として行き来することで在庫を管理する。そのデータ入力を自動化するバーコード(NDコード)を開発したのがデンソーだ。 バブル全盛の1990年ごろ、空前の生産台数、多様な車種・オプションに応えるため、部品も納入業者も急激に増え、NDコードが限界を迎えていた。63桁の数字しか

  • 最短経路問題としての裁定取引

    チャンスを感じますか? あなたは進取の気性に富んだ個人なので、それを悪用しようとするかもしれません。5人のニンジンから始めて、あなたはボブに近づき、彼が喜んで取引する速度で、5人のニンジンを10個のジャガイモと交換します。 次に、あなたはピーターにジャガイモを持って近づきます。彼があなたに5レタスを交換することを知っています。それからあなたはあなたの5つのレタスでポールに近づきます、そして彼はあなたのレタスと10のニンジンを交換します。 いくつかの賢い取引の後、あなたはニンジンの富を2倍にしました。裁定取引の機会を利用して、5人のニンジンを10人に変えました。 その後、村人たちは、ボブ、ピーター、ポールだけがトレーダーではない、より洗練された市場を開拓するかもしれません。代わりに、この小さな村は、ニンジン/レタス市場、レタス/ジャガイモ市場、およびジャガイモ/ニンジン市場を開発する可能性が

    最短経路問題としての裁定取引
  • Binary search with modern processors

    第16回 StringBeginners での発表資料

    Binary search with modern processors
  • タイムマシン・コンピューター

  • APIに利用制限をかけるとしたらどういうやりかたがあるのか - おもしろwebサービス開発日記

    この記事はSmartHR Advent Calendar 2020 11日目の記事です。 僕のお手伝いしているSmartHRでは、毎週バックエンドエンジニアが集まり、技術的なトピックについて共有、相談しあうミーティングを開催しています。そのミーティングでは僕がTipsなどを共有するコーナーが常設されています*1。 このエントリでは、そのコーナーで共有した内容をひとつ紹介します。 APIに制限をかける方法について APIを外部に提供するとき、一定の制限をかけてユーザがAPIを乱用するのを防ぐことはよくあることではないでしょうか。素直に考えると「1時間に5000回までAPIを実行できる」のようなやり方を思いつきますね。GitHubAPIもそのやり方ですし、SmartHRAPIも同様です。 じゃあそれでいいのでは。となるかもしれませんが少し待ってください。いろんなクライアントがAPIを大量に

    APIに利用制限をかけるとしたらどういうやりかたがあるのか - おもしろwebサービス開発日記
  • 論文|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)
  • SSTable and Log Structured Storage: LevelDB - igvita.com

    By Ilya Grigorik on February 06, 2012 If Protocol Buffers is the lingua franca of individual data record at Google, then the Sorted String Table (SSTable) is one of the most popular outputs for storing, processing, and exchanging datasets. As the name itself implies, an SSTable is a simple abstraction to efficiently store large numbers of key-value pairs while optimizing for high throughput, seque

    SSTable and Log Structured Storage: LevelDB - igvita.com
  • The English (Porter2) stemming algorithm

    knack knackeri knack knag knave knave knavish knead knead knee kneel kneel kneel kneel knee knell knelt knew knick knif knife knight knight knight knit knit knit knit knive knob knob knock knock knocker knocker knock knock knopp knot knot Developing the English stemmer (Revised slightly, December 2001) (Further revised, September 2002) I have made more than one attempt to improve the structure of

  • ちけっとピアツーピアの解説

    LCNEM、『転売防止』チケットシステム「Ticket Peer to Peer」を公開。 https://t.co/rs0DSqRaN3 @PRTIMES_JPから — LCNEM語 (@lcnem_ja) September 20, 2018 奇抜な発想でシステム作り上げました。 ステーブルコインとも絡ませていき、ブロックチェーンのマスアダプションを狙っていきます! https://t.co/SN4SRNHM0E — 木村優/Yu Kimura (@YuKimura45z) September 20, 2018 これはもともとBlockChainJam2018のためにサイト埋め込み型のチケットシステムを作る目的で始まったのですが、アイデアがよさげだったので一般化しました。 これの仕組みを少し詳しく解説しておきます。 2/11追記 チケットだけでなく課金ゲームアカウントの転売防止に

    ちけっとピアツーピアの解説