コンピューティング

コンピュータは言われたとおりのことを、良いアルゴリズムと悪いアルゴリズムの差を無視できなくなるほどの速さで実行します。ここでは両方を走らせ、その差が開いていくのを見ることができます。

Newest in this category

章

単体のツールではなく、短い系列として。各ステップは次のステップに具体的なものを渡すので、順番に進める価値があります。

L1: 基礎

コンピュータはどうやってプログラムを動かすのか

COMP論理ゲートから、プログラムが動く仕組みまで。NANDゲートだけで、あらゆる回路を組み立てられます。ゲートで作った加算器は、引き算にも使えます。リトルマンコンピュータは、その加算器の隣に百個の郵便受けを並べたもの。プログラムも数値も同じメモリに置かれ、プログラムカウンタが指す場所の内容を、コンピュータは命令として実行します。

  1. 01論理ゲート
  2. 022進数の計算
  3. 03リトルマンコンピュータ
  4. 04メモリとバイト
  5. 05コールスタック
  6. 06キャッシュと局所性

L1: 基礎

暗号はいかにして破られるか

COMPここに並ぶ暗号はどれも、文字そのものを隠す代わりに、別の何かを表に残してしまいます。換字式暗号なら文字の出現頻度が残り、キーワード暗号ならそれが列となって現れ、二度使い回されたワンタイムパッドなら空白の位置が漏れ出します。一切の手がかりを残さないのは、文面とまったく同じ長さを持つ無作為な鍵だけ。そうなると、その鍵をいかにして相手へ届けるかが最大の難問となります。最後の二つのページでは、誰の目にも触れる開かれた場所で、それを成し遂げる道筋を見ていきます。

  1. 01換字式暗号
  2. 02ヴィジュネル暗号
  3. 03ワンタイムパッド
  4. 04ディフィー・ヘルマン
  5. 05RSA

L2: 中等

データ構造が得意なこと

COMPここで扱うデータ構造は、どれもある問いにすばやく答えられる代わりに、別のところでコストがかかります。ブルームフィルタはキーをまったく保存しなくても、確実に含まれていないと判定できます。トライは、ハッシュ表では答えられない接頭辞の問いに答えます。ヒープでは最小のキーがいつでもわかりますが、それ以外に得られる情報はわずかです。最後のページでは、メモリからどのページを追い出すかを考えます。最善の選択には、未来のアクセスを知る必要があります。

  1. 01ブルームフィルタ
  2. 02トライ
  3. 03二分ヒープ
  4. 04ページ置換

L2: 中等

動画が符号化されるまで

COMP動画エンコーダは単一のアルゴリズムではなく、順序の決まった 8 つの段です。その順序は恣意的ではありません。どの段も、直前の段が仕事を可能にしてくれたからこそ存在します。このツールはそのうちの 1 つを扱います。下の連鎖から残りの 7 つに移動できます。

  1. 01標本化
  2. 02色差の間引き
  3. 03GOP 構造
  4. 04動き推定
  5. 05量子化
  6. 06エントロピー符号化
  7. 07レート制御
  8. 08容量の予算

L3: 学部

映像配信の保護:デバイスを無効化し、出所を突き止める

COMP一つの問題を構成する二つの側面。スタジオが直面する順に追っていきましょう。まずは、鍵が漏洩しても他の全員のライセンスは有効に保たなければならないという課題です。驚くべきことに、これに必要なヘッダーは、システムの規模がどれほど大きくなっても一切肥大化しません。そして、より困難な後半の課題。それが、誰の鍵であったかを突き止めることです。何人かの契約者が結託し、誰の名前も出ないよう特別に仕立て上げた複製から、それを特定せねばならないのです。

  1. 01デバイスの無効化
  2. 02フォレンジック電子透かし

L3: 学部

フーリエ変換の実際

COMP信号は回転する矢印の足し合わせです。そして、そこから現実的な方法で情報を読み取ろうとすれば、教科書の公式には書かれていない何らかの代償を伴います。有限の窓は、そこに収まりきらない波をすべてのビンににじませてしまいます。窓を短くすれば時間は正確に捉えられますが、音の高さは犠牲になります。平均をとる操作もまた、固有の形を持ったフィルターにほかなりません。そして最後のページは、これらすべての計算が実用的な時間で処理できる理由についてです。

  1. 01離散フーリエ変換
  2. 02スペクトログラム
  3. 03フィルターとしての移動平均
  4. 04高速フーリエ変換

