SlideShare una empresa de Scribd logo
1 de 152
Descargar para leer sin conexión
正 規 表 現 入 門
星 の 高 さ を 求 めて
J O I 2 0 1 4 春 合 宿
講 義 内 容
★ 正規表現とはパターンマッチングのための記法であ
り,文字列検索の便利な道具として広く親しまれてい
ます.この講義では,正規表現の基礎から始め,
「星の高さ」という性質に注目して正規表現の裏側に
潜む数理構造に迫っていきます.
表紙画像: http://www.superbwallpapers.com/nature/starry-night-sky-over-the-mountains-14678/
★ 正規表現好き
★ オートマトンもっと好き
★修士号は正規言語で取得
★ 東工大博士一年次(数理計算)
新 屋 良 磨
q0
q1 q2
q3
q4q5
T
I
T
E
C
H
@sinya8282
東京工業大学大学院情報理工学研究科数理・計算科学専攻
修士論文
正規言語上の
Abstract Numeration System の
文字列圧縮への応用
新屋 良磨
指導教員 佐々 政孝
2013 年 9 月 25 日
グ ラ フ の パ ス とそ の 表 現
(●(●●|●)*●●|●)(●●|(●|●●)
(●|●●)*●●)*((●●|●)(●●|●)*)|●(●●|●)*
皆 大 好 き グ ラ フ
皆 大 好 き グ ラ フ
この形のグラフは
「ピーターセングラフ」
と呼ばれています.
良 く あ る 問 題 : 最 短 経 路
★ A-C間の最短経路長は?
良 く あ る 問 題 : 最 短 経 路
★ A-C間の最短経路長は?
★ 長さ2
良 く あ る 問 題 : 最 短 経 路
★ A-C間の最短経路長は?
★ 長さ2
●●
良 く あ る 問 題 : パ ス の 列 挙 問 題
★ A-C間の長さ4のパスを列
挙せよ
本講義では「パス」は
エッジ・頂点の重複を
含み得ます (歩道とも)
良 く あ る 問 題 : パ ス の 列 挙 問 題
★ A-C間の長さ4のパスを列
挙せよ
●●●●,●●●●,●●●●
●●●●,●●●●,●●●●
●●●●,●●●●,●●●●
本講義では「パス」は
エッジ・頂点の重複を
含み得ます (歩道とも)
良 く あ る 問 題 : パ ス の 数 え 上 げ
★ A-C間の長さ100のパスの
数は?
良 く あ る 問 題 : パ ス の 数 え 上 げ
★ A-C間の長さ100のパスの
数は?
★ 7886
良 く あ る 問 題 : パ ス の 数 え 上 げ
★ A-C間の長さ100のパスの
数は?
★ 7886
ちなみにパスの数え上げ
ぐらいは隣接行列で素直
に計算できる.
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フ
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
頂 点 数 × 頂 点 数 の 要 素
持 っ た デ ー タ 構 造
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
頂 点 数 × 頂 点 数 の 要 素
持 っ た デ ー タ 構 造
( 1 , 1 ) 要 素 が 0 ノ ー ド 1 か ら ノ ー ド 1
へ の エッ ジ が な い ( ル ープ が 無 い )
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
頂 点 数 × 頂 点 数 の 要 素
持 っ た デ ー タ 構 造
対 角 成 分 が 全 て 0 グ ラ フ 全 体 に
ル ープ が 無 い .
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
頂 点 数 × 頂 点 数 の 要 素
持 っ た デ ー タ 構 造
( 1 , 3 ) 要 素 が 1 ノ ー ド 1 か ら ノ ー ド 3
へ の エッ ジ が あ る .
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
M=
頂 点 数 × 頂 点 数 の 要 素
持 っ た デ ー タ 構 造
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
M=
頂 点 数 × 頂 点 数 の 要 素
持 っ た デ ー タ 構 造
M =
10
隣 接 行 列 の N 乗 は 長 さ N の パ ス の
総 数 を 表 す.
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
M=
頂 点 数 × 頂 点 数 の 要 素
持 っ た デ ー タ 構 造
M =
10
隣 接 行 列 の N 乗 は 長 さ N の パ ス の
総 数 を 表 す.
グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で )
3
1
2
4
5
グ ラ フそ の 隣 接 行 列
M=
頂 点 数 × 頂 点 数 の 要 素
持 っ た デ ー タ 構 造
M =
10
( 1 , 3 ) 要 素 が 1 6 5 ノ ー ド 1 か ら ノ ー ド 3
へ の 長 さ 1 0 の パ ス が 1 6 5 個 あ る
This document is licensed to nomosupremetornado@gmail.com.
こ の 辺 は 蟻 本 読 め ば 良 いで し ょ う
グ ラ フ と 隣 接 行 列 ( 線 形 代 数 ) の 理 論 体 型
「 G R A P H S P E C T R A T H E O RY 」 も お 薦 め
再 度 パ ス を 列 挙 して み よ う
★ A-C間の長さ100のパスを
列挙せよ
再 度 パ ス を 列 挙 して み よ う
★ A-C間の長さ100のパスを
列挙せよ
★ めんどくさい
任 意 の パ ス の 列 挙 を 考 える
★ A-C間の任意の長さのパス
を列挙せよ
任 意 の パ ス の 列 挙 を 考 える
★ A-C間の任意の長さのパス
を列挙せよ
! ! ! ? ? ?
無 限 に 存 在 す る
の で す が … . .
無 限 の パ ス を ど う に か 表 現 し た い
★ 小さい有向グラフで考え
てみる
★ A-A間の任意の長さの閉路
を列挙したい
★ 右のグラフでは●をいくら
通ってもA-A間の閉路
A
無 限 の パ ス を ど う に か 表 現 し た い
★ 小さい有向グラフで考え
てみる
★ A-A間の任意の長さの閉路
を列挙したい
★ 右のグラフでは●をいくら
通ってもA-A間の閉路
A
ε,●,●●,●●●,●●●●
●●●●●,●●●●●●
●●●●●●●, ……
無 限 の パ ス を ど う に か 表 現 し た い
★ 小さい有向グラフで考え
てみる
★ A-A間の任意の長さの閉路
を列挙したい
★ 右のグラフでは●をいくら
通ってもA-A間の閉路
A
ε,●,●●,●●●,●●●●
●●●●●,●●●●●●
●●●●●●●, ……
εは「長さ0のパス」
を表す特別な記号.
無 限 の パ ス を ど う に か 表 現 し た い
★ 小さい有向グラフで考え
てみる
★ A-A間の任意の長さの閉路
を列挙したい
★ 右のグラフでは●をいくら
通ってもA-A間の閉路
A
ε,●,●●,●●●,●●●●
●●●●●,●●●●●●
●●●●●●●, ……
無 限 に 存 在 す る と は
い え こ れぐ ら い
  「 単 純 な 無 限 」
は 表 現 し た い .
無 限 の パ ス を ど う に か 表 現 し た い
★ 小さい有向グラフで考え
てみる
★ A-A間の任意の長さの閉路
を列挙したい
★ 右のグラフでは●をいくら
通ってもA-A間の閉路
A
ε,●,●●,●●●,●●●●
●●●●●,●●●●●●
●●●●●●●, ……
無 限 に 存 在 す る と は
い え こ れぐ ら い
  「 単 純 な 無 限 」
は 表 現 し た い .
「 ● が 任 意 回 」 続 く
パ ス を
      ● *
と 表 現 して み よ う
無 限 の パ ス を ど う に か 表 現 し た い
A B
★ 小さい有向グラフで考え
てみる
★ A-A間の任意の長さの閉路
を列挙したい
無 限 の パ ス を ど う に か 表 現 し た い
A B
★ 小さい有向グラフで考え
てみる
★ A-A間の任意の長さの閉路
を列挙したい
ε,●,●●,●●,●●●,●●●
●●●,●●●●,●●●●_
●●●●,●●●●, ……
無 限 の パ ス を ど う に か 表 現 し た い
A B
★ 小さい有向グラフで考え
てみる
★ A-A間の任意の長さの閉路
を列挙したい
ε,●,●●,●●,●●●,●●●
●●●,●●●●,●●●●_
●●●●,●●●●, ……
「 「 ● ま た は ● ● 」 が 任
意 回 」 続 く パ ス を      
      ( ● | ● ● ) *
