こんにちは。LegalForce Researchで研究員をしている神田 (@kampersanda) です。 LegalForce Researchでは現在、高速なパターンマッチングマシン Daachorse(ダークホース)を開発・運用しています。文字列処理の基礎である複数パターン検索を提供するRust製ライブラリです。以下のレポジトリで公開されています。 github.com 本記事はDaachorseの技術仕様を解説します。具体的には、 複数パターン検索に関係する基礎技術(トライ木・Aho–Corasick法・ダブル配列) Daachorseの実装の工夫と性能 を解説します。 以下のような方を読者として想定します。 文字列処理アルゴリズムやデータ構造に興味のある方 自然言語処理の要素技術に興味のある方 Rustライブラリに興味がある方 Daachorseについて 複数パターン検索の基
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? オセロAIを作り始めた日のこと あれは2021年4月のこと、今思い返せば偶然が重なって起きた出来事でした。 第一の偶然は、ゲームAI(ゲームを自動プレイするAI)世界4連覇の方になぜかゲームAIの初歩的な話を30分程度教わっていたことです。 第二の偶然は、Twitterの知り合いが「オセロソフトRTA」なる競技をやっているのを目にしたことです。なんじゃそりゃ、と思った私はすぐに、その競技が 「オセロで遊ぶプラットフォームをどれだけ早く作るか」を競うものだとわかりました。 面白い、やってみよう。 YouTubeでライブ配信しながら、私はオ
アメリカの国家安全保障局(NSA)によって開発された「SHA-2」は電子署名やブロックチェーンに応用される暗号学的ハッシュ関数の1つです。そのSHA-2の中でも特に使われているSHA-256でハッシュを生成するための計算プロセスがよくわかるサイト「Sha256 Algorithm Explained」を、Domingo Martin氏が公開しています。 Sha256 Algorithm Explained https://sha256algorithm.com/ Sha256 Algorithm Explainedにアクセスするとこんな感じ。 上部にある入力欄に、好きな文字列を入力します。今回はGIGAZINEのURLである「https://gigazine.net/」を入力してみました。すると、入力したURLをバイナリに変換したメッセージブロックが表示されます。メッセージブロックは32b
初心者向け 1 次元ランダムウォーク 数直線があって、原点 に点 がある。 時刻が 進むごとに、点 の位置が確率 で 、確率 で 動く。 この確率モデルを (対称な) 次元ランダムウォークと呼ぶ。 パスの個数 横軸を時間軸、縦軸を点 の位置を表すこととすると、以下のような折れ線グラフで表すことができる。 を、原点から点 までのパスの個数(言い換えると、時刻 に位置 に至る経路数)とする。 と から、ランダムウォークで した回数 と した回数 をそれぞれ計算できる。 より、 となる。("45度回転"に相当する) したがって と の偶奇が一致しているとき と二項係数を用いて表せる。 auto L = [&](int t, int x) -> modint { if(t % 2 != abs(x) % 2) { return 0; } else { return beet.C(t, (t + x
はじめに 今回は、私がツイログから最近掘り出してきて、勉強している黒木玄さんの最小二乗法についてのノートブックを紹介したいと思います。紹介といっても、私がこのノートブックを理解するのに使ったものを紹介するというほうが正しいですが、、、 線形代数をきちんと勉強している方は、黒木玄さんのノートブックだけで理解できるのだと思います(羨ましい)。数学的な解釈や間違い等あればお手数ですがどなたか指摘していただければと思います。 引用だけでは、私が記事を書く意味がないので最尤推定について少し触れておきます。最尤推定の特別な場合が最小二乗法にあたるということを簡単にですが示したいと思います。 最小二乗法は直交射影の言い換え 黒木玄さんの書いた丁寧な説明とJuliaの実装が以下から見れます。まずはこちらをご覧ください。今回触れるのは直交射影ですが、是非続きも読んでみてください。 こちらの画像は直交射影の説
本稿はRAMP数理最適化シンポジウム(2020/10/26)の講演の一部をまとめたものです.研究者に向けた講演内容ですが,数理最適化を活用したいエンジニアやコンサルタントの皆様の参考になれば幸いです.また,数理最適化に関わらず,研究者との共同研究を検討している方も一読いただけると役に立つかも知れません. はじめに 数理最適化は現実社会における意思決定や問題解決を実現するための有用な手段です.数理最適化は,下図に示すように,(1)最適化問題のモデリング,(2)アルゴリズムによる求解,(3)結果の分析・検証,(4)最適化問題とアルゴリズムの再検討という一連の手続きからなります. 数理最適化を用いて現実問題を解決するためには,まず,代表的な最適化問題とそれらに対する効率的なアルゴリズムを良く知ることが必要です.しかし,数理最適化の理論やアルゴリズムの専門的な知識があれば,それだけで現実問題を上手
競技プログラミングには概念を知っておかないと解きようがない、いわゆる覚えゲーのような問題が存在します。典型的な例が 10^9+7 といった素数で割った余りを求めろといったもので、普段業務で日常的に素数で割った余りを求めている人でもなければ、割り算がしたければフェルマーの小定理や拡張ユークリッドの互除法を使えば良いと直ぐには思い付けないのではないでしょうか。 最小共通祖先も覚えゲーで必要な概念の一種と言えます。これは読んで字のごとく、与えられた根付き木の下で2頂点に共通する祖先のうち、最も根から遠い頂点を指す概念で、例えば木の2頂点が与えられて、頂点間の経路について何かを求めろといった問題で威力を発揮することが多いです。これを用いて解ける例を挙げるとすると次の問題でしょうか。 https://atcoder.jp/contests/abc014/tasks/abc014_4 最小共通祖先を求
はじめに 千葉大学/Nospareの米倉です.今回はカルマンフィルターについて解説していきたいと思います. カルマンフィルターで何が出来るの? フィルターとあるように,カルマンフィルターが出来る基本的なことは線形ガウス状態空間モデルのフィルタリング密度を逐次的に求めることです.ここで2つのキーワード,「線形ガウス状態空間モデル」と「フィルタリング密度」という単語が出てきましたので,まずはそれらについて解説します. 線形ガウス状態空間モデルとは 状態空間モデルとは2つの確率過程からなります.1つは潜在変数・状態変数・隠れ変数といわれるもので,これは直接観測できないがマルコフ連鎖に従う変数だとモデリングされます.例えば景気の良し・悪し等,概念として存在するけれど直接は観測できないものを想像してください.2つめは観測値で,これは直接観測できるもの,つまりデータです.ただし変数に依存して観測される
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes 第108回 Googleのサーバークラスターのメモリー圧縮機能(パート2) (中井悦司) 2021年7月 はじめに 前回に続いて、2019年に公開された論文「Software-defined far memory in warehouse-scale computers」に基づいて、Googleのサーバークラスターで用いられる独自のメモリー圧縮機能について解説していきます。これは、長期間アクセスされていないデータをメモリー上で圧縮することにより、利用可能なメインメモリーを増加するというもので、「far memory」と呼ばれるメモリーアーキテクチャーから着想を得た仕組みになります。 プロモーションレートのSLO設定 前回の記事では、「長期間アクセスされていない
序章 はじめに リバーシのルール ソースコードの記述について 第1章 盤面の処理 1.1 定数と関数の定義 1.2 盤面の生成、初期化 1.3 石を返す処理 1.4 返せる石数を調べる処理 1.5 盤面をコピー、反転させる処理 1.6 その他の盤面処理 1.7 盤面の操作と表示 第2章 ゲーム木と探索 2.1 コンピュータ思考の関数定義 2.2 各関数の実装 2.3 ゲーム木 2.4 MinMax法とNegaMax法 2.5 αβ法 第3章 盤面の評価 3.1 評価関数の定義 3.2 パターンによる局面評価 3.3 評価クラスの構造 3.4 評価クラスの生成とファイルの読み書き 3.5 評価関数の実装 3.6 評価パラメータの更新 3.7 中盤の探索 3.8 自己対局による学習 第4章 性能改善 4.1 石数取得の高速化 4.2 着手の高速化 4.3 候補手リストの導入 4.4 終盤探索の
大幅な加筆改訂を加えた最新版はこちらです: https://speakerdeck.com/eumesy/optimal-transport-for-natural-language-processing --- 最適輸送の使い方 〜最適輸送の直感的理解のための単語埋込入門 兼 最適輸送入…
頂点集合が $U = \set{1,\dots,N},$ $V = \set{1,2,3}$ である完全二部グラフ $G = (U, V; E)$ を考える.以下が与えられる: 正整数 $b_1, b_2, b_3$(ただし $b_1 + b_2 + b_3 = N$),各辺 $(i, j) \in E$ の正整数重み $c_{ij}$.以下の $2$ 条件を満たすように辺部分集合 $S \subseteq E$ を選ぶとき,重みの和 $\sum_{(i, j) \in S} c_{ij}$ の最大値を求めよ: 二部グラフ $(U, V; S)$ において各頂点 $i \in U$ の次数は $1$,二部グラフ $(U, V; S)$ において各頂点 $j \in V$ の次数は $b_j$. 入力に対する制約$3 \leq N \leq 10^5$$1 \leq c_{ij} \leq
概要 清一色のシャンテン数は01BFSで計算できる。 機械的な計算なので、正当性が簡単に証明できる。 シャンテン数とは テンパイするまでに必要な牌の最小枚数のこと。 例えば 🀉🀊🀍🀎🀑🀒🀙🀚🀛🀜🀜🀀🀁 のとき、🀈🀌 を引いて🀀🀁を捨てればテンパイとなる。これより少ない枚数の入れ替えでテンパイすることはできないので、この手牌のシャンテン数は2となる。 この例のようにシャンテン数がわかりやすいケースがほとんどだが、清一色のような場合はシャンテン数を求めにくい。 特にプログラムでシャンテン数を計算する場合、正しいコードを書くことは難しい。また、正当性を保証するのも難しい。 考える問題 清一色だけを考える。以下では萬子🀇🀈🀉🀊🀋🀌🀍🀎🀏だけを扱う。 複数色ある場合や字牌を含む場合でも、清一色のシャンテン数さえ計算できていれば、軽いdpで解くことが
オンライン価格設定で面白いと思った結果を紹介します. 「適正価格を二分探索するとそこそこ良い方法になるが, 二分探索に少し手を加えるとさらに良い方法になる」という話です. 出典は R. Kleinberg and T. Leighton (FOCS 2003) の Theorem 2.1 です. この記事自体は Haifeng Xu 先生の講義スライド の第 1 回をかなり参考にしてます. ゲーム理論と機械学習の様々な興味深いトピックが網羅されていておすすめです. 問題設定 戦略の評価尺度:リグレット 自明な $\mathrm{O}(N)$ リグレット戦略 二分探索による $\mathrm{O}(\log N)$ リグレット戦略 二分探索を改良した $\mathrm{O}(\log\log N)$ リグレット戦略 まとめ 問題設定 あなたは A さんに $N$ 個のリンゴ を,$1$ 日
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く