L3: 学部

アルゴリズムが正しい理由

COMPアルゴリズムが正しく動くのには、言葉で説明できる理由があります。そして間違っているなら、小さなテストで見つかる原因がどこかにあります。ここでは各ページに、正しい実装と、いかにももっともらしい間違いを並べてみました。二分探索の16通りの書き方のうち14通りは破綻します。お釣りを計算する貪欲法は古いイギリスの硬貨では失敗しますが、アメリカの硬貨では決して間違えません。クラスカル法とプリム法の答えが一致するのには確かな理由があります。また、反転した一つのビットを直す符号は、二つの反転をかえって悪化させてしまいます。

  1. 01二分探索
  2. 02釣り銭問題
  3. 03最小全域木
  4. 04ハミング符号

全プロセスの詳細解説

ここでわかること

これらのツールから生まれた記事

この分野のすべてのツール

Algorithms & Data Structures

BFS vs DFS ビジュアライザー
ノード15は始点から6エッジの距離にありますが、深さ優先探索では12エッジの経路が提示されることがあります。この連結成分は15ノードからなり16エッジを持つため、この2本の余分なエッジが、二つの探索結果に生じるすべての差異の原因となっています。
BST / AVL木ビジュアライザー
10, 20, 30, 40, 50, 60, 70の順に挿入すると、木は高さ7の鎖状になり、本来なら三回で済むはずの最後のキーの探索に七回の比較を要します。AVL木の回転操作を用いれば、同じ七つのキーを高さ3の木に収めることができます。
ヴィジュネル暗号:鍵の長さを突き止め、解読する
『不思議の国のアリス』の冒頭をキーワードで暗号化し、自らの手で解読してみましょう。k 文字ごとの一致指数から鍵長を割り出し、カシスキーの反復文字列検査で裏付けを取り、カイ二乗値から鍵の各文字を一字ずつ特定していきます。
グラフ彩色エクスプローラー
グラフの頂点を彩色し、彩色数の制約をテストし、クリークによる下限を調べます。
ソートアルゴリズム対決
逆順に並んだ64個の要素を整列させる際、バブルソートでは転倒数と同じちょうど2,016回の交換が必要であり、これは隣接交換を行うすべてのアルゴリズムに共通する下限です。一方、クイックソートであれば要素を一気に63も離れた位置へ動かすことで、わずか32回の交換で処理を完了させます。
ダイクストラ法による最短経路
ノード1は始点から1エッジの距離でコスト4となりますが、最短距離はノード3を経由する3となります。負の重みを持つエッジのプリセットを読み込むと、ノード3の距離は−1で確定しますが、経路の復元処理では閉路が報告されます。
ディフィー・ヘルマン:公の場で共有する秘密
だれにでも筒抜けの通信路で、アリスとボブが秘密を取り決めます。あなたはその盗聴者です。全探索とポーリグ・ヘルマン法を1回ずつ進め、素数1621が高々21回の試行で破られるのに対し、二つ小さいだけの1619が811回も持ちこたえる理由を解き明かしましょう。
トライ木:接頭辞をたどって学ぶ
単語をトライ木に格納し、検索・自動補完・挿入の動きを一段階ずつ確かめます。同じ単語を二分探索やハッシュ表で探す場合も、調べる文字を一文字ずつ数えます。各データ構造のバイト数も比較すると、70文字のうち40文字を共有していても、トライ木の大きさは単純なリストの2.6倍になります。
ハッシュテーブル可視化ツール
チェイン法、線形探査法、二次探査法による衝突解決で、ハッシュテーブルがどのようにデータを格納するかを見てみましょう。
ブルームフィルタ:「確実にない」と「たぶんある」
ブルームフィルタに単語を一つずつ登録し、別の単語を検索してみましょう。未登録の10,000個の文字列で偽陽性を数え、標準的な推定値と実測値を比べます。ハッシュ関数の最適な個数を探り、通常のブルームフィルタで削除ができない理由も確かめます。
ページ置換:FIFO・LRU・最適置換
FIFO・LRU・ベラディの最適置換を使い、参照列を順にたどってフレームの中身とフォールト数を確かめます。参照列が1 2 3 4 1 2 5 1 2 3 4 5のとき、FIFOのフォールト数は3フレームで9回、4フレームで10回。LRUとOPTでは、メモリを増やしてフォールトが増えることはありません。
レーベンシュタイン距離ビジュアライザー
2つの文字列間の編集距離(挿入・削除・置換)を計算し、比較を可視化します。
ワンタイムパッド:一度なら破れず、二度で破れる
メッセージと同じ長さのランダムな鍵で暗号化します。同じ長さの別の文を入力すると、その文を生み出すはずだった鍵が現れます。この鍵をもう一つの文に使い回すと、鍵は綺麗に相殺されます。推測した単語を重ねて滑らせ、二つの文を同時に読み解いてみましょう。
両替問題:貪欲法と最適解
旧イギリス通貨で48dを支払うと、貪欲法はハーフクラウン、シリング、六ペンス硬貨を一枚ずつ渡す。しかし、フローリン二枚で足りる。任意の硬貨体系について、貪欲法と動的計画法による最適解を比較する。表を一マスずつ埋め、体系全体を有限回の検査で判定できる上界まで確かめよう。
二分ヒープ:配列でつくる優先度付きキュー
15個のキーを大きい順に一つずつ挿入すると、比較は34回。最後の親から調整してつくれば22回です。1,023個では8,194回と2,026回になります。木と配列を並べて、比較と交換を一手ずつ確かめ、最後は小さい順に取り出してみましょう。
二分探索:四つの選択、十六通りのループ
二分探索のループには四つの選択があり、正しい組合せは16通りのうち2通りしかありません。ループを組み立て、小さな配列上で動きを確かめ、最大256要素までのあらゆる配列で試してみましょう。誤ったループはどれも、要素数が二つになるまでに破綻します。
再帰木エクスプローラー
フィボナッチ数列、ハノイの塔、パスカルの法則、マージソート、階段上りの単純な再帰呼び出しについて、呼び出し回数、独立した部分問題、スタックの深さを数えます。メモ化テーブルがどこで役立つのかを具体的に確認しましょう。
最小全域木:クラスカル法とプリム法
十二の村を結ぶ道路候補は66本。そのうち11本をクラスカル法とプリム法は異なる順で選ぶが、総延長はどちらも199.04 kmになる。選ばれる道路は、その時点のカットを横切るもののうち最短だからだ。目の前の村から最も近い村へ進む方法では10.76%長くなる。また、互いに40 km離れた三つの町なら、間に分岐点を置くことで13.40%短縮できる。
単換字暗号:文字を数えて26!通りの鍵を破る
文字の出現回数だけを頼りに、暗号を自分の手で破ってみましょう。シーザー暗号なら、カイ二乗値を見ることで、わずか31文字からでも99.1%の確率で正しいずらし量を特定できます。しかし一般的な換字暗号は手強い相手です。32,725文字ある短編小説の全文を数え上げても、出現頻度順に並べるだけでは26文字のうち五つを間違えます。
経路探索アルゴリズム・ビジュアライザー
A*、ダイクストラ法、貪欲最良優先探索、幅優先探索(BFS)がグリッドを探索する様子をステップごとに見てみよう。
計算量オーダー(Big-O)エクスプローラー
O(1)、O(log N)、O(N)、O(N²)、O(2ᴺ)、O(N!)の増加率がさまざまな規模でどう比較されるかを可視化します。