!
と 表 現 して み よ う
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ 実は,任意の有限グラフ
の任意点間のパス集合が
「*」と「|」を使えば表現
できる
!
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ 実は,任意の有限グラフ
の任意点間のパス集合が
「*」と「|」を使えば表現
できる
! A B
C
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 1. まずは矢印の色を,
矢印の上に文字として表す
A B
C
● ●
●●
●
●
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 1. まずは矢印の色を,
矢印の上に文字として表す
A B
C
● ●
●●
●
●
★ Step 2. 特別なノードDと
Eを追加し,表現したい
パスの始点にDからεの
矢印を張る.さらに終点
からEにεの矢印を張
る.
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 1. まずは矢印の色を,
矢印の上に文字として表す
A B
C
● ●
●●
●
●
★ Step 2. 特別なノードDと
Eを追加し,表現したい
パスの始点にDからεの
矢印を張る.さらに終点
からEにεの矢印を張
る.
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
D ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 1. まずは矢印の色を,
矢印の上に文字として表す
A B
C
● ●
●●
●
●
★ Step 2. 特別なノードDと
Eを追加し,表現したい
パスの始点にDからεの
矢印を張る.さらに終点
からEにεの矢印を張
る.
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
D ε
E
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
B か ら A を 通 って B に
戻 る パ ス ● ● を 「 B か
ら B の ル ープ 」 と し
て 扱 う
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
B か ら A を 通 って B に
戻 る パ ス ● ● を 「 B か
ら B の ル ープ 」 と し
て 扱 う
|●●
こ こ に 追 加 . 元 々 ●
に よる ル ープ が あ る
の で, 「 ま た は 」 を
表 す 「 | 」 を 使 って
追 加 す る .
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
B か ら A を 通 って C に
向 か う パ ス ● ● を 「 B
か ら C へ の エッ ジ 」
と して 扱 う
|●●ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
B か ら A を 通 って C に
向 か う パ ス ● ● を 「 B
か ら C へ の エッ ジ 」
と して 扱 う
|●●
こ こ に 「 B か ら C へ
の ● ● の エッ ジ 」 と し
て 追 加
●●
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
C に つ いて も 同 様
に , 「 A を 経 由 す る
パ ス 」 を エッ ジ と し
て 追 加 して い く .
|●●
●●
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
C に つ いて も 同 様
に , 「 A を 経 由 す る
パ ス 」 を エッ ジ と し
て 追 加 して い く .
|●●
●●
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
C に つ いて も 同 様
に , 「 A を 経 由 す る
パ ス 」 を エッ ジ と し
て 追 加 して い く .
|●●
●●
●●
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
C に つ いて も 同 様
に , 「 A を 経 由 す る
パ ス 」 を エッ ジ と し
て 追 加 して い く .
|●●
●●
●●
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
C に つ いて も 同 様
に , 「 A を 経 由 す る
パ ス 」 を エッ ジ と し
て 追 加 して い く .
|●●
●●
●●
|●●
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
D に つ いて も 同 様
に , 「 A を 経 由 す る
パ ス 」 を エッ ジ と し
て 追 加 して い く .
|●●
●●
|●●
●●
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
D に つ いて も 同 様
に , 「 A を 経 由 す る
パ ス 」 を エッ ジ と し
て 追 加 して い く .
|●●
●●
|●●
●
●●
ε
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
A B
C
● ●
●●
●
●
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
D に つ いて も 同 様
に , 「 A を 経 由 す る
パ ス 」 を エッ ジ と し
て 追 加 して い く .
|●●
●●
|●●
●
●
●●
ε
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
● ●
●
●A
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
A を 経 由 す る 全 ての
パ ス を 「 A を 経 由 し
な い エッ ジ 」 に 変 換
した.後は消すだけ.
|●●
●●
|●●
●
●
●●
ε
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
D
E
ま ず A を 消 す. も ち
ろ ん , 単 に 消 す わ け
じ ゃ な い . パ ス の 情
報 を 保 っ た ま ま 消 し
て い く .
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
A を 経 由 す る 全 ての
パ ス を 「 A を 経 由 し
な い エッ ジ 」 に 変 換
した.後は消すだけ.
|●●
●●
|●●
●
●
●●
ε
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
|●●
|●●
●
●●
●
●●
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
|●●
|●●
●
●●
続 いて B を 消 す. A
の 時 と 同 様 に , 「 B
を 経 由 す る パ ス 」 を
「 B を 経 由 し な い
エッ ジ 」 に 変 換 . ●
●●
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
|●●
|●●
●
●●
続 いて B を 消 す. A
の 時 と 同 様 に , 「 B
を 経 由 す る パ ス 」 を
「 B を 経 由 し な い
エッ ジ 」 に 変 換 . ●
●●
「 C か ら B を 経 由 し
て C に 戻 る パ ス 」 を
「 C の ル ープ 」 に 置
き かえる .
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
|●●
|●●
●
●●
続 いて B を 消 す. A
の 時 と 同 様 に , 「 B
を 経 由 す る パ ス 」 を
「 B を 経 由 し な い
エッ ジ 」 に 変 換 . ●
●●
「 C か ら B を 経 由 し
て C に 戻 る パ ス 」 を
「 C の ル ープ 」 に 置
き かえる .
し か し B は 「 ● | ● ● 」
の ル ープ を 持 って い
る の で, こ れ を
「 ( ● | ● ● ) * 」 と して
表 す.
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
|●●
|●●
●
●●
続 いて B を 消 す. A
の 時 と 同 様 に , 「 B
を 経 由 す る パ ス 」 を
「 B を 経 由 し な い
エッ ジ 」 に 変 換 . ●
●●
「 C か ら B を 経 由 し
て C に 戻 る パ ス 」 を
「 C の ル ープ 」 に 置
き かえる .
し か し B は 「 ● | ● ● 」
の ル ープ を 持 って い
る の で, こ れ を
「 ( ● | ● ● ) * 」 と して
表 す.
「 C → B → … → B → C の
パ ス 」 を こ こ に 追 加 . |(●|●●)(●|●●)*●●
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
|●●
|●●
●
●●
続 いて B を 消 す. A
の 時 と 同 様 に , 「 B
を 経 由 す る パ ス 」 を
「 B を 経 由 し な い
エッ ジ 」 に 変 換 . ●
●●
|(●|●●)(●|●●)*●●
ε
ε
●
●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
B
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
|●●
|●●
●
●●
続 いて B を 消 す. A
の 時 と 同 様 に , 「 B
を 経 由 す る パ ス 」 を
「 B を 経 由 し な い
エッ ジ 」 に 変 換 . ●
●●
|(●|●●)(●|●●)*●●
同 様 に 「 B を 経 由 す
る パ ス 」 を 置 き 換 え
て い く ( ち ゃ ん と ル ー
プ は * で 表 す ) .
ε
ε
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
●(●●|●)*
●●|(●|●●)(●|●●)*●●
(●●|●)(●●|●)*|ε
●(●●|●)*●●|●
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
C
D
E
グ ラ フ を 見 や す く 変 形
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
●(●●|●)*
●●|(●|●●)(●|●●)*●●
(●●|●)(●●|●)*|ε
●(●●|●)*●●|●
最 後 に , C を 消 すと
D か ら E へ の 一 本 の
エッ ジ だ け が 残 る
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
D E
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
(●(●●|●)*●●|●)(●●|(●|●●)(●|●●)*●●)*((●●|●)(●●|●)*|ε)|●(●●|●)*
最 後 に , C を 消 すと
D か ら E へ の 一 本 の
エッ ジ だ け が 残 る
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
D E
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
(●(●●|●)*●●|●)(●●|(●|●●)(●|●●)*●●)*((●●|●)(●●|●)*|ε)|●(●●|●)*
最 後 に , C を 消 すと
D か ら E へ の 一 本 の
エッ ジ だ け が 残 る
こ れ こそ が 求 め る 「 A - B
間 」 と 「 A - C 間 」 の パ ス
を 表 現 し た も の.
「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現
★ Step 3. 「*」と「|」でパス
を表しながら追加したD,E
以外の状態を消していく.
D E
こ の グ ラ フ の 「 A - B 間 」 と
「 A - C 間 」 の パ ス を 表 現 して み る
(●(●●|●)*●●|●)(●●|(●|●●)(●|●●)*●●)*((●●|●)(●●|●)*|ε)|●(●●|●)*
最 後 に , C を 消 すと
D か ら E へ の 一 本 の
エッ ジ だ け が 残 る
こ れ こそ が 求 め る 「 A - B
間 」 と 「 A - C 間 」 の パ ス
を 表 現 し た も の.
このように,状態を消去
していってパスのパターン
を構成する方法を
State elimination method
(状態消去法)
と呼ぶ[3].
「 * 」 と 「 | 」 を 使 っ た 表 現 : 正 規 表 現
★ 正規表現とは「パスのパターンの表現式」
!
★ 任意の(有限)グラフのパスは正規表現で表現できる
★ 正規表現は「無限のパス」を記述することができる
★ 現代では,正規表現は「文字列のパターン」を表現す
る用途で重宝されている → 正規表現マッチング
プ ロ グ ラ マ の た め の 正 規 表 現
★ プログラミングやShellコマンドでよく使われる
★ 文字列の validation や検索に
★ 「|」「*」以外に色々な記法・機能が導入されている
★ 「.」(ドット)は任意の一文字を表す
★ 「 (a|b|c|d|e) 」は「 [abcde] 」や「 [a-e] 」と書ける
★ 「d」で「数字1文字」(0|1|2|3|4|5|6|7|8|9) とか.
★ 「+」で1回以上の繰り返しを表す
★ 「*」は任意回(0回以上)の繰り返し
★ 「{n}」でn回の繰り返し
★ 他にもいっぱい...(覚える必要は無い)
実 用 的 ( ? ) な 正 規 表 現 の 例 1
★ IP電話番号を表す正規表現 http://blog.livedoor.jp/nipotan/archives/51644244.html
★ (理解する必要はありません!!!)
050-(8(8(10|0d|6[4-8]|8[0-6])|0([0-2]d|3[0-8])|
2(0d|1[0-2])|6(86|0[01]))|7(6([01]d|2[0-5])|7(88|
7[0-5])|1(0d|1[0-3])|30[0-3]|00[01]|5dd)|
3(8([01]d|2[0-5])|2([0-4]d|5[01])|[013-7]dd|
90[01])|5(([02]0|5[0-6])d|8([0-3]d|4[0-2])|79[89])|
2(0([0-2]d|3[0-6])|20[01]|403|525)|6(6(19|2[0-2])|
86[0-8]|[01]00)|1(8(0d|1[0-2])|[0-7]dd)|90(0d|
1[0-5]))d{4}
実 用 的 ( ? ) な 正 規 表 現 の 例 2
★ URIを表す正規表現 http://swatmac.info/?p=1064
★ (理解する必要はありません!!!!!!)
[a-z][x2bx2dx2e0-9a-z]*:(//(([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,:;=])*@)?(x5b(([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f]
{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|
1d{2}|2[0-4]d|25[0-5]))|::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|
2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|([0-9a-f]{1,4})?::([0-9a-f]{1,4}:){4}
([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|
25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|
1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|
25[0-5]))|(([0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|
[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,3}
[0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])
x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:[0-9a-
f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|
[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::|v[0-9a-f]+x2e[!
x24&-x2e0-;=_a-z~]+)x5d|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|
2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])|([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,;=])*)(:d*)?(/([x2dx2e0-9_a-
z~]|%[0-9a-f][0-9a-f]|[!x24&-,:;=@])*)*|/(([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,:;=@])+(/([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-
f]|[!x24&-,:;=@])*)*)?|([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,:;=@])+(/([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!
x24&-,:;=@])*)*)?(x3f([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,/:;=x3f@])*)?(x23([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!
x24&-,/:;=x3f@])*)?
正 規 表 現 の 歴 史
– S T E P H E N C O L E K L E E N E ( 1 9 0 9 - 1 9 9 4 )
脳 の 計 算 モ デル :
形 式 的 ニュ ー ロ ン
BULLETIN OF
MATHEMATICAL BIOPHYSICS
VOLUME5, 1943
A LOGICAL CALCULUS OF THE
IDEAS IMMANENT IN NERVOUS ACTIVITY
WARREN S. MCCULLOCH AND WALTER PITTS
FROM THE UNIVERSITY OF ILLINOIS, COLLEGEOF MEDICINI~,
DEPARTMENT OF PSYCHIATRY AT THE ILLINOIS NEUROPSYCHIATRICINSTITUTE,
AND THE UNIVERSITY OF CHICAGO
Because of the "all-or-none" character of nervous activity, neural
events and the relations among them can be treated by means of propo-
sitional logic. It is found that the behavior of every net can be described
in these terms, with the addition of more complicated logical means for
nets containing circles; and that for any logical expression satisfying
certain conditions, one can find a net behaving in the fashion it describes.
It is shown that many particular choices among possible neurophysiologi-
cal assumptions are equivalent, in the sense that for every net behav-
ing under one assumption, there exists another net which behaves un-
der the other and gives the same results, although perhaps not in the
same time. Various applications of the calculus are discussed.
I. Introduction
Theoretical neurophysiology rests on certain cardinal assump-
tions. The nervous system is a net of neurons, each having a soma
and an axon. Their adjunctions, or synapses, are always between the
axon of one neuron and the soma of another. At any instant a neuron
has some threshold, which excitation must exceed to initiate an im-
pulse. This, except for the fact and the time of its occurrence, is de-
termined by the neuron, not by the excitation. From the point of ex-
citation the impulse is propagated to all parts of the neuron. The
velocity along the axon varies directly with its diameter, from less
than one meter per second in thin axons, which are usually short, to
more than 150 meters per second in thick axons, which are usually
long. The time for axonal conduction is consequently of little impor-
tance in determining the time of arrival of impulses at points un-
equally remote from the same source. Excitation across synapses oc-
curs predominantly from axonal terminations to somata. It is still a
moot point whether this depends upon irreciprocity of individual syn-
apses or merely upon prevalent anatomical configurations. To sup-
pose the latter requires no hypothesis ad hoc and explains known ex-
ceptions, but any assumption as to cause is compatible with the cal-
culus to come. No case is known in which excitation through a single
synapse has elicited a nervous impulse in any neuron, whereas any
115
★ 1943年,McCulloch
と Pitts によって脳の
計算モデル「形式的
ニューロン」が提案
された [4].
脳 の 計 算 モ デル :
形 式 的 ニュ ー ロ ン
★ 1943年,McCulloch
と Pitts によって脳の
計算モデル「形式的
ニューロン」が提案
された [4].
★ 形式的ニューロンは
エッジに「重みw」,
ノードに「閾値θ」
を備えた単純なグラ
フ的モデルである.
脳の神経細胞(ニューロン)と形式的ニューロン
画像は [5] p.16, p.18 より引用
正 規 表 現 の 誕 生
★ 1951年にKleeneが 
形式的ニューロンの
計算可能なクラスを
「正規表現」「オー
トマトン」の2つの道
具で形式化 [6].
★ 「形式的ニューロンで計算可」
「正規表現で表現可」  
「オートマトンで計算可」
正 規 表 現 の 誕 生
★ 「正規表現 (regular
expression)」の命名
は1951年のKleeneの
論文から.
★ つまり正規表現の生
みの親は Kleene 大先
生.
★ 正規表現の書き換え
規則(公理)の考察
も行ってる. 論文 [3] の1ページを引用
オ ー トマ トン の
発 展
★ オートマトンとは?
→ 文字列を認識する
有限グラフモデル.
★ 初期状態から入力に
従って状態を遷移,
最終的に受理状態に
到達すれば入力を 
「受理」,到達しな
ければ「非受理」.
0
a
1
b
a
2
b
b
a
オ ー トマ トン の
発 展
★ オートマトンとは?
→ 文字列を認識する
有限グラフモデル.
★ 初期状態から入力に
従って状態を遷移,
最終的に受理状態に
到達すれば入力を 
「受理」,到達しな
ければ「非受理」.
0
a
1
b
a
2
b
b
a
「a,bからなる文字列で,
bの出現回数が3の倍数」
となる文字列を受理する
オートマトン.0が初期状
態かつ受理状態.
オ ー トマ トン の
発 展
★ オートマトンとは?
→ 文字列を認識する
有限グラフモデル.
★ 初期状態から入力に
従って状態を遷移,
最終的に受理状態に
到達すれば入力を 
「受理」,到達しな
ければ「非受理」.
0
a
1
b
a
2
b
b
a
「a,bからなる文字列で,
bの出現回数が3の倍数」
となる文字列を受理する
オートマトン.0が初期状
態かつ受理状態.
正規表現で書くと
a*(ba*ba*ba*)*
オ ー トマ トン の
発 展
★ オートマトンには非
決定性・決定性とい
う性質がある.
★ 初期状態が1つで,か
つ各状態が「1文字に
対して遷移先がたか
だか1つ」という条件
をみたす場合決定性
(DFA),そうでない場
合は非決定性(NFA).
0
b
1
a
2
a
3
b
a
b
b
a
0
a
b
1
a
2
a
b
「a,bからなる文字列で後ろから
2番目の文字がa」となる文字列
を受理す2つのオートマトン.
上はNFAで下はDFA!
オ ー トマ トン の
発 展
★ 1959年,RabinとScott
が「任意のオートマト
ンは決定性のオートマ
トンに変換できる」こ
とを示した(部分集合
構成法)[7].
★ この業績で二人は計算
機科学者にとって最高
の栄誉であるチューリ
ング章を受賞.
0
a
b
1
a
2
a
b
部分集合構成による決定化
0
b
0
1
a
0
1
2
a
0
2
b
a
b
b
a
プ ロ グ ラ マ の た
め の 道 具 へ
★ 1968年,Ken Thompson
(UNIXとかC言語作った
マジモンのハッカー)が
「正規表現からNFAへの
変換(Thompsonの構成
法)」及び「NFAの実装手
法」に関する最初の論文
を発表 [8].
★ Thompson のこの成果は
世界初の「ソフトウェア
の特許」に(1971年).
R. M. McCLUR£, Editor
RegularExpressionSearch
Algorithm
I~EN THOMPSON
Bell Telephone Laboratories, Inc., Murray Hill, New Jersey
A method for locating specific character strings embedded
in character text is described and an implementation of this
method in the form of a compiler is discussed. The compiler
accepts a regular expression as source language and pro-
duces an IBM 7094 program as object language. The object
program then accepts the text to be searched as input and
produces a signal every time an embedded string in the text
matches the given regular expression. Examples, problems,
and solutions are also presented.
KEY WORDS AND PHRASES: search,match, regular expression
CR CATEGORIES: 3.74, 4.49, 5.32
The Algorithm
Previous search algorithms involve backtracking when
a partially successful search path fails. This necessitates
a lot of storage and bookkeeping, and executes slowly. In
the regular expression recognition technique described in
this paper, each character in the text to be searched is
examined in sequence against a list of all possible current
characters. During this examination a new list of all
possible next characters is built. When the end of the
current list is reached, the new list becomes the current
list, the next character is obtained, and the process con-
tinues. In the terms of Brzozowski [1], this algorithm con-
tinually takes the left derivative of the given regular ex-
pression with respect to the text to be searched. The
parallel nature of this algorithm makes it extremely fast.
The Implementation
The specific implementation of this algorithm is a com-
piler that translates a regular expression into IBM 7094
code. The compiled code, along with certain runtime
routines, accepts the text to be searched as input and
finds all substrings in the text that match the regular
expression. The compiling phase of the implemention does
not detract from the overall speed since any search routine
must translate the input regular expression into some
sort of machine accessible form.
In the compiled code, the lists mentioned in the algo-
rithm are not characters, but transfer instructions into
the compiled code. The execution is extremely fast since
a transfer to the top of the current list automatically
searches for all possible sequel characters in the regular
expression.
This compile-search algorithm is incorporated as the
context search in a time-sharing text editor. This is by
no means the only use of such a search routine. For
example, a variant of this algorithm is used as the symbol
table search in an assembler.
It is assumed that the reader is familiar with regular
expressions [2] and the machine language of the IBM 7094
computer [3].
The Compiler
The compiler consists of three concurrently running
stages. The first stage is a syntax sieve that allows only
syntactically correct regular expressions to pass. This
stage also inserts the operator "." for juxtaposition of
regular expressions. The second stage converts the regular
expression to reverse Polish form. The third stage is the
object code producer. The first two stages are straight-
forward and are not discussed. The third stage expects a
syntactically correct, reverse Polish regular expression.
The regular expression a(b I c),d will be carried through
as an example. This expression is translated into abc I * " d •
by the first two stages. A functional description of the
third stage of the compiler follows:
The heart of the third stage is a pushdown stack. Each
entry in the pushdown stack is a pointer to the compiled
code of an operand. When a binary operator ("1" or ". ")
is compiled, the top (most recent) two entries on the stack
are combined and a resultant pointer for the operation re-
places the two stack entries. The result of the binary
operator is then available as an operand in another opera-
tion. Similarly, a unary operator ("*") operates on the top
entry of the stack and creates an operand to replace that
entry. When the entire regular expression is compiled,
there is just one entry in the stack, and that is a pointer to
the code for the regular expression.
The compiled code invokes one of two functional rou-
tines. The first is called NNODE. NNODE matches a
single character and will be represented by an oval con-
taining the character that is recognized. The second func-
tional routine is called CNODE. CNODE will split the
Volume 11 / Number 6 / June, 1968 Communications of the ACM 419
プ ロ グ ラ マ の た
め の 道 具 へ
★ 1973年,Thompson が正
規表現による文字列検索
ツール grep をUNIXのた
めに開発.
★ 以降,Perl 等のプログラ
ミング言語にも正規表現
は搭載され,今日では正
規表現はほとんどのプロ
グラミング言語に搭載.
多くのプログラマに愛さ
れる存在に.
Regular
Expressions
Powerful Techniques for Perl and Other Tools
Jeffrey E. F. Friedl
Mastering
正 規 表 現 の 理 論
と 現 在
★ 正規表現は,実用にも便利
だけど,理論的にもとても
奥深い研究対象.対応する
計算モデルや代数モデル,
論理モデルが多数存在.
★ 「普遍的な構造は多様な_ 
_ 特徴付けを持つ」
★ 純粋理論的な研究もまだま
だ行われている.
正規言語
(文字列の集合)
{ε, a, aa, bb, aaa, abb, bab, bbb, ...}
0
a
1
b
b
a
有限オートマトン
(計算モデル)
有限モノイド
(代数モデル)
単項二階述語論理
(論理式)
正規文法
(生成文法)
正規表現
(表現式)
a*(ba*ba*)*
Profinite words
上の開閉集合
(トポロジー)
正 規 表 現 の 理 論
と 現 在
★ 正規表現は,実用にも便利
だけど,理論的にもとても
奥深い研究対象.対応する
計算モデルや代数モデル,
論理モデルが多数存在.
★ 「普遍的な構造は多様な_ 
_ 特徴付けを持つ」
★ 純粋理論的な研究もまだま
だ行われている.
正規言語
(文字列の集合)
{ε, a, aa, bb, aaa, abb, bab, bbb, ...}
0
a
1
b
b
a
有限オートマトン
(計算モデル)
有限モノイド
(代数モデル)
単項二階述語論理
(論理式)
正規文法
(生成文法)
正規表現
(表現式)
a*(ba*ba*)*
Profinite words
上の開閉集合
(トポロジー)
★ その一つが「星の高さ」
正 規 表 現 と 星 の 高 さ
– V I N C E N T VA N G O G H ( 1 8 8 8 )
“Starry Night over the Rhone.”
正 規 表 現 に お ける 星
★ 繰り返しを表す演算子「*」は
★ 「Kleeneスター」とか「Kleene閉包」とか
★ 「スター演算子」とか呼ばれている
!
★ 正規表現における「星の高さ」とは,直感的にはこの
スター演算子のネストの深さのこと.
星 の 高 さ
S TA R H E I G H T
★ 正規表現に対する「星の高さ」を表す関数 h は次のよ
うに再帰的に定義される
★ 任意のアルファベットσに対して h(σ) = 0
★ 正規表現 r, s に対して
★ h(rs) = h(r|s) = max(h(r), h(s))
★ h(r*) = h(r) + 1
星 の 高 さ
S TA R H E I G H T
★ 正規表現に対する「星の高さ」を表す関数 h は次のよ
うに再帰的に定義される
★ 任意のアルファベットσに対して h(σ) = 0
★ 正規表現 r, s に対して
★ h(rs) = h(r|s) = max(h(r), h(s))
★ h(r*) = h(r) + 1
★ つまりは,一番ネストしてる *の深さのこと
星 の 高 さ の 例
★ (a|bc)d = 星の高さ0 , a* = 星の高さ1
!
★ a*(ba*ba*)* = 星の高さ 2
!
★ ((a*)*)* = 星の高さ 3
同 じ だ け ど 見 た 目 は 異 な る 正 規 表 現
★ a* と (a*)* は明らかに同じ正規表現 (なぜ?)
!
★ a*(ba*ba*)* と (a*|a*b(a|ba*b)*ba*) も同じ正規表現
!
★ 同じ正規表現でも星の高さが異なる場合がある
正 規 ” 言 語 ” に お ける 星 の 高 さ
★ 正規表現で表現できる文字列の集合を正規言語と呼ぶ
★ 「正規言語 L の星の高さ」を「Lを表現する正規表現
_の星の高さの中で最小のもの」として定義
★ h(L) = min{ h(r) | r は L を表現する正規表現 }
正 規 ” 言 語 ” に お ける 星 の 高 さ
★ 正規表現で表現できる文字列の集合を正規言語と呼ぶ
★ 「正規言語 L の星の高さ」を「Lを表現する正規表現
_の星の高さの中で最小のもの」として定義
★ h(L) = min{ h(r) | r は L を表現する正規表現 }
★ 与えられた正規言語 L の星の高さを決定する問題を
「星の高さ問題 (star-hight problem)」と呼ぶ.
★ 1963年に Eggan が提唱[9]
星 の 高 さ を 計 れ る か?
★ 与えられた正規言語 L に対して,星の高さを決定する
アルゴリズムは存在するか?
星 の 高 さ を 計 れ る か?
★ 与えられた正規言語 L に対して,星の高さを決定する
アルゴリズムは存在するか?
★ 存在する! 1988年に Hashiguchi が肯定的に解決 [10]
星 の 高 さ を 計 れ る か?
★ 与えられた正規言語 L に対して,星の高さを決定する
アルゴリズムは存在するか?
★ 存在する! 1988年に Hashiguchi が肯定的に解決 [10]
★ もの凄く一般的な命題の証明
星 の 高 さ を 計 れ る か?
★ 与えられた正規言語 L に対して,星の高さを決定する
アルゴリズムは存在するか?
★ 存在する! 1988年に Hashiguchi が肯定的に解決 [10]
★ 証明がめちゃくちゃ難しい…
★ もの凄く一般的な命題の証明
星 の 高 さ を 計 れ る か?
★ 与えられた正規言語 L に対して,星の高さを決定する
アルゴリズムは存在するか?
★ 存在する! 1988年に Hashiguchi が肯定的に解決 [10]
★ 証明がめちゃくちゃ難しい…
★ 計算量がやばい
★ もの凄く一般的な命題の証明
「 星 の 高 さ 問 題 」 の 証 明 は 難 し い
“Indeed, the existing proof, putting all pieces together, takes more
than a hundred pages of very heavy combinatorial reasoning.”
I. Simon, MFCS’88 Proceedings, 1988
!
“The proof is very difficult to understand and a lot remains to be
done to make it a tutorial presentation.”
D. Perrin, Finite Automata, Handbook of Theor. Comp. Sc., 1990
!
“Hashiguchi’s solution for arbitrary star height relies on a
complicated induction, which makes the proof very difficult to
follow.” J.-E. Pin, Tropical Semirings, Idempotency, 1998
「 星 の 高 さ 問 題 」 は 難 し い
★ 同じ言語を表現する正規表現は無限にある.
★ そのため,列挙して調べることは無理(停止しない)
!
★ 正規表現の性質の良い最小形は知られていない.
E G G A N の 定 理
★ h(L)は,Lを認識するNFAの最小サイクルランクに等しい
★ Egganの1963年の論文の結果 [9]
★ 厳密には「ε-NFAの最小サイクルランク」について
Egganは定理を示し,1972年にRina [11]が「NFAの最
小サイクルランク」というより強い結果に拡張した.
有 向 グ ラ フ の サイクル ラ ン ク
★ 有向グラフ G = (V, E) に対する サイクルランクr(G)は以
下のように再帰的に定義される
★ Gがループを含まない場合
★ r(G) = 0
★ Gが強連結の場合:
★ r(G) = 1 + min { r(G - v) | v は Gのノード}
★ Gが強連結でない場合
★ r(G) = max( r(G’) | G’は Gの部分グラフ )
★ (Gの部分グラフの中で最大のサイクルランク)
有 向 グ ラ フ の サイクル ラ ン ク
★ 有向グラフ G = (V, E) に対する サイクルランクr(G)は以
下のように再帰的に定義される
★ Gがループを含まない場合
★ r(G) = 0
★ Gが強連結の場合:
★ r(G) = 1 + min { r(G - v) | v は Gのノード}
★ Gが強連結でない場合
★ r(G) = max( r(G’) | G’は Gの部分グラフ )
★ (Gの部分グラフの中で最大のサイクルランク)
★ 直感的には「サイクルの消しにくさ」と捉えれる
サイクル ラ ン ク の 例
Examples 6.2
(i) Graphs with loop complexity 1:
(ii) Graphs with loop complexity 2:
(iii) Graphs with loop complexity 3:
★サ イクル ラ ン ク 1 の グ ラ フ
サイクル ラ ン ク の 例
Examples 6.2
(i) Graphs with loop complexity 1:
(ii) Graphs with loop complexity 2:
(iii) Graphs with loop complexity 3:
★サ イクル ラ ン ク 1 の グ ラ フ
Examples 6.2
(i) Graphs with loop complexity 1:
(ii) Graphs with loop complexity 2:
(iii) Graphs with loop complexity 3:
★サ イクル ラ ン ク 2 の グ ラ フ
サイクル ラ ン ク の 例
Examples 6.2
(i) Graphs with loop complexity 1:
(ii) Graphs with loop complexity 2:
(iii) Graphs with loop complexity 3:
★サ イクル ラ ン ク 1 の グ ラ フ
Examples 6.2
(i) Graphs with loop complexity 1:
(ii) Graphs with loop complexity 2:
(iii) Graphs with loop complexity 3:
★サ イクル ラ ン ク 2 の グ ラ フ
amples 6.2
Graphs with loop complexity 1:
Graphs with loop complexity 2:
) Graphs with loop complexity 3:★サ イクル ラ ン ク 3 の グ ラ フ
最 小 サイクル ラ ン ク = 星 の 高 さ
★ 証明はそんなに難しくない.が,細かく議論すると大変
!
★ 証明方針
★ 任意の正規表現 r にたいして,h(r)以下のサイクルラ
ン ク を 持 つ 等 価 な N FA を 構 成 で き る 事 を 示 す 
( State elimination 法 )
★ 任意のNFA Nに対して,r(N)以下の星の高さを持つ等
価な正規表現が構成できることを示す
( Thompson の構成法)
E G G A N の も う 一 つ の 定 理
★ 星の高さは無限の階層をなす
★ つまり任意の自然数 n について,h(L) ≧ n となる正規
言語 L が存在する!
★ Egganが1963年に証明.
★ Sakarovitch が 2007年により強い形で再証明 [1].
E G G A N の も う 一 つ の 定 理
★ 星の高さは無限の階層をなす
★ つまり任意の自然数 n について,h(L) ≧ n となる正規
言語 L が存在する!
★ Egganが1963年に証明.
★ Sakarovitch が 2007年により強い形で再証明 [1].
q
★ 「a,bからなる文字列で,aの個数とbの個数が2 による
_において等しい」全ての文字列からなる言語 L の星の
高さがちょうど q となる (Sakarovitch, [1]).
星 の 高 さ は 潰 れ な い
Figure 6.7: The
The proof that Wq is of heigh
w be the sequence of q word
右のオートマトンで受理される言語は
「2^3の剰余でaとbの個数が一致する」
ような文字列.つまりこのオートマトン
が受理する言語の星の高さは3.この
オートマトンのサイクルランクも3.
星 の 高 さ は 潰 れ な い
q
★ 「a,bからなる文字列で,aの個数とbの個数が2 による
_剰余において等しい」全ての文字列からなる言語 L の
星の高さがちょうど q となる (Sakarovitch, [1]).
Figure 6.7: The
The proof that Wq is of heigh
w be the sequence of q word
右のオートマトンで受理される言語は
「2^3の剰余でaとbの個数が一致する」
ような文字列.つまりこのオートマトン
が受理する言語の星の高さは3.この
オートマトンのサイクルランクも3.
星 の 高 さ は 潰 れ な い
★ サイクルランクが高いオートマトンから言語を階層的に
構成して,あとは正規表現の方向から頑張って証明す
る(証明は難しい).
Figure 6.7: The
The proof that Wq is of heigh
w be the sequence of q word
右のオートマトンで受理される言語は
「2^3の剰余でaとbの個数が一致する」
ような文字列.つまりこのオートマトン
が受理する言語の星の高さは3.この
オートマトンのサイクルランクも3.
正 規 表 現 の 否 定
正 規 言 語 の 良 い 性 質
★ 対応する表現・計算モデ
ルが多い
★ 多くの演算に閉じている
★ 正規言語は否定(補集合)
が取れる.
正規言語
(文字列の集合)
{ε, a, aa, bb, aaa, abb, bab, bbb, ...}
0
a
1
b
b
a
有限オートマトン
(計算モデル)
有限モノイド
(代数モデル)
単項二階述語論理
(論理式)
正規文法
(生成文法)
正規表現
(表現式)
a*(ba*ba*)*
Profinite words
上の開閉集合
(トポロジー)
正 規 言 語 の 良 い 性 質
★ 対応する表現・計算モデ
ルが多い
★ 多くの演算に閉じている
★ 正規言語は否定(補集合)
が取れる.
正規言語
(文字列の集合)
{ε, a, aa, bb, aaa, abb, bab, bbb, ...}
0
a
1
b
b
a
有限オートマトン
(計算モデル)
有限モノイド
(代数モデル)
単項二階述語論理
(論理式)
正規文法
(生成文法)
正規表現
(表現式)
a*(ba*ba*)*
Profinite words
上の開閉集合
(トポロジー)
★ かっこ良く言うと   
「正規言語はブール代数
_で閉じてる」
正 規 言 語 の 良 い 性 質
★ 対応する表現・計算モデ
ルが多い
★ 多くの演算に閉じている
★ 正規言語は否定(補集合)
が取れる.
正規言語
(文字列の集合)
{ε, a, aa, bb, aaa, abb, bab, bbb, ...}
0
a
1
b
b
a
有限オートマトン
(計算モデル)
有限モノイド
(代数モデル)
単項二階述語論理
(論理式)
正規文法
(生成文法)
正規表現
(表現式)
a*(ba*ba*)*
Profinite words
上の開閉集合
(トポロジー)
★ かっこ良く言うと   
「正規言語はブール代数
_で閉じてる」
正規言語が否定に閉じて
いることを正規表現を使っ
て示すのは,難しい.
正 規 言 語 の 良 い 性 質
★ 対応する表現・計算モデ
ルが多い
★ 多くの演算に閉じている
★ 正規言語は否定(補集合)
が取れる.
正規言語
(文字列の集合)
{ε, a, aa, bb, aaa, abb, bab, bbb, ...}
0
a
1
b
b
a
有限オートマトン
(計算モデル)
有限モノイド
(代数モデル)
単項二階述語論理
(論理式)
正規文法
(生成文法)
正規表現
(表現式)
a*(ba*ba*)*
Profinite words
上の開閉集合
(トポロジー)
★ かっこ良く言うと   
「正規言語はブール代数
_で閉じてる」
正規言語が否定に閉じて
いることを正規表現を使っ
て示すのは,難しい.
でも有限オートマトンや
モノイド等を使うと証明
は楽勝(一発)!!色んな
特徴付けがある利点.
正 規 言 語 の 否 定 ( 正 規 表 現 で 考 える )
★ 正規言語 L の否定 Lとは「Lに属さない文字列の集合」
★ つまりは L の補集合
!
★ a*(ba*ba*)* は「bが偶数回現れるa,b上の文字列」
★ 問題:ではその否定は?
正 規 言 語 の 否 定 ( 正 規 表 現 で 考 える )
★ 正規言語 L の否定 Lとは「Lに属さない文字列の集合」
★ つまりは L の補集合
!
★ a*(ba*ba*)* は「bが偶数回現れるa,b上の文字列」
★ 問題:ではその否定は?
★ 当然「bが奇数回現れるa,b上の文字列」
正 規 言 語 の 否 定 ( 正 規 表 現 で 考 える )
★ 正規言語 L の否定 Lとは「Lに属さない文字列の集合」
★ つまりは L の補集合
!
★ a*(ba*ba*)* は「bが偶数回現れるa,b上の文字列」
★ 問題:ではその否定は?
★ 当然「bが奇数回現れるa,b上の文字列」
★ 正規表現で書くと a*ba*(ba*ba*)*
正 規 言 語 の 否 定 ( 正 規 表 現 で 考 える )
★ 正規言語 L の否定 Lとは「Lに属さない文字列の集合」
★ つまりは L の補集合
!
★ a*(ba*ba*)* は「bが偶数回現れるa,b上の文字列」
★ 問題:ではその否定は?
★ 当然「bが奇数回現れるa,b上の文字列」
★ 正規表現で書くと a*ba*(ba*ba*)*
★ 正規表現を「否定の正規表現」に変形するのはとても
難しい
正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える )
★ 「0から0へのパスの集合」の補集合は?
0
a
1
b
b
a
正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える )
★ 「0から0へのパスの集合」の補集合は?
★ 「0から1へのパスの集合」にほかならない!
0
a
1
b
b
a
正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える )
★ 「0から0へのパスの集合」の補集合は?
★ 「0から1へのパスの集合」にほかならない!
★ パスの終点(受理状態)の補集合を取れば良いだけ!
0
a
1
b
b
a
正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える )
★ 「0から0へのパスの集合」の補集合は?
★ 「0から1へのパスの集合」にほかならない!
★ パスの終点(受理状態)の補集合を取れば良いだけ!
0
a
1
b
b
a
0
a
1
b
b
a
否定
正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える )
★ 「0から0へのパスの集合」の補集合は?
★ 「0から1へのパスの集合」にほかならない!
★ パスの終点(受理状態)の補集合を取れば良いだけ!
0
a
1
b
b
a
0
a
1
b
b
a
否定
注意:この方法で否定を取れるのはDFA.NFAは一般的にダメ(なぜ?)
正 規 表 現 か ら 否 定 の 正 規 表 現 を 作 る
★ Step 1. 正規表現からNFAを作る (Thompson 構成法)
★ Step 1.5 ε遷移を除去する
★ Step 2. NFAからDFAを作る (部分集合構成法)
★ Step 3. DFA の否定を取る (受理状態を入れ替える)
★ Step 4. 否定のDFAから正規表現を構成 (State elimination)
正 規 表 現 か ら 否 定 の 正 規 表 現 を 作 る
★ Step 1. 正規表現からNFAを作る (Thompson 構成法)
★ Step 1.5 ε遷移を除去する
★ Step 2. NFAからDFAを作る (部分集合構成法)
★ Step 3. DFA の否定を取る (受理状態を入れ替える)
★ Step 4. 否定のDFAから正規表現を構成 (State elimination)
以上!
一 般 化 星 の 高 さ 問 題
– R U F I N O TA M AY O ( 1 9 5 0 )
“Man Before the Infinite.”
一 般 化 星 の 高 さ
G E N E R A L I Z E D S TA R H E I G H T
★ 正規表現に否定演算「!」を入れたときの星の高さ
★ 「*」「!」「|」が使える正規表現を拡張正規表現と呼ぶ
★ 正規表現の一般化星の高さgh(r)は以下の定義
★ 任意のアルファベットσに対して gh(σ) = 0
★ 正規表現 r, s に対して
★ gh(rs) = gh(r|s) = max(gh(r), gh(s))
★ gh(r*) = gh(r) + 1
★ gh(!r) = gh(r)
一 般 化 星 の 高 さ
G E N E R A L I Z E D S TA R H E I G H T
★ 正規表現に否定演算「!」を入れたときの星の高さ
★ 「*」「!」「|」が使える正規表現を拡張正規表現と呼ぶ
★ 正規表現の一般化星の高さgh(r)は以下の定義
★ 任意のアルファベットσに対して gh(σ) = 0
★ 正規表現 r, s に対して
★ gh(rs) = gh(r|s) = max(gh(r), gh(s))
★ gh(r*) = gh(r) + 1
★ gh(!r) = gh(r) ← New!
一 般 化 星 の 高 さ 問 題
★ 与えられた正規言語 L において,その一般化星の高さ
を計算するアルゴリズムは存在するか?
一 般 化 星 の 高 さ の 階 層
★ 一般化星の高さは無限階層をなすか?
★ つまり任意の自然数 n について,あるLが存在して
gh(L) ≧ n となるか?
一 般 化 星 の 高 さ 問 題 とそ の 階 層 問 題 は … .
★ 半世紀未解決
(1960∼)
一 般 化 星 の 高 さ の 階 層
★ 一般化星の高さは無限階層をなすか不明
!
★ それどころか,gh(L) = 2 となる正規言語Lが存在する
かどうかすら不明!!
S C H Ü T Z E N B E R G E ’ S T H E O R E M
一 般 化 星 の 高 さ の 有 名 な 定 理
★ 言語 L が Star-free L の 有限モノイドが aperiodic
★ Star-free: 「*」を使わないで書ける言語(拡張正規表現で)
★ とても美しい定理だけど,説明するには半群の講義
が必要なので省略
★ Schützenberger が 1965年に証明 [12]
S TA R - F R E E L A N G U A G E
星 を 使 わ な い 言 語
★ (ab)* は星自由言語 (考えてみよう)
!
★ (aa)* は星自由言語ではない (Schützenbergerの定理より)
正 規 表 現 入 門
星 の 高 さ を 求 めて
J O I 2 0 1 4 春 合 宿
お わ り に …
★ 正規表現はどうでしたか? 星の高さに浪漫を感じまし
たか?
★ 「一般化星の高さ問題」は正規言語の理論において 
燦然と輝く1960年代からの未解決問題です.
★ 「解かれている問題」を改めて解くのも良いですが,
「解けていない問題」にぶつかってみるのも楽しいか
もしれません.
J O I 2 0 1 4 合 宿 で の 様 子
★ 若い学生さんたちに興味津々に聞いてもらえたと思います
★ 「 (ab)* が星自由である」を中高生がサクサク解いてびっくり!
正 規 言 語 の 研 究 者 は 日 本 で は 少 な い
★ 皆さん正規言語の研究
しましょう.
★ いつでも相談に乗りま
す.研究テーマを提案
することも可能です.
★ 正規言語に関する質問
はいつでも歓迎です.
Twitter ( @sinya8282 )
参 考 文 献
[ 1 ] S A K A R O V I T C H 先 生
の 神 本 : 通 称 E AT ( 2 0 0 7 )
★ オートマトンの話題が広
く深く網羅されている
★ Egganの定理の証明も
載ってる
★ 僕が「正規言語」の虜に
なったのはこの本を読ん
だから
★ 分厚い(760ページぐらい)
★ 組版が美しい
[ 2 ] L A W S O N 先 生 の 入 門 書
( 2 0 0 3 )
★ 正規言語の「代数の理論」が
しっかり書かれている
★ Schützenberger の定理の
証明も
!
★ 半群の研究者が書いた本
!
★ Variety theory の入門書に最適
[ 3 ] S I P S E R 先 生 の 入 門 書
第 三 版 ( 2 0 1 2 )
★ 計算理論の入門書
!
★ 最も読みやすいオートマ
トンの入門書.    
すぐ読める.
!
★ 和訳(『計算理論の基
礎』)もあるのでお薦め.
★ [4] Michael A. Arbib: Brains, Machines, and Mathematics (1987)
★ [5] Warren S. McCulloch, Walter Pitts: A Logical Calculus of the Ideas Imma-
nent in Nervous Activity (1943)
★ [6] S. C. Kleene: Representation of Events in Nerve Nets and Finite Automata
(1951)
★ [7] M.O. Rabin, D. Scott: Finite Automata and Their Decision Problems (1959)
★ [8] Ken Thompson: Regular Ex- pression Search Algorithm (1968)
★ [9] L.C. Eggan: Transition graphs and the star-height of regular events (1963)
★ [10] K. Hashiguchi: Algorithms for Determining Relative Star Height and Star
Height (1988)
★ [11] Rina, S, Cohen: Rank-non-increasing transformations on transition graphs
(1971)
★ [12] M.P. Schützenberger: On finite monoids having only trivial subgroups
(1965)