Information Theory & Encoding

2進数演算と2の補数ラボ
八ビットで 100 + 50 を計算すると、符号なしでは150、符号付きでは−106となるため、キャリーは正常を示しオーバーフローは異常を示します。200 + 100 を足し合わせるとこれらのフラグが逆転することからも、一つの加算器に二種類のフラグが必要な理由がわかります。
LZ77 圧縮デモ
DEFLATE、ZIP、gzip で使われるスライディングウィンドウの後方参照をステップごとに確認しよう。
NLPエントロピー・ラボ
トークンエントロピー、交差エントロピー、パープレキシティ、KLダイバージェンス。言語モデルの学習と評価を支える四つの数値です。
エンコーディング/基数検出・変換ツール
可能性の高いエンコーディングや構造化フォーマットを検出し、デコードして内容を説明します。
エントロピー符号化プレイグラウンド
シンボル分布とシャノンエントロピー、期待される圧縮利得、AI/LLMにおける次トークン予測の関係を学びます。
ハフマン符号化ビジュアライザー
hello world のエンコードでは88 bitsが32 bitsまで圧縮されますが、エントロピーの下限である31.3 bitsとの間にある0.7 bitsの差は、符号長が整数のビット数に切り上げられるために生じます。90/10の確率分布を持つ情報源では一文字あたりの情報量が0.469 bitsになりますが、ハフマン符号化ではそれでも1 bitを消費してしまいます。
バロウズ・ウィーラー変換(BWT)
BWTがテキストを圧縮しやすいランに並べ替える仕組み、そして可逆的に元に戻す方法を確認します。
浮動小数点数
10進数を入力してみてください。コンピュータがそれを符号、2進数、正規化、バイアス、丸めと変換していく過程を追うことができます。最終的に記憶される値、誤差、そして表現可能な次の数値までの間隔を確認しましょう。
連長圧縮(RLE)
繰り返し記号を(値, 個数)のランに圧縮し、最良・最悪ケースを検証する。