Más contenido relacionado

La actualidad más candente

【メタサーベイ】Vision and Language のトップ研究室/研究者
【メタサーベイ】Vision and Language のトップ研究室/研究者【メタサーベイ】Vision and Language のトップ研究室/研究者
【メタサーベイ】Vision and Language のトップ研究室/研究者cvpaper. challenge
 
【DL輪読会】Flow Matching for Generative Modeling
【DL輪読会】Flow Matching for Generative Modeling【DL輪読会】Flow Matching for Generative Modeling
【DL輪読会】Flow Matching for Generative ModelingDeep Learning JP
 
機械学習を用いた異常検知入門
機械学習を用いた異常検知入門機械学習を用いた異常検知入門
機械学習を用いた異常検知入門michiaki ito
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision TransformerYusuke Uchida
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてalwei
 
Graph Attention Network
Graph Attention NetworkGraph Attention Network
Graph Attention NetworkTakahiro Kubo
 
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...Deep Learning JP
 
【論文紹介】 Attention Based Spatial-Temporal Graph Convolutional Networks for Traf...
【論文紹介】 Attention Based Spatial-Temporal Graph Convolutional Networks for Traf...【論文紹介】 Attention Based Spatial-Temporal Graph Convolutional Networks for Traf...
【論文紹介】 Attention Based Spatial-Temporal Graph Convolutional Networks for Traf...ddnpaa
 