Signal & Media Processing

GOP構造ビジュアライザー
ビデオストリームにおけるI/P/Bフレームパターン、シーク遅延、および圧縮のトレードオフを理解します。
クロマサブサンプリング・ラボ
4:4:4、4:2:2、4:2:0を比較し、画像・動画圧縮における色情報の損失を確認します。
コントラスト比チェッカー(WCAG輝度)
文字色と背景色のコントラストをWCAG 2のアクセシビリティ基準と照らし合わせて確認する — そして、その裏にある輝度計算式が、1953年の放送テレビが既存の白黒信号にカラー情報を押し込む必要から生まれたものであることも見てみましょう。
スペクトログラム
スペクトログラムは、短いフーリエ変換を音楽に沿って滑らせていくもので、窓の長さが何を見せるかを決めます。ハニング窓でA4とA♯4を見分けるには72.0 msかかります。A1(55 Hz)の半音では576.2 msとなり、十六分音符四つ分を超えます。ですから、ベースの速いトリルでは、一秒までのどんな窓を使っても、どの音が鳴っているかを捉えられるスライスは全体の四分の一にも満たないのです。
ソーベル vs キャニー エッジ検出器
ソーベル勾配とキャニーヒステリシスを適用し、エッジ検出パイプラインを比較する。
ピクセルサンプリング・ラボ
信号とピクセルグリッドの可視化を通じて、サンプリング、ナイキスト、エイリアシングを理解しよう。
レート制御シミュレーター
ここではCRFとCBRのどちらも一フレームあたり同じ2000 bitsを消費していますが、画質スコアはCBRの79に対してCRFが89.8を記録しています。この10.8ポイントはピークを平滑化するための代償であり、CBRの最大フレームが2000 bitsであるのに対し、CRFでは4078 bitsに達します。
動き推定シミュレーター
ブロックあたり225の探索位置は−7から+7ピクセルまでの15×15の窓に相当し、その計算コストは探索半径の二乗に比例するため、半径15では961、31では3969にも跳ね上がります。代わりに三段階探索法を用いれば、少し精度の劣るベクトルを許容することで探索回数を27に抑えられます。
動画エンコーディング・ラボ
ビットレート、コーデック、CRF/CBR、画質のトレードオフを、リアルタイムの視覚的な見積もりで学ぼう。
畳み込みと特徴マップのプレイグラウンド
3×3の層を十四層重ねると、積和演算126回で一つの出力ピクセルから28×28の画像全体を見渡せます。同じ受容野を持つ29×29のカーネル一つでは演算が841回も必要になり、これが画像認識ネットワークが深く細く設計される理由です。
量子化ラボ
教科書にある 6.02N + 1.76 の公式では49.92 dBとなるはずの八ビット量子化ですが、ここでの実測値は56.18 dBを示しています。この6.2 dBの差は波高率によるもので、あの公式はフルスケールの正弦波を前提としていますが、このランプ波は実効値がその二倍以上あるためです。
離散フーリエ変換
純音を64回サンプリングして離散フーリエ変換を行います。正確に10周期の場合は一本のきれいな棒になりますが、10.5周期の場合はすべての棒が点灯し、最も高いものは音の64.61%を示します。各棒はそれを構成する64本の矢印として描かれ、窓関数を使うと、にじみと引き換えにピークの幅を広げることができます。
高速フーリエ変換
高速フーリエ変換は、直接和が N² 回の乗算を要するのに対し、約 N log N 回の乗算で同じN個の数値を導き出します。ブラウザ上でバタフライ演算を1段階ずつ確認し、1805年頃の未発表手稿に残されたガウス自身の12点の例を再現して、両方の計算手法の実行時間を計ってみましょう。