みんなが知らない pytorch-pfn-extras
みんなが知らない pytorch-pfn-extrasみんなが知らない pytorch-pfn-extras
みんなが知らない pytorch-pfn-extrasTakuji Tahara
 
Visual Question Answering (VQA) - CVPR2018動向分析 (CVPR 2018 完全読破チャレンジ報告会)
Visual Question Answering (VQA) - CVPR2018動向分析 (CVPR 2018 完全読破チャレンジ報告会)Visual Question Answering (VQA) - CVPR2018動向分析 (CVPR 2018 完全読破チャレンジ報告会)
Visual Question Answering (VQA) - CVPR2018動向分析 (CVPR 2018 完全読破チャレンジ報告会)cvpaper. challenge
 
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜Ryoma Sin'ya
 
Vision and Language(メタサーベイ )
Vision and Language(メタサーベイ )Vision and Language(メタサーベイ )
Vision and Language(メタサーベイ )cvpaper. challenge
 
SSII2019TS: Shall We GANs?​ ~GANの基礎から最近の研究まで~
SSII2019TS: Shall We GANs?​ ~GANの基礎から最近の研究まで~SSII2019TS: Shall We GANs?​ ~GANの基礎から最近の研究まで~
SSII2019TS: Shall We GANs?​ ~GANの基礎から最近の研究まで~SSII
 
Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recog...
Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recog...Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recog...
Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recog...yukihiro domae
 
モデル高速化百選
モデル高速化百選モデル高速化百選
モデル高速化百選Yusuke Uchida
 
【論文読み会】Alias-Free Generative Adversarial Networks(StyleGAN3)
【論文読み会】Alias-Free Generative Adversarial Networks(StyleGAN3)【論文読み会】Alias-Free Generative Adversarial Networks(StyleGAN3)
【論文読み会】Alias-Free Generative Adversarial Networks(StyleGAN3)ARISE analytics
 
画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイcvpaper. challenge
 
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language SupervisionDeep Learning JP
 

La actualidad más candente (20)

【メタサーベイ】Vision and Language のトップ研究室/研究者
【メタサーベイ】Vision and Language のトップ研究室/研究者【メタサーベイ】Vision and Language のトップ研究室/研究者
【メタサーベイ】Vision and Language のトップ研究室/研究者
 
【DL輪読会】Flow Matching for Generative Modeling
【DL輪読会】Flow Matching for Generative Modeling【DL輪読会】Flow Matching for Generative Modeling
【DL輪読会】Flow Matching for Generative Modeling
 
機械学習を用いた異常検知入門
機械学習を用いた異常検知入門機械学習を用いた異常検知入門
機械学習を用いた異常検知入門
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
 
Graph Attention Network
Graph Attention NetworkGraph Attention Network
Graph Attention Network
 
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
 
【論文紹介】 Attention Based Spatial-Temporal Graph Convolutional Networks for Traf...
【論文紹介】 Attention Based Spatial-Temporal Graph Convolutional Networks for Traf...【論文紹介】 Attention Based Spatial-Temporal Graph Convolutional Networks for Traf...
【論文紹介】 Attention Based Spatial-Temporal Graph Convolutional Networks for Traf...
 
みんなが知らない pytorch-pfn-extras
みんなが知らない pytorch-pfn-extrasみんなが知らない pytorch-pfn-extras
みんなが知らない pytorch-pfn-extras
 
Visual Question Answering (VQA) - CVPR2018動向分析 (CVPR 2018 完全読破チャレンジ報告会)
Visual Question Answering (VQA) - CVPR2018動向分析 (CVPR 2018 完全読破チャレンジ報告会)Visual Question Answering (VQA) - CVPR2018動向分析 (CVPR 2018 完全読破チャレンジ報告会)
Visual Question Answering (VQA) - CVPR2018動向分析 (CVPR 2018 完全読破チャレンジ報告会)
 
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
 