Automata & Cryptography

RSA暗号のおもちゃ
p = 61 と q = 53 から n = 3233 が得られますが、これは十六回の試し割りで解読されてしまいます。φ = 3120 が漏洩した場合も同様に致命的であり、p + q = 114 と pq = 3233 という二次方程式を解くだけで二つの素数が求まってしまいます。
キャッシュの局所性:読み出す順序で何が変わるか
同じ行列を行ごと、列ごとに足し合わせ、小さなダイレクトマップ方式のキャッシュでヒットとミスを数えます。同じアドレスから同じ値を読み出して足すのに、一方は64回中48回ヒットし、もう一方はすべてミス。各行に使わないint型の要素を4個加えると、遅かった読み出し順でも同じだけヒットします。
コールスタック:スタックフレーム、戻りアドレス、オーバーフロー
関数呼び出しを、メモリへの書き込みとして見てみましょう。呼び出すたびに、128バイトのスタックに引数、戻りアドレス、保存したフレームポインタが積まれます。戻るときは、戻りアドレスの格納場所にある値へジャンプします。再帰、スタックオーバーフロー、自分の戻りアドレスを上書きする配列、前の呼び出しが残した値を持つ変数を確かめます。
チューリングマシン・シミュレーター
5マスの回文判定には21回の移動、21マスの場合は253回の移動を要しますが、これは一対の文字を処理するたびに一つのヘッドがテープ全体を移動しなければならないためです。二本目のテープを使えば処理は線形になりますが、一本のテープでは不可能であることを1965年にヘニーが証明しています。
ブール式ソルバー
ブール論理式を入力し、中間部分式の列を含む完全な真理値表を生成する。
メモリとバイト:エンディアン・型・アドレス
32バイトのメモリ。その中身の意味は、どこにも書かれていません。好きな位置から、8・16・32ビットの整数、浮動小数点数、テキストとして読んでみましょう。リトルエンディアンとビッグエンディアンを切り替えると、各バイトの下に位の重みが表示されます。1も順序を逆に読めば16,777,216に。πを表す浮動小数点数のバイト列は、整数として読むと1,078,530,011になります。
他の端末に知らせずに対象端末を無効化する
百万台のうち六十四台の端末が侵害されたとしましょう。このときライセンスヘッダに必要となる鍵の数は、846個、77個、あるいは3個です。どの数になるかは方式によって異なり、またその六十四台がひとまとまりであるかどうかにも左右されます。
小さなCPU:Little Man Computer
Little Man Computerを、レジスタ間の転送ごとに動かしてみましょう。PC、MAR、MDR、CIR、アキュムレータと百個のメールボックスを使い、メモリの読み書きをその場で追えます。プログラムは編集可能。メモリアクセス全体のうち、命令そのものを読み出すためのアクセスが占める割合もわかります。
有限状態機械アニメーター
ライブの状態遷移図でDFAの遷移を1ステップずつ確認 — 各記号を読んだ後にどの状態がアクティブか、入力が受理されるかを観察します。
結託攻撃に耐えうる電子透かし
各コピーには異なるビット列が埋め込まれているため、流出元を特定できる。4人が結託して互いのコピーを比較し、誰の痕跡も残さない偽造品を作ろうとする。しかし、ビット列の長さが2,490であればそれは不可能だ。16人の結託には39,833ビットが必要となる。
論理ゲート・エクスプローラー
信号パルス・タイミングチャート・真理値表付きの対話型論理ゲートおよび小規模回路ビジュアライザー。

Demos & Utilities