Vision and Language(メタサーベイ )
Vision and Language(メタサーベイ )Vision and Language(メタサーベイ )
Vision and Language(メタサーベイ )
 
TabNetの論文紹介
TabNetの論文紹介TabNetの論文紹介
TabNetの論文紹介
 
SSII2019TS: Shall We GANs?​ ~GANの基礎から最近の研究まで~
SSII2019TS: Shall We GANs?​ ~GANの基礎から最近の研究まで~SSII2019TS: Shall We GANs?​ ~GANの基礎から最近の研究まで~
SSII2019TS: Shall We GANs?​ ~GANの基礎から最近の研究まで~
 
Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recog...
Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recog...Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recog...
Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recog...
 
モデル高速化百選
モデル高速化百選モデル高速化百選
モデル高速化百選
 
【論文読み会】Alias-Free Generative Adversarial Networks(StyleGAN3)
【論文読み会】Alias-Free Generative Adversarial Networks(StyleGAN3)【論文読み会】Alias-Free Generative Adversarial Networks(StyleGAN3)
【論文読み会】Alias-Free Generative Adversarial Networks(StyleGAN3)
 
画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ
 
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
 

Más de Ryoma Sin'ya

有限モデル理論入門:MSOとオートマトン
有限モデル理論入門:MSOとオートマトン有限モデル理論入門:MSOとオートマトン
有限モデル理論入門:MSOとオートマトンRyoma Sin'ya
 
統語的曖昧性・普遍性判定問題の決定可能性
統語的曖昧性・普遍性判定問題の決定可能性統語的曖昧性・普遍性判定問題の決定可能性
統語的曖昧性・普遍性判定問題の決定可能性Ryoma Sin'ya
 
正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜Ryoma Sin'ya
 
A new technique for proving non regularity based on the measure of a language
A new technique for proving non regularity based on the measure of a languageA new technique for proving non regularity based on the measure of a language
A new technique for proving non regularity based on the measure of a languageRyoma Sin'ya
 
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety TheoremRyoma Sin'ya
 
"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介Ryoma Sin'ya
 
正規表現++
正規表現++正規表現++
正規表現++Ryoma Sin'ya
 
正規言語でプログラミング
正規言語でプログラミング正規言語でプログラミング
正規言語でプログラミングRyoma Sin'ya
 
並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化Ryoma Sin'ya
 
世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装Ryoma Sin'ya
 

Más de Ryoma Sin'ya (10)

有限モデル理論入門:MSOとオートマトン
有限モデル理論入門:MSOとオートマトン有限モデル理論入門:MSOとオートマトン
有限モデル理論入門:MSOとオートマトン
 
統語的曖昧性・普遍性判定問題の決定可能性
統語的曖昧性・普遍性判定問題の決定可能性統語的曖昧性・普遍性判定問題の決定可能性
統語的曖昧性・普遍性判定問題の決定可能性
 
正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜
 
A new technique for proving non regularity based on the measure of a language
A new technique for proving non regularity based on the measure of a languageA new technique for proving non regularity based on the measure of a language
A new technique for proving non regularity based on the measure of a language
 
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
 
"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介"Mix Automatic Sequences"(LATA'13) の紹介
"Mix Automatic Sequences"(LATA'13) の紹介
 
正規表現++
正規表現++正規表現++
正規表現++
 
正規言語でプログラミング
正規言語でプログラミング正規言語でプログラミング
正規言語でプログラミング
 
並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化並列化と実行時コード生成を用いた正規表現マッチングの高速化
並列化と実行時コード生成を用いた正規表現マッチングの高速化
 
世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装
 

Último

3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイントshu1108hina1020
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfoganekyokoi
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfoganekyokoi
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」inspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdfoganekyokoi
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1Toru Oga
 

Último (20)

3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdf
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdf
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1
 

正規表現入門 星の高さを求めて

  • 1. 正 規 表 現 入 門 星 の 高 さ を 求 めて J O I 2 0 1 4 春 合 宿
  • 2. 講 義 内 容 ★ 正規表現とはパターンマッチングのための記法であ り,文字列検索の便利な道具として広く親しまれてい ます.この講義では,正規表現の基礎から始め, 「星の高さ」という性質に注目して正規表現の裏側に 潜む数理構造に迫っていきます. 表紙画像: http://www.superbwallpapers.com/nature/starry-night-sky-over-the-mountains-14678/
  • 3. ★ 正規表現好き ★ オートマトンもっと好き ★修士号は正規言語で取得 ★ 東工大博士一年次(数理計算) 新 屋 良 磨 q0 q1 q2 q3 q4q5 T I T E C H @sinya8282 東京工業大学大学院情報理工学研究科数理・計算科学専攻 修士論文 正規言語上の Abstract Numeration System の 文字列圧縮への応用 新屋 良磨 指導教員 佐々 政孝 2013 年 9 月 25 日
  • 4. グ ラ フ の パ ス とそ の 表 現 (●(●●|●)*●●|●)(●●|(●|●●) (●|●●)*●●)*((●●|●)(●●|●)*)|●(●●|●)*
  • 5. 皆 大 好 き グ ラ フ
  • 6. 皆 大 好 き グ ラ フ この形のグラフは 「ピーターセングラフ」 と呼ばれています.
  • 7. 良 く あ る 問 題 : 最 短 経 路 ★ A-C間の最短経路長は?
  • 8. 良 く あ る 問 題 : 最 短 経 路 ★ A-C間の最短経路長は? ★ 長さ2
  • 9. 良 く あ る 問 題 : 最 短 経 路 ★ A-C間の最短経路長は? ★ 長さ2 ●●
  • 10. 良 く あ る 問 題 : パ ス の 列 挙 問 題 ★ A-C間の長さ4のパスを列 挙せよ 本講義では「パス」は エッジ・頂点の重複を 含み得ます (歩道とも)
  • 11. 良 く あ る 問 題 : パ ス の 列 挙 問 題 ★ A-C間の長さ4のパスを列 挙せよ ●●●●,●●●●,●●●● ●●●●,●●●●,●●●● ●●●●,●●●●,●●●● 本講義では「パス」は エッジ・頂点の重複を 含み得ます (歩道とも)
  • 12. 良 く あ る 問 題 : パ ス の 数 え 上 げ ★ A-C間の長さ100のパスの 数は?
  • 13. 良 く あ る 問 題 : パ ス の 数 え 上 げ ★ A-C間の長さ100のパスの 数は? ★ 7886
  • 14. 良 く あ る 問 題 : パ ス の 数 え 上 げ ★ A-C間の長さ100のパスの 数は? ★ 7886 ちなみにパスの数え上げ ぐらいは隣接行列で素直 に計算できる.
  • 15. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フ
  • 16. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列
  • 17. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列 頂 点 数 × 頂 点 数 の 要 素 持 っ た デ ー タ 構 造
  • 18. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列 頂 点 数 × 頂 点 数 の 要 素 持 っ た デ ー タ 構 造 ( 1 , 1 ) 要 素 が 0 ノ ー ド 1 か ら ノ ー ド 1 へ の エッ ジ が な い ( ル ープ が 無 い )
  • 19. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列 頂 点 数 × 頂 点 数 の 要 素 持 っ た デ ー タ 構 造 対 角 成 分 が 全 て 0 グ ラ フ 全 体 に ル ープ が 無 い .
  • 20. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列 頂 点 数 × 頂 点 数 の 要 素 持 っ た デ ー タ 構 造 ( 1 , 3 ) 要 素 が 1 ノ ー ド 1 か ら ノ ー ド 3 へ の エッ ジ が あ る .
  • 21. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列 M= 頂 点 数 × 頂 点 数 の 要 素 持 っ た デ ー タ 構 造
  • 22. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列 M= 頂 点 数 × 頂 点 数 の 要 素 持 っ た デ ー タ 構 造 M = 10
  • 23. 隣 接 行 列 の N 乗 は 長 さ N の パ ス の 総 数 を 表 す. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列 M= 頂 点 数 × 頂 点 数 の 要 素 持 っ た デ ー タ 構 造 M = 10
  • 24. 隣 接 行 列 の N 乗 は 長 さ N の パ ス の 総 数 を 表 す. グ ラ フ と 隣 接 行 列 ( 小 さ い 例 で ) 3 1 2 4 5 グ ラ フそ の 隣 接 行 列 M= 頂 点 数 × 頂 点 数 の 要 素 持 っ た デ ー タ 構 造 M = 10 ( 1 , 3 ) 要 素 が 1 6 5 ノ ー ド 1 か ら ノ ー ド 3 へ の 長 さ 1 0 の パ ス が 1 6 5 個 あ る
  • 25. This document is licensed to nomosupremetornado@gmail.com. こ の 辺 は 蟻 本 読 め ば 良 いで し ょ う
  • 26. グ ラ フ と 隣 接 行 列 ( 線 形 代 数 ) の 理 論 体 型 「 G R A P H S P E C T R A T H E O RY 」 も お 薦 め
  • 27. 再 度 パ ス を 列 挙 して み よ う ★ A-C間の長さ100のパスを 列挙せよ
  • 28. 再 度 パ ス を 列 挙 して み よ う ★ A-C間の長さ100のパスを 列挙せよ ★ めんどくさい
  • 29. 任 意 の パ ス の 列 挙 を 考 える ★ A-C間の任意の長さのパス を列挙せよ
  • 30. 任 意 の パ ス の 列 挙 を 考 える ★ A-C間の任意の長さのパス を列挙せよ ! ! ! ? ? ? 無 限 に 存 在 す る の で す が … . .
  • 31. 無 限 の パ ス を ど う に か 表 現 し た い ★ 小さい有向グラフで考え てみる ★ A-A間の任意の長さの閉路 を列挙したい ★ 右のグラフでは●をいくら 通ってもA-A間の閉路 A
  • 32. 無 限 の パ ス を ど う に か 表 現 し た い ★ 小さい有向グラフで考え てみる ★ A-A間の任意の長さの閉路 を列挙したい ★ 右のグラフでは●をいくら 通ってもA-A間の閉路 A ε,●,●●,●●●,●●●● ●●●●●,●●●●●● ●●●●●●●, ……
  • 33. 無 限 の パ ス を ど う に か 表 現 し た い ★ 小さい有向グラフで考え てみる ★ A-A間の任意の長さの閉路 を列挙したい ★ 右のグラフでは●をいくら 通ってもA-A間の閉路 A ε,●,●●,●●●,●●●● ●●●●●,●●●●●● ●●●●●●●, …… εは「長さ0のパス」 を表す特別な記号.
  • 34. 無 限 の パ ス を ど う に か 表 現 し た い ★ 小さい有向グラフで考え てみる ★ A-A間の任意の長さの閉路 を列挙したい ★ 右のグラフでは●をいくら 通ってもA-A間の閉路 A ε,●,●●,●●●,●●●● ●●●●●,●●●●●● ●●●●●●●, …… 無 限 に 存 在 す る と は い え こ れぐ ら い   「 単 純 な 無 限 」 は 表 現 し た い .
  • 35. 無 限 の パ ス を ど う に か 表 現 し た い ★ 小さい有向グラフで考え てみる ★ A-A間の任意の長さの閉路 を列挙したい ★ 右のグラフでは●をいくら 通ってもA-A間の閉路 A ε,●,●●,●●●,●●●● ●●●●●,●●●●●● ●●●●●●●, …… 無 限 に 存 在 す る と は い え こ れぐ ら い   「 単 純 な 無 限 」 は 表 現 し た い . 「 ● が 任 意 回 」 続 く パ ス を       ● * と 表 現 して み よ う
  • 36. 無 限 の パ ス を ど う に か 表 現 し た い A B ★ 小さい有向グラフで考え てみる ★ A-A間の任意の長さの閉路 を列挙したい
  • 37. 無 限 の パ ス を ど う に か 表 現 し た い A B ★ 小さい有向グラフで考え てみる ★ A-A間の任意の長さの閉路 を列挙したい ε,●,●●,●●,●●●,●●● ●●●,●●●●,●●●●_ ●●●●,●●●●, ……
  • 38. 無 限 の パ ス を ど う に か 表 現 し た い A B ★ 小さい有向グラフで考え てみる ★ A-A間の任意の長さの閉路 を列挙したい ε,●,●●,●●,●●●,●●● ●●●,●●●●,●●●●_ ●●●●,●●●●, …… 「 「 ● ま た は ● ● 」 が 任 意 回 」 続 く パ ス を             ( ● | ● ● ) * ! と 表 現 して み よ う
  • 39. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ 実は,任意の有限グラフ の任意点間のパス集合が 「*」と「|」を使えば表現 できる !
  • 40. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ 実は,任意の有限グラフ の任意点間のパス集合が 「*」と「|」を使えば表現 できる ! A B C こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る
  • 41. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 1. まずは矢印の色を, 矢印の上に文字として表す A B C ● ● ●● ● ● こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る
  • 42. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 1. まずは矢印の色を, 矢印の上に文字として表す A B C ● ● ●● ● ● ★ Step 2. 特別なノードDと Eを追加し,表現したい パスの始点にDからεの 矢印を張る.さらに終点 からEにεの矢印を張 る. こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る
  • 43. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 1. まずは矢印の色を, 矢印の上に文字として表す A B C ● ● ●● ● ● ★ Step 2. 特別なノードDと Eを追加し,表現したい パスの始点にDからεの 矢印を張る.さらに終点 からEにεの矢印を張 る. こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る D ε
  • 44. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 1. まずは矢印の色を, 矢印の上に文字として表す A B C ● ● ●● ● ● ★ Step 2. 特別なノードDと Eを追加し,表現したい パスの始点にDからεの 矢印を張る.さらに終点 からEにεの矢印を張 る. こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る D ε E ε ε
  • 45. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る ε ε ε
  • 46. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る ε ε ε
  • 47. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る B か ら A を 通 って B に 戻 る パ ス ● ● を 「 B か ら B の ル ープ 」 と し て 扱 う ε ε ε
  • 48. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る B か ら A を 通 って B に 戻 る パ ス ● ● を 「 B か ら B の ル ープ 」 と し て 扱 う |●● こ こ に 追 加 . 元 々 ● に よる ル ープ が あ る の で, 「 ま た は 」 を 表 す 「 | 」 を 使 って 追 加 す る . ε ε ε
  • 49. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る B か ら A を 通 って C に 向 か う パ ス ● ● を 「 B か ら C へ の エッ ジ 」 と して 扱 う |●●ε ε ε
  • 50. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る B か ら A を 通 って C に 向 か う パ ス ● ● を 「 B か ら C へ の エッ ジ 」 と して 扱 う |●● こ こ に 「 B か ら C へ の ● ● の エッ ジ 」 と し て 追 加 ●● ε ε ε
  • 51. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る C に つ いて も 同 様 に , 「 A を 経 由 す る パ ス 」 を エッ ジ と し て 追 加 して い く . |●● ●● ε ε ε
  • 52. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る C に つ いて も 同 様 に , 「 A を 経 由 す る パ ス 」 を エッ ジ と し て 追 加 して い く . |●● ●● ε ε ε
  • 53. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る C に つ いて も 同 様 に , 「 A を 経 由 す る パ ス 」 を エッ ジ と し て 追 加 して い く . |●● ●● ●● ε ε ε
  • 54. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る C に つ いて も 同 様 に , 「 A を 経 由 す る パ ス 」 を エッ ジ と し て 追 加 して い く . |●● ●● ●● ε ε ε
  • 55. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る C に つ いて も 同 様 に , 「 A を 経 由 す る パ ス 」 を エッ ジ と し て 追 加 して い く . |●● ●● ●● |●● ε ε ε
  • 56. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る D に つ いて も 同 様 に , 「 A を 経 由 す る パ ス 」 を エッ ジ と し て 追 加 して い く . |●● ●● |●● ●● ε ε ε
  • 57. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る D に つ いて も 同 様 に , 「 A を 経 由 す る パ ス 」 を エッ ジ と し て 追 加 して い く . |●● ●● |●● ● ●● ε ε ε
  • 58. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. A B C ● ● ●● ● ● D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る D に つ いて も 同 様 に , 「 A を 経 由 す る パ ス 」 を エッ ジ と し て 追 加 して い く . |●● ●● |●● ● ● ●● ε ε ε
  • 59. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C ● ● ● ●A D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る A を 経 由 す る 全 ての パ ス を 「 A を 経 由 し な い エッ ジ 」 に 変 換 した.後は消すだけ. |●● ●● |●● ● ● ●● ε ε ε
  • 60. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C D E ま ず A を 消 す. も ち ろ ん , 単 に 消 す わ け じ ゃ な い . パ ス の 情 報 を 保 っ た ま ま 消 し て い く . こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る A を 経 由 す る 全 ての パ ス を 「 A を 経 由 し な い エッ ジ 」 に 変 換 した.後は消すだけ. |●● ●● |●● ● ● ●● ε ε ε
  • 61. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る |●● |●● ● ●● ● ●● ε ε
  • 62. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る |●● |●● ● ●● 続 いて B を 消 す. A の 時 と 同 様 に , 「 B を 経 由 す る パ ス 」 を 「 B を 経 由 し な い エッ ジ 」 に 変 換 . ● ●● ε ε
  • 63. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る |●● |●● ● ●● 続 いて B を 消 す. A の 時 と 同 様 に , 「 B を 経 由 す る パ ス 」 を 「 B を 経 由 し な い エッ ジ 」 に 変 換 . ● ●● 「 C か ら B を 経 由 し て C に 戻 る パ ス 」 を 「 C の ル ープ 」 に 置 き かえる . ε ε
  • 64. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る |●● |●● ● ●● 続 いて B を 消 す. A の 時 と 同 様 に , 「 B を 経 由 す る パ ス 」 を 「 B を 経 由 し な い エッ ジ 」 に 変 換 . ● ●● 「 C か ら B を 経 由 し て C に 戻 る パ ス 」 を 「 C の ル ープ 」 に 置 き かえる . し か し B は 「 ● | ● ● 」 の ル ープ を 持 って い る の で, こ れ を 「 ( ● | ● ● ) * 」 と して 表 す. ε ε
  • 65. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る |●● |●● ● ●● 続 いて B を 消 す. A の 時 と 同 様 に , 「 B を 経 由 す る パ ス 」 を 「 B を 経 由 し な い エッ ジ 」 に 変 換 . ● ●● 「 C か ら B を 経 由 し て C に 戻 る パ ス 」 を 「 C の ル ープ 」 に 置 き かえる . し か し B は 「 ● | ● ● 」 の ル ープ を 持 って い る の で, こ れ を 「 ( ● | ● ● ) * 」 と して 表 す. 「 C → B → … → B → C の パ ス 」 を こ こ に 追 加 . |(●|●●)(●|●●)*●● ε ε
  • 66. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る |●● |●● ● ●● 続 いて B を 消 す. A の 時 と 同 様 に , 「 B を 経 由 す る パ ス 」 を 「 B を 経 由 し な い エッ ジ 」 に 変 換 . ● ●● |(●|●●)(●|●●)*●● ε ε
  • 67. ● ● 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. B C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る |●● |●● ● ●● 続 いて B を 消 す. A の 時 と 同 様 に , 「 B を 経 由 す る パ ス 」 を 「 B を 経 由 し な い エッ ジ 」 に 変 換 . ● ●● |(●|●●)(●|●●)*●● 同 様 に 「 B を 経 由 す る パ ス 」 を 置 き 換 え て い く ( ち ゃ ん と ル ー プ は * で 表 す ) . ε ε
  • 68. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る ●(●●|●)* ●●|(●|●●)(●|●●)*●● (●●|●)(●●|●)*|ε ●(●●|●)*●●|●
  • 69. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. C D E グ ラ フ を 見 や す く 変 形 こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る ●(●●|●)* ●●|(●|●●)(●|●●)*●● (●●|●)(●●|●)*|ε ●(●●|●)*●●|● 最 後 に , C を 消 すと D か ら E へ の 一 本 の エッ ジ だ け が 残 る
  • 70. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. D E こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る (●(●●|●)*●●|●)(●●|(●|●●)(●|●●)*●●)*((●●|●)(●●|●)*|ε)|●(●●|●)* 最 後 に , C を 消 すと D か ら E へ の 一 本 の エッ ジ だ け が 残 る
  • 71. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. D E こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る (●(●●|●)*●●|●)(●●|(●|●●)(●|●●)*●●)*((●●|●)(●●|●)*|ε)|●(●●|●)* 最 後 に , C を 消 すと D か ら E へ の 一 本 の エッ ジ だ け が 残 る こ れ こそ が 求 め る 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 し た も の.
  • 72. 「 * 」 と 「 | 」 で 無 限 の パ ス を 表 現 ★ Step 3. 「*」と「|」でパス を表しながら追加したD,E 以外の状態を消していく. D E こ の グ ラ フ の 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 して み る (●(●●|●)*●●|●)(●●|(●|●●)(●|●●)*●●)*((●●|●)(●●|●)*|ε)|●(●●|●)* 最 後 に , C を 消 すと D か ら E へ の 一 本 の エッ ジ だ け が 残 る こ れ こそ が 求 め る 「 A - B 間 」 と 「 A - C 間 」 の パ ス を 表 現 し た も の. このように,状態を消去 していってパスのパターン を構成する方法を State elimination method (状態消去法) と呼ぶ[3].
  • 73. 「 * 」 と 「 | 」 を 使 っ た 表 現 : 正 規 表 現 ★ 正規表現とは「パスのパターンの表現式」 ! ★ 任意の(有限)グラフのパスは正規表現で表現できる ★ 正規表現は「無限のパス」を記述することができる ★ 現代では,正規表現は「文字列のパターン」を表現す る用途で重宝されている → 正規表現マッチング
  • 74. プ ロ グ ラ マ の た め の 正 規 表 現 ★ プログラミングやShellコマンドでよく使われる ★ 文字列の validation や検索に ★ 「|」「*」以外に色々な記法・機能が導入されている ★ 「.」(ドット)は任意の一文字を表す ★ 「 (a|b|c|d|e) 」は「 [abcde] 」や「 [a-e] 」と書ける ★ 「d」で「数字1文字」(0|1|2|3|4|5|6|7|8|9) とか. ★ 「+」で1回以上の繰り返しを表す ★ 「*」は任意回(0回以上)の繰り返し ★ 「{n}」でn回の繰り返し ★ 他にもいっぱい...(覚える必要は無い)
  • 75. 実 用 的 ( ? ) な 正 規 表 現 の 例 1 ★ IP電話番号を表す正規表現 http://blog.livedoor.jp/nipotan/archives/51644244.html ★ (理解する必要はありません!!!) 050-(8(8(10|0d|6[4-8]|8[0-6])|0([0-2]d|3[0-8])| 2(0d|1[0-2])|6(86|0[01]))|7(6([01]d|2[0-5])|7(88| 7[0-5])|1(0d|1[0-3])|30[0-3]|00[01]|5dd)| 3(8([01]d|2[0-5])|2([0-4]d|5[01])|[013-7]dd| 90[01])|5(([02]0|5[0-6])d|8([0-3]d|4[0-2])|79[89])| 2(0([0-2]d|3[0-6])|20[01]|403|525)|6(6(19|2[0-2])| 86[0-8]|[01]00)|1(8(0d|1[0-2])|[0-7]dd)|90(0d| 1[0-5]))d{4}
  • 76. 実 用 的 ( ? ) な 正 規 表 現 の 例 2 ★ URIを表す正規表現 http://swatmac.info/?p=1064 ★ (理解する必要はありません!!!!!!) [a-z][x2bx2dx2e0-9a-z]*:(//(([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,:;=])*@)?(x5b(([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f] {1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d| 1d{2}|2[0-4]d|25[0-5]))|::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}| 2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|([0-9a-f]{1,4})?::([0-9a-f]{1,4}:){4} ([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d| 25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d| 1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d| 25[0-5]))|(([0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d| [1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,3} [0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]) x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:[0-9a- f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d| [1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::|v[0-9a-f]+x2e[! x24&-x2e0-;=_a-z~]+)x5d|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}| 2[0-4]d|25[0-5])x2e(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])|([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,;=])*)(:d*)?(/([x2dx2e0-9_a- z~]|%[0-9a-f][0-9a-f]|[!x24&-,:;=@])*)*|/(([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,:;=@])+(/([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a- f]|[!x24&-,:;=@])*)*)?|([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,:;=@])+(/([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[! x24&-,:;=@])*)*)?(x3f([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[!x24&-,/:;=x3f@])*)?(x23([x2dx2e0-9_a-z~]|%[0-9a-f][0-9a-f]|[! x24&-,/:;=x3f@])*)?
  • 77. 正 規 表 現 の 歴 史 – S T E P H E N C O L E K L E E N E ( 1 9 0 9 - 1 9 9 4 )
  • 78. 脳 の 計 算 モ デル : 形 式 的 ニュ ー ロ ン BULLETIN OF MATHEMATICAL BIOPHYSICS VOLUME5, 1943 A LOGICAL CALCULUS OF THE IDEAS IMMANENT IN NERVOUS ACTIVITY WARREN S. MCCULLOCH AND WALTER PITTS FROM THE UNIVERSITY OF ILLINOIS, COLLEGEOF MEDICINI~, DEPARTMENT OF PSYCHIATRY AT THE ILLINOIS NEUROPSYCHIATRICINSTITUTE, AND THE UNIVERSITY OF CHICAGO Because of the "all-or-none" character of nervous activity, neural events and the relations among them can be treated by means of propo- sitional logic. It is found that the behavior of every net can be described in these terms, with the addition of more complicated logical means for nets containing circles; and that for any logical expression satisfying certain conditions, one can find a net behaving in the fashion it describes. It is shown that many particular choices among possible neurophysiologi- cal assumptions are equivalent, in the sense that for every net behav- ing under one assumption, there exists another net which behaves un- der the other and gives the same results, although perhaps not in the same time. Various applications of the calculus are discussed. I. Introduction Theoretical neurophysiology rests on certain cardinal assump- tions. The nervous system is a net of neurons, each having a soma and an axon. Their adjunctions, or synapses, are always between the axon of one neuron and the soma of another. At any instant a neuron has some threshold, which excitation must exceed to initiate an im- pulse. This, except for the fact and the time of its occurrence, is de- termined by the neuron, not by the excitation. From the point of ex- citation the impulse is propagated to all parts of the neuron. The velocity along the axon varies directly with its diameter, from less than one meter per second in thin axons, which are usually short, to more than 150 meters per second in thick axons, which are usually long. The time for axonal conduction is consequently of little impor- tance in determining the time of arrival of impulses at points un- equally remote from the same source. Excitation across synapses oc- curs predominantly from axonal terminations to somata. It is still a moot point whether this depends upon irreciprocity of individual syn- apses or merely upon prevalent anatomical configurations. To sup- pose the latter requires no hypothesis ad hoc and explains known ex- ceptions, but any assumption as to cause is compatible with the cal- culus to come. No case is known in which excitation through a single synapse has elicited a nervous impulse in any neuron, whereas any 115 ★ 1943年,McCulloch と Pitts によって脳の 計算モデル「形式的 ニューロン」が提案 された [4].
  • 79. 脳 の 計 算 モ デル : 形 式 的 ニュ ー ロ ン ★ 1943年,McCulloch と Pitts によって脳の 計算モデル「形式的 ニューロン」が提案 された [4]. ★ 形式的ニューロンは エッジに「重みw」, ノードに「閾値θ」 を備えた単純なグラ フ的モデルである. 脳の神経細胞(ニューロン)と形式的ニューロン 画像は [5] p.16, p.18 より引用
  • 80. 正 規 表 現 の 誕 生 ★ 1951年にKleeneが  形式的ニューロンの 計算可能なクラスを 「正規表現」「オー トマトン」の2つの道 具で形式化 [6]. ★ 「形式的ニューロンで計算可」 「正規表現で表現可」   「オートマトンで計算可」
  • 81. 正 規 表 現 の 誕 生 ★ 「正規表現 (regular expression)」の命名 は1951年のKleeneの 論文から. ★ つまり正規表現の生 みの親は Kleene 大先 生. ★ 正規表現の書き換え 規則(公理)の考察 も行ってる. 論文 [3] の1ページを引用
  • 82. オ ー トマ トン の 発 展 ★ オートマトンとは? → 文字列を認識する 有限グラフモデル. ★ 初期状態から入力に 従って状態を遷移, 最終的に受理状態に 到達すれば入力を  「受理」,到達しな ければ「非受理」. 0 a 1 b a 2 b b a
  • 83. オ ー トマ トン の 発 展 ★ オートマトンとは? → 文字列を認識する 有限グラフモデル. ★ 初期状態から入力に 従って状態を遷移, 最終的に受理状態に 到達すれば入力を  「受理」,到達しな ければ「非受理」. 0 a 1 b a 2 b b a 「a,bからなる文字列で, bの出現回数が3の倍数」 となる文字列を受理する オートマトン.0が初期状 態かつ受理状態.
  • 84. オ ー トマ トン の 発 展 ★ オートマトンとは? → 文字列を認識する 有限グラフモデル. ★ 初期状態から入力に 従って状態を遷移, 最終的に受理状態に 到達すれば入力を  「受理」,到達しな ければ「非受理」. 0 a 1 b a 2 b b a 「a,bからなる文字列で, bの出現回数が3の倍数」 となる文字列を受理する オートマトン.0が初期状 態かつ受理状態. 正規表現で書くと a*(ba*ba*ba*)*
  • 85. オ ー トマ トン の 発 展 ★ オートマトンには非 決定性・決定性とい う性質がある. ★ 初期状態が1つで,か つ各状態が「1文字に 対して遷移先がたか だか1つ」という条件 をみたす場合決定性 (DFA),そうでない場 合は非決定性(NFA). 0 b 1 a 2 a 3 b a b b a 0 a b 1 a 2 a b 「a,bからなる文字列で後ろから 2番目の文字がa」となる文字列 を受理す2つのオートマトン. 上はNFAで下はDFA!
  • 86. オ ー トマ トン の 発 展 ★ 1959年,RabinとScott が「任意のオートマト ンは決定性のオートマ トンに変換できる」こ とを示した(部分集合 構成法)[7]. ★ この業績で二人は計算 機科学者にとって最高 の栄誉であるチューリ ング章を受賞. 0 a b 1 a 2 a b 部分集合構成による決定化 0 b 0 1 a 0 1 2 a 0 2 b a b b a
  • 87. プ ロ グ ラ マ の た め の 道 具 へ ★ 1968年,Ken Thompson (UNIXとかC言語作った マジモンのハッカー)が 「正規表現からNFAへの 変換(Thompsonの構成 法)」及び「NFAの実装手 法」に関する最初の論文 を発表 [8]. ★ Thompson のこの成果は 世界初の「ソフトウェア の特許」に(1971年). R. M. McCLUR£, Editor RegularExpressionSearch Algorithm I~EN THOMPSON Bell Telephone Laboratories, Inc., Murray Hill, New Jersey A method for locating specific character strings embedded in character text is described and an implementation of this method in the form of a compiler is discussed. The compiler accepts a regular expression as source language and pro- duces an IBM 7094 program as object language. The object program then accepts the text to be searched as input and produces a signal every time an embedded string in the text matches the given regular expression. Examples, problems, and solutions are also presented. KEY WORDS AND PHRASES: search,match, regular expression CR CATEGORIES: 3.74, 4.49, 5.32 The Algorithm Previous search algorithms involve backtracking when a partially successful search path fails. This necessitates a lot of storage and bookkeeping, and executes slowly. In the regular expression recognition technique described in this paper, each character in the text to be searched is examined in sequence against a list of all possible current characters. During this examination a new list of all possible next characters is built. When the end of the current list is reached, the new list becomes the current list, the next character is obtained, and the process con- tinues. In the terms of Brzozowski [1], this algorithm con- tinually takes the left derivative of the given regular ex- pression with respect to the text to be searched. The parallel nature of this algorithm makes it extremely fast. The Implementation The specific implementation of this algorithm is a com- piler that translates a regular expression into IBM 7094 code. The compiled code, along with certain runtime routines, accepts the text to be searched as input and finds all substrings in the text that match the regular expression. The compiling phase of the implemention does not detract from the overall speed since any search routine must translate the input regular expression into some sort of machine accessible form. In the compiled code, the lists mentioned in the algo- rithm are not characters, but transfer instructions into the compiled code. The execution is extremely fast since a transfer to the top of the current list automatically searches for all possible sequel characters in the regular expression. This compile-search algorithm is incorporated as the context search in a time-sharing text editor. This is by no means the only use of such a search routine. For example, a variant of this algorithm is used as the symbol table search in an assembler. It is assumed that the reader is familiar with regular expressions [2] and the machine language of the IBM 7094 computer [3]. The Compiler The compiler consists of three concurrently running stages. The first stage is a syntax sieve that allows only syntactically correct regular expressions to pass. This stage also inserts the operator "." for juxtaposition of regular expressions. The second stage converts the regular expression to reverse Polish form. The third stage is the object code producer. The first two stages are straight- forward and are not discussed. The third stage expects a syntactically correct, reverse Polish regular expression. The regular expression a(b I c),d will be carried through as an example. This expression is translated into abc I * " d • by the first two stages. A functional description of the third stage of the compiler follows: The heart of the third stage is a pushdown stack. Each entry in the pushdown stack is a pointer to the compiled code of an operand. When a binary operator ("1" or ". ") is compiled, the top (most recent) two entries on the stack are combined and a resultant pointer for the operation re- places the two stack entries. The result of the binary operator is then available as an operand in another opera- tion. Similarly, a unary operator ("*") operates on the top entry of the stack and creates an operand to replace that entry. When the entire regular expression is compiled, there is just one entry in the stack, and that is a pointer to the code for the regular expression. The compiled code invokes one of two functional rou- tines. The first is called NNODE. NNODE matches a single character and will be represented by an oval con- taining the character that is recognized. The second func- tional routine is called CNODE. CNODE will split the Volume 11 / Number 6 / June, 1968 Communications of the ACM 419
  • 88. プ ロ グ ラ マ の た め の 道 具 へ ★ 1973年,Thompson が正 規表現による文字列検索 ツール grep をUNIXのた めに開発. ★ 以降,Perl 等のプログラ ミング言語にも正規表現 は搭載され,今日では正 規表現はほとんどのプロ グラミング言語に搭載. 多くのプログラマに愛さ れる存在に. Regular Expressions Powerful Techniques for Perl and Other Tools Jeffrey E. F. Friedl Mastering
  • 89. 正 規 表 現 の 理 論 と 現 在 ★ 正規表現は,実用にも便利 だけど,理論的にもとても 奥深い研究対象.対応する 計算モデルや代数モデル, 論理モデルが多数存在. ★ 「普遍的な構造は多様な_  _ 特徴付けを持つ」 ★ 純粋理論的な研究もまだま だ行われている. 正規言語 (文字列の集合) {ε, a, aa, bb, aaa, abb, bab, bbb, ...} 0 a 1 b b a 有限オートマトン (計算モデル) 有限モノイド (代数モデル) 単項二階述語論理 (論理式) 正規文法 (生成文法) 正規表現 (表現式) a*(ba*ba*)* Profinite words 上の開閉集合 (トポロジー)
  • 90. 正 規 表 現 の 理 論 と 現 在 ★ 正規表現は,実用にも便利 だけど,理論的にもとても 奥深い研究対象.対応する 計算モデルや代数モデル, 論理モデルが多数存在. ★ 「普遍的な構造は多様な_  _ 特徴付けを持つ」 ★ 純粋理論的な研究もまだま だ行われている. 正規言語 (文字列の集合) {ε, a, aa, bb, aaa, abb, bab, bbb, ...} 0 a 1 b b a 有限オートマトン (計算モデル) 有限モノイド (代数モデル) 単項二階述語論理 (論理式) 正規文法 (生成文法) 正規表現 (表現式) a*(ba*ba*)* Profinite words 上の開閉集合 (トポロジー) ★ その一つが「星の高さ」
  • 91. 正 規 表 現 と 星 の 高 さ – V I N C E N T VA N G O G H ( 1 8 8 8 ) “Starry Night over the Rhone.”
  • 92. 正 規 表 現 に お ける 星 ★ 繰り返しを表す演算子「*」は ★ 「Kleeneスター」とか「Kleene閉包」とか ★ 「スター演算子」とか呼ばれている ! ★ 正規表現における「星の高さ」とは,直感的にはこの スター演算子のネストの深さのこと.
  • 93. 星 の 高 さ S TA R H E I G H T ★ 正規表現に対する「星の高さ」を表す関数 h は次のよ うに再帰的に定義される ★ 任意のアルファベットσに対して h(σ) = 0 ★ 正規表現 r, s に対して ★ h(rs) = h(r|s) = max(h(r), h(s)) ★ h(r*) = h(r) + 1
  • 94. 星 の 高 さ S TA R H E I G H T ★ 正規表現に対する「星の高さ」を表す関数 h は次のよ うに再帰的に定義される ★ 任意のアルファベットσに対して h(σ) = 0 ★ 正規表現 r, s に対して ★ h(rs) = h(r|s) = max(h(r), h(s)) ★ h(r*) = h(r) + 1 ★ つまりは,一番ネストしてる *の深さのこと
  • 95. 星 の 高 さ の 例 ★ (a|bc)d = 星の高さ0 , a* = 星の高さ1 ! ★ a*(ba*ba*)* = 星の高さ 2 ! ★ ((a*)*)* = 星の高さ 3
  • 96. 同 じ だ け ど 見 た 目 は 異 な る 正 規 表 現 ★ a* と (a*)* は明らかに同じ正規表現 (なぜ?) ! ★ a*(ba*ba*)* と (a*|a*b(a|ba*b)*ba*) も同じ正規表現 ! ★ 同じ正規表現でも星の高さが異なる場合がある
  • 97. 正 規 ” 言 語 ” に お ける 星 の 高 さ ★ 正規表現で表現できる文字列の集合を正規言語と呼ぶ ★ 「正規言語 L の星の高さ」を「Lを表現する正規表現 _の星の高さの中で最小のもの」として定義 ★ h(L) = min{ h(r) | r は L を表現する正規表現 }
  • 98. 正 規 ” 言 語 ” に お ける 星 の 高 さ ★ 正規表現で表現できる文字列の集合を正規言語と呼ぶ ★ 「正規言語 L の星の高さ」を「Lを表現する正規表現 _の星の高さの中で最小のもの」として定義 ★ h(L) = min{ h(r) | r は L を表現する正規表現 } ★ 与えられた正規言語 L の星の高さを決定する問題を 「星の高さ問題 (star-hight problem)」と呼ぶ. ★ 1963年に Eggan が提唱[9]
  • 99. 星 の 高 さ を 計 れ る か? ★ 与えられた正規言語 L に対して,星の高さを決定する アルゴリズムは存在するか?
  • 100. 星 の 高 さ を 計 れ る か? ★ 与えられた正規言語 L に対して,星の高さを決定する アルゴリズムは存在するか? ★ 存在する! 1988年に Hashiguchi が肯定的に解決 [10]
  • 101. 星 の 高 さ を 計 れ る か? ★ 与えられた正規言語 L に対して,星の高さを決定する アルゴリズムは存在するか? ★ 存在する! 1988年に Hashiguchi が肯定的に解決 [10] ★ もの凄く一般的な命題の証明
  • 102. 星 の 高 さ を 計 れ る か? ★ 与えられた正規言語 L に対して,星の高さを決定する アルゴリズムは存在するか? ★ 存在する! 1988年に Hashiguchi が肯定的に解決 [10] ★ 証明がめちゃくちゃ難しい… ★ もの凄く一般的な命題の証明
  • 103. 星 の 高 さ を 計 れ る か? ★ 与えられた正規言語 L に対して,星の高さを決定する アルゴリズムは存在するか? ★ 存在する! 1988年に Hashiguchi が肯定的に解決 [10] ★ 証明がめちゃくちゃ難しい… ★ 計算量がやばい ★ もの凄く一般的な命題の証明
  • 104. 「 星 の 高 さ 問 題 」 の 証 明 は 難 し い “Indeed, the existing proof, putting all pieces together, takes more than a hundred pages of very heavy combinatorial reasoning.” I. Simon, MFCS’88 Proceedings, 1988 ! “The proof is very difficult to understand and a lot remains to be done to make it a tutorial presentation.” D. Perrin, Finite Automata, Handbook of Theor. Comp. Sc., 1990 ! “Hashiguchi’s solution for arbitrary star height relies on a complicated induction, which makes the proof very difficult to follow.” J.-E. Pin, Tropical Semirings, Idempotency, 1998
  • 105. 「 星 の 高 さ 問 題 」 は 難 し い ★ 同じ言語を表現する正規表現は無限にある. ★ そのため,列挙して調べることは無理(停止しない) ! ★ 正規表現の性質の良い最小形は知られていない.
  • 106. E G G A N の 定 理 ★ h(L)は,Lを認識するNFAの最小サイクルランクに等しい ★ Egganの1963年の論文の結果 [9] ★ 厳密には「ε-NFAの最小サイクルランク」について Egganは定理を示し,1972年にRina [11]が「NFAの最 小サイクルランク」というより強い結果に拡張した.
  • 107. 有 向 グ ラ フ の サイクル ラ ン ク ★ 有向グラフ G = (V, E) に対する サイクルランクr(G)は以 下のように再帰的に定義される ★ Gがループを含まない場合 ★ r(G) = 0 ★ Gが強連結の場合: ★ r(G) = 1 + min { r(G - v) | v は Gのノード} ★ Gが強連結でない場合 ★ r(G) = max( r(G’) | G’は Gの部分グラフ ) ★ (Gの部分グラフの中で最大のサイクルランク)
  • 108. 有 向 グ ラ フ の サイクル ラ ン ク ★ 有向グラフ G = (V, E) に対する サイクルランクr(G)は以 下のように再帰的に定義される ★ Gがループを含まない場合 ★ r(G) = 0 ★ Gが強連結の場合: ★ r(G) = 1 + min { r(G - v) | v は Gのノード} ★ Gが強連結でない場合 ★ r(G) = max( r(G’) | G’は Gの部分グラフ ) ★ (Gの部分グラフの中で最大のサイクルランク) ★ 直感的には「サイクルの消しにくさ」と捉えれる
  • 109. サイクル ラ ン ク の 例 Examples 6.2 (i) Graphs with loop complexity 1: (ii) Graphs with loop complexity 2: (iii) Graphs with loop complexity 3: ★サ イクル ラ ン ク 1 の グ ラ フ
  • 110. サイクル ラ ン ク の 例 Examples 6.2 (i) Graphs with loop complexity 1: (ii) Graphs with loop complexity 2: (iii) Graphs with loop complexity 3: ★サ イクル ラ ン ク 1 の グ ラ フ Examples 6.2 (i) Graphs with loop complexity 1: (ii) Graphs with loop complexity 2: (iii) Graphs with loop complexity 3: ★サ イクル ラ ン ク 2 の グ ラ フ
  • 111. サイクル ラ ン ク の 例 Examples 6.2 (i) Graphs with loop complexity 1: (ii) Graphs with loop complexity 2: (iii) Graphs with loop complexity 3: ★サ イクル ラ ン ク 1 の グ ラ フ Examples 6.2 (i) Graphs with loop complexity 1: (ii) Graphs with loop complexity 2: (iii) Graphs with loop complexity 3: ★サ イクル ラ ン ク 2 の グ ラ フ amples 6.2 Graphs with loop complexity 1: Graphs with loop complexity 2: ) Graphs with loop complexity 3:★サ イクル ラ ン ク 3 の グ ラ フ
  • 112. 最 小 サイクル ラ ン ク = 星 の 高 さ ★ 証明はそんなに難しくない.が,細かく議論すると大変 ! ★ 証明方針 ★ 任意の正規表現 r にたいして,h(r)以下のサイクルラ ン ク を 持 つ 等 価 な N FA を 構 成 で き る 事 を 示 す  ( State elimination 法 ) ★ 任意のNFA Nに対して,r(N)以下の星の高さを持つ等 価な正規表現が構成できることを示す ( Thompson の構成法)
  • 113. E G G A N の も う 一 つ の 定 理 ★ 星の高さは無限の階層をなす ★ つまり任意の自然数 n について,h(L) ≧ n となる正規 言語 L が存在する! ★ Egganが1963年に証明. ★ Sakarovitch が 2007年により強い形で再証明 [1].
  • 114. E G G A N の も う 一 つ の 定 理 ★ 星の高さは無限の階層をなす ★ つまり任意の自然数 n について,h(L) ≧ n となる正規 言語 L が存在する! ★ Egganが1963年に証明. ★ Sakarovitch が 2007年により強い形で再証明 [1]. q ★ 「a,bからなる文字列で,aの個数とbの個数が2 による _において等しい」全ての文字列からなる言語 L の星の 高さがちょうど q となる (Sakarovitch, [1]).
  • 115. 星 の 高 さ は 潰 れ な い Figure 6.7: The The proof that Wq is of heigh w be the sequence of q word 右のオートマトンで受理される言語は 「2^3の剰余でaとbの個数が一致する」 ような文字列.つまりこのオートマトン が受理する言語の星の高さは3.この オートマトンのサイクルランクも3.
  • 116. 星 の 高 さ は 潰 れ な い q ★ 「a,bからなる文字列で,aの個数とbの個数が2 による _剰余において等しい」全ての文字列からなる言語 L の 星の高さがちょうど q となる (Sakarovitch, [1]). Figure 6.7: The The proof that Wq is of heigh w be the sequence of q word 右のオートマトンで受理される言語は 「2^3の剰余でaとbの個数が一致する」 ような文字列.つまりこのオートマトン が受理する言語の星の高さは3.この オートマトンのサイクルランクも3.
  • 117. 星 の 高 さ は 潰 れ な い ★ サイクルランクが高いオートマトンから言語を階層的に 構成して,あとは正規表現の方向から頑張って証明す る(証明は難しい). Figure 6.7: The The proof that Wq is of heigh w be the sequence of q word 右のオートマトンで受理される言語は 「2^3の剰余でaとbの個数が一致する」 ような文字列.つまりこのオートマトン が受理する言語の星の高さは3.この オートマトンのサイクルランクも3.
  • 118. 正 規 表 現 の 否 定
  • 119. 正 規 言 語 の 良 い 性 質 ★ 対応する表現・計算モデ ルが多い ★ 多くの演算に閉じている ★ 正規言語は否定(補集合) が取れる. 正規言語 (文字列の集合) {ε, a, aa, bb, aaa, abb, bab, bbb, ...} 0 a 1 b b a 有限オートマトン (計算モデル) 有限モノイド (代数モデル) 単項二階述語論理 (論理式) 正規文法 (生成文法) 正規表現 (表現式) a*(ba*ba*)* Profinite words 上の開閉集合 (トポロジー)
  • 120. 正 規 言 語 の 良 い 性 質 ★ 対応する表現・計算モデ ルが多い ★ 多くの演算に閉じている ★ 正規言語は否定(補集合) が取れる. 正規言語 (文字列の集合) {ε, a, aa, bb, aaa, abb, bab, bbb, ...} 0 a 1 b b a 有限オートマトン (計算モデル) 有限モノイド (代数モデル) 単項二階述語論理 (論理式) 正規文法 (生成文法) 正規表現 (表現式) a*(ba*ba*)* Profinite words 上の開閉集合 (トポロジー) ★ かっこ良く言うと    「正規言語はブール代数 _で閉じてる」
  • 121. 正 規 言 語 の 良 い 性 質 ★ 対応する表現・計算モデ ルが多い ★ 多くの演算に閉じている ★ 正規言語は否定(補集合) が取れる. 正規言語 (文字列の集合) {ε, a, aa, bb, aaa, abb, bab, bbb, ...} 0 a 1 b b a 有限オートマトン (計算モデル) 有限モノイド (代数モデル) 単項二階述語論理 (論理式) 正規文法 (生成文法) 正規表現 (表現式) a*(ba*ba*)* Profinite words 上の開閉集合 (トポロジー) ★ かっこ良く言うと    「正規言語はブール代数 _で閉じてる」 正規言語が否定に閉じて いることを正規表現を使っ て示すのは,難しい.
  • 122. 正 規 言 語 の 良 い 性 質 ★ 対応する表現・計算モデ ルが多い ★ 多くの演算に閉じている ★ 正規言語は否定(補集合) が取れる. 正規言語 (文字列の集合) {ε, a, aa, bb, aaa, abb, bab, bbb, ...} 0 a 1 b b a 有限オートマトン (計算モデル) 有限モノイド (代数モデル) 単項二階述語論理 (論理式) 正規文法 (生成文法) 正規表現 (表現式) a*(ba*ba*)* Profinite words 上の開閉集合 (トポロジー) ★ かっこ良く言うと    「正規言語はブール代数 _で閉じてる」 正規言語が否定に閉じて いることを正規表現を使っ て示すのは,難しい. でも有限オートマトンや モノイド等を使うと証明 は楽勝(一発)!!色んな 特徴付けがある利点.
  • 123. 正 規 言 語 の 否 定 ( 正 規 表 現 で 考 える ) ★ 正規言語 L の否定 Lとは「Lに属さない文字列の集合」 ★ つまりは L の補集合 ! ★ a*(ba*ba*)* は「bが偶数回現れるa,b上の文字列」 ★ 問題:ではその否定は?
  • 124. 正 規 言 語 の 否 定 ( 正 規 表 現 で 考 える ) ★ 正規言語 L の否定 Lとは「Lに属さない文字列の集合」 ★ つまりは L の補集合 ! ★ a*(ba*ba*)* は「bが偶数回現れるa,b上の文字列」 ★ 問題:ではその否定は? ★ 当然「bが奇数回現れるa,b上の文字列」
  • 125. 正 規 言 語 の 否 定 ( 正 規 表 現 で 考 える ) ★ 正規言語 L の否定 Lとは「Lに属さない文字列の集合」 ★ つまりは L の補集合 ! ★ a*(ba*ba*)* は「bが偶数回現れるa,b上の文字列」 ★ 問題:ではその否定は? ★ 当然「bが奇数回現れるa,b上の文字列」 ★ 正規表現で書くと a*ba*(ba*ba*)*
  • 126. 正 規 言 語 の 否 定 ( 正 規 表 現 で 考 える ) ★ 正規言語 L の否定 Lとは「Lに属さない文字列の集合」 ★ つまりは L の補集合 ! ★ a*(ba*ba*)* は「bが偶数回現れるa,b上の文字列」 ★ 問題:ではその否定は? ★ 当然「bが奇数回現れるa,b上の文字列」 ★ 正規表現で書くと a*ba*(ba*ba*)* ★ 正規表現を「否定の正規表現」に変形するのはとても 難しい
  • 127. 正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える ) ★ 「0から0へのパスの集合」の補集合は? 0 a 1 b b a
  • 128. 正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える ) ★ 「0から0へのパスの集合」の補集合は? ★ 「0から1へのパスの集合」にほかならない! 0 a 1 b b a
  • 129. 正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える ) ★ 「0から0へのパスの集合」の補集合は? ★ 「0から1へのパスの集合」にほかならない! ★ パスの終点(受理状態)の補集合を取れば良いだけ! 0 a 1 b b a
  • 130. 正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える ) ★ 「0から0へのパスの集合」の補集合は? ★ 「0から1へのパスの集合」にほかならない! ★ パスの終点(受理状態)の補集合を取れば良いだけ! 0 a 1 b b a 0 a 1 b b a 否定
  • 131. 正 規 言 語 の 否 定 ( オ ー トマ トン で 考 える ) ★ 「0から0へのパスの集合」の補集合は? ★ 「0から1へのパスの集合」にほかならない! ★ パスの終点(受理状態)の補集合を取れば良いだけ! 0 a 1 b b a 0 a 1 b b a 否定 注意:この方法で否定を取れるのはDFA.NFAは一般的にダメ(なぜ?)
  • 132. 正 規 表 現 か ら 否 定 の 正 規 表 現 を 作 る ★ Step 1. 正規表現からNFAを作る (Thompson 構成法) ★ Step 1.5 ε遷移を除去する ★ Step 2. NFAからDFAを作る (部分集合構成法) ★ Step 3. DFA の否定を取る (受理状態を入れ替える) ★ Step 4. 否定のDFAから正規表現を構成 (State elimination)
  • 133. 正 規 表 現 か ら 否 定 の 正 規 表 現 を 作 る ★ Step 1. 正規表現からNFAを作る (Thompson 構成法) ★ Step 1.5 ε遷移を除去する ★ Step 2. NFAからDFAを作る (部分集合構成法) ★ Step 3. DFA の否定を取る (受理状態を入れ替える) ★ Step 4. 否定のDFAから正規表現を構成 (State elimination) 以上!
  • 134. 一 般 化 星 の 高 さ 問 題 – R U F I N O TA M AY O ( 1 9 5 0 ) “Man Before the Infinite.”
  • 135. 一 般 化 星 の 高 さ G E N E R A L I Z E D S TA R H E I G H T ★ 正規表現に否定演算「!」を入れたときの星の高さ ★ 「*」「!」「|」が使える正規表現を拡張正規表現と呼ぶ ★ 正規表現の一般化星の高さgh(r)は以下の定義 ★ 任意のアルファベットσに対して gh(σ) = 0 ★ 正規表現 r, s に対して ★ gh(rs) = gh(r|s) = max(gh(r), gh(s)) ★ gh(r*) = gh(r) + 1 ★ gh(!r) = gh(r)
  • 136. 一 般 化 星 の 高 さ G E N E R A L I Z E D S TA R H E I G H T ★ 正規表現に否定演算「!」を入れたときの星の高さ ★ 「*」「!」「|」が使える正規表現を拡張正規表現と呼ぶ ★ 正規表現の一般化星の高さgh(r)は以下の定義 ★ 任意のアルファベットσに対して gh(σ) = 0 ★ 正規表現 r, s に対して ★ gh(rs) = gh(r|s) = max(gh(r), gh(s)) ★ gh(r*) = gh(r) + 1 ★ gh(!r) = gh(r) ← New!
  • 137. 一 般 化 星 の 高 さ 問 題 ★ 与えられた正規言語 L において,その一般化星の高さ を計算するアルゴリズムは存在するか?
  • 138. 一 般 化 星 の 高 さ の 階 層 ★ 一般化星の高さは無限階層をなすか? ★ つまり任意の自然数 n について,あるLが存在して gh(L) ≧ n となるか?
  • 139. 一 般 化 星 の 高 さ 問 題 とそ の 階 層 問 題 は … . ★ 半世紀未解決 (1960∼)
  • 140. 一 般 化 星 の 高 さ の 階 層 ★ 一般化星の高さは無限階層をなすか不明 ! ★ それどころか,gh(L) = 2 となる正規言語Lが存在する かどうかすら不明!!
  • 141. S C H Ü T Z E N B E R G E ’ S T H E O R E M 一 般 化 星 の 高 さ の 有 名 な 定 理 ★ 言語 L が Star-free L の 有限モノイドが aperiodic ★ Star-free: 「*」を使わないで書ける言語(拡張正規表現で) ★ とても美しい定理だけど,説明するには半群の講義 が必要なので省略 ★ Schützenberger が 1965年に証明 [12]
  • 142. S TA R - F R E E L A N G U A G E 星 を 使 わ な い 言 語 ★ (ab)* は星自由言語 (考えてみよう) ! ★ (aa)* は星自由言語ではない (Schützenbergerの定理より)
  • 143. 正 規 表 現 入 門 星 の 高 さ を 求 めて J O I 2 0 1 4 春 合 宿
  • 144. お わ り に …
  • 145. ★ 正規表現はどうでしたか? 星の高さに浪漫を感じまし たか? ★ 「一般化星の高さ問題」は正規言語の理論において  燦然と輝く1960年代からの未解決問題です. ★ 「解かれている問題」を改めて解くのも良いですが, 「解けていない問題」にぶつかってみるのも楽しいか もしれません.
  • 146. J O I 2 0 1 4 合 宿 で の 様 子 ★ 若い学生さんたちに興味津々に聞いてもらえたと思います ★ 「 (ab)* が星自由である」を中高生がサクサク解いてびっくり!
  • 147. 正 規 言 語 の 研 究 者 は 日 本 で は 少 な い ★ 皆さん正規言語の研究 しましょう. ★ いつでも相談に乗りま す.研究テーマを提案 することも可能です. ★ 正規言語に関する質問 はいつでも歓迎です. Twitter ( @sinya8282 )
  • 148. 参 考 文
  • 149. [ 1 ] S A K A R O V I T C H 先 生 の 神 本 : 通 称 E AT ( 2 0 0 7 ) ★ オートマトンの話題が広 く深く網羅されている ★ Egganの定理の証明も 載ってる ★ 僕が「正規言語」の虜に なったのはこの本を読ん だから ★ 分厚い(760ページぐらい) ★ 組版が美しい
  • 150. [ 2 ] L A W S O N 先 生 の 入 門 書 ( 2 0 0 3 ) ★ 正規言語の「代数の理論」が しっかり書かれている ★ Schützenberger の定理の 証明も ! ★ 半群の研究者が書いた本 ! ★ Variety theory の入門書に最適
  • 151. [ 3 ] S I P S E R 先 生 の 入 門 書 第 三 版 ( 2 0 1 2 ) ★ 計算理論の入門書 ! ★ 最も読みやすいオートマ トンの入門書.     すぐ読める. ! ★ 和訳(『計算理論の基 礎』)もあるのでお薦め.
  • 152. ★ [4] Michael A. Arbib: Brains, Machines, and Mathematics (1987) ★ [5] Warren S. McCulloch, Walter Pitts: A Logical Calculus of the Ideas Imma- nent in Nervous Activity (1943) ★ [6] S. C. Kleene: Representation of Events in Nerve Nets and Finite Automata (1951) ★ [7] M.O. Rabin, D. Scott: Finite Automata and Their Decision Problems (1959) ★ [8] Ken Thompson: Regular Ex- pression Search Algorithm (1968) ★ [9] L.C. Eggan: Transition graphs and the star-height of regular events (1963) ★ [10] K. Hashiguchi: Algorithms for Determining Relative Star Height and Star Height (1988) ★ [11] Rina, S, Cohen: Rank-non-increasing transformations on transition graphs (1971) ★ [12] M.P. Schützenberger: On finite monoids having only trivial subgroups (1965)