HTML アセット・画像・Markdown 抽出ツール
HTMLを貼り付けてカテゴリ別にリンクされたファイルを抽出し、画像優先のギャラリー表示とMarkdownテキストエクスポートを行う。
Lorem Ipsum ジェネレーターラボ
エントロピーの調整スライダーはLLMの温度設定ダイヤルに相当し、これには上限があります。コーパスに含まれる異なり語数は63語であるため、どれほど高い目標値を設定しても、一つの文章が持ち得る情報量は最大で log₂ 63 = 5.9773 bits に留まります。
グローバーの検索アルゴリズム
グローバーの量子検索アルゴリズムを反復ごとに追跡。ターゲットの振幅が成長する様子を観察。
コンウェイのライフゲーム
グライダーは c/4 の速度で移動しますが、この限界はルールそのものに由来します。ひとつのセルは周囲の八つのセルとしか相互作用できないため、一世代に一セルを超えて移動するものは存在しません。ダイハードは順調に成長しているように見えますが、130世代目で突然消滅してしまいます。
フラクタル・エクスプローラー
コッホ曲線の次元は log 4 / log 3 = 1.262 ですが、カントール集合の次元は0.631であり一次元の線にも満ちません。ここにある八つの曲線のうち三つは次元がちょうど2になり、これらは無限の深さにおいて交差するのではなく平面を埋め尽くします。
ブロッホ球エクスプローラー
θ = 90° の量子ビットは Z 基底では 50/50 に、X 基底では 100/0 になるため、50/50 というのはあなたが選んだ基底に関する事実なのです。それを 360° 回転させると状態は −|ψ⟩ に反転し、二度目の回転でのみ元に戻ります。
量子ランダムウォーク
古典的なランダムウォークが100歩で10マス以上先へ進むことは稀ですが、量子ウォークでは約70マスにも達します。10歩時点での標準偏差は4.8924対3.1623であり、古典ウォークがこの値に追いつくには24歩を要することになります。

その他のツール

10ブロックに1つのブロックを暗号化 (CENC cbcs)
cbcsスキームは16バイトのブロック10個につき1個を暗号化するため、48バイトのスライスでは3分の1が暗号文になります。暗号化されない残りの10分の9も、鍵がなければ役に立ちません。パターンが適用されるすべてのスライスにおいて、ヘッダの直後に来る最初のバイトが暗号文になるからです。
BPE トークナイザー探索
バイトペア符号化がテキストを、言語モデルが実際に読むトークンへどう分割するかを見る。語彙は固定、分割はその場で実行 — 英語は13トークン、同じ内容のドイツ語は36トークン。
トークンのベクトルと類似度
どのトークンがどのトークンの近くに現れるかを数えて作ったベクトル。対象はこのサイト自身の文章。最も高い組は ␣the と ␣is の0.505で、␣Earth と ␣Sun の0.299より高く、しかも何の意味も共有していない。
ハミング符号:位置を突き止めてビットを訂正する
七つのビットに四つのデータを収め、三つのパリティ検査を行う。失敗した検査を並べると、誤ったビットの位置が二進数で得られるため、一箇所の反転なら必ず直せる。二箇所が反転すると、復号器は正しい別のビットまで反転してしまう。さらに一ビットを加えれば、それを検出できる。
ビットレート/サイズ計算機
映像の内容が何であれ、毎秒一メガビット増やすごとに一時間あたり450 MBの容量を消費します。6 Mbit/sの十分間の動画では、478 MBのファイルサイズのうち音声は3.1%を占めるに過ぎず、これを半減させても7 MBしか節約できない一方で、すべての視聴者の音質を損なってしまいます。
ライブ配信のキーローテーション
1年間、2分間隔でキーをローテーションすると、262,800個のコンテンツキーが生成されます。データ量にして4.20 MBです。真の代償はそこではなく、100万人のプレイヤーが同じ10秒間に新しいキーを一斉に要求してくる点にあります。この要求を720分の1に減らすのがキー階層ですが、引き換えに一度の流出による被害が720倍に拡大してしまいます。
温度とサンプリング
実際の次トークン分布が温度で作り変えられ、top-k と top-p で切り落とされる様子を見る。温度はどのトークンが首位かを変えることはない。変わるのは差だけで、278倍から1.76倍まで。
画面解像度と視聴距離
パネルの対角線長と画素数、そして視聴位置から、その解像度が実際にどれだけ眼に届いているのかを計算します。視力が20/20であれば、答えは「分(ふん)」単位で測った視野角そのものになります。そして一般的な居間のテレビでは、その値は1080pにすら届かないことがほとんどです。
Related categories: 数学, 物理学