Mercurial > hg > Papers > 2016 > masa-master
changeset 41:8f20ee03cf91
fix
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 10 Feb 2016 13:13:58 +0900 |
parents | e6ca2c4eedeb |
children | 8576011b8447 |
files | c4.tex master_paper.pdf memo/result.txt |
diffstat | 3 files changed, 39 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/c4.tex Wed Feb 10 03:04:40 2016 +0900 +++ b/c4.tex Wed Feb 10 13:13:58 2016 +0900 @@ -464,6 +464,9 @@ \subsection{Subset Construction による NFA から DFA の変換} Subset Construction は、ある状態から 1 つの入力に対して複数の状態遷移先がある場合、それらの状態 1 つの新しい状態としてまとめ、その新しい状態から新しい遷移先を構成しそれを繰り返す手法である。 +図\ref{fig:nfaex}内で入力によって複数の状態に遷移する状態 4 だけに着目する。 +状態 4 は [a-z] が入力されると状態 4 に遷移し、b が入力されると状態 2 に遷移する。このとき、b が入力されると状態 2 か状態 4 のどちらかに遷移することになる。(図\ref{fig:nfa}) + \begin{figure}[htpb] \begin{center} \includegraphics[scale=0.2]{images/regex/nfa.pdf} @@ -472,6 +475,9 @@ \label{fig:nfa} \end{figure} +このとき、状態 2 と 4 を組み合わせて一つの状態を新しく作り、その状態に遷移させる。新しく作られる状態の数は状態の組み合わせなので、その状態の組み合わせの和をとっている。 +これより、状態 4 に a か [c-z] を入力すると状態 4 に遷移し、b が入力されると新しい状態 6 に遷移する。 +このような変換をすることによって、入力によって遷移先が一意に決定されるようになる。(図\ref{fig:dfa}) \begin{figure}[htpb] \begin{center} @@ -481,6 +487,9 @@ \label{fig:dfa} \end{figure} +新しい状態が作られたならば、その状態に入力を加えた際の状態遷移も生成する必要がある。 +その状態遷移を生成するには、新しい状態の状態の組み合わせの遷移先を組み合わせることによって遷移先が決定される。\ref{fig:subset} + \begin{figure}[htpb] \begin{center} \includegraphics[scale=0.2]{images/regex/subset.pdf}
--- a/memo/result.txt Wed Feb 10 03:04:40 2016 +0900 +++ b/memo/result.txt Wed Feb 10 13:13:58 2016 +0900 @@ -1,3 +1,33 @@ +Wed Feb 10 11:06:12 JST 2016 + +egrep -o '(a|b)*a(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)' file/ab500MB.txt > 113.08s user 0.21s system 99% cpu 1:53.29 total + +egrep -o '(a|b)*a(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)' file/ab500MB.txt > /dev/null 103.32s user 0.18s system 99% cpu 1:43.50 total + +egrep -o '(a|b)*a(a|b)(a|b)(a|b)(a|b)(a|b)' file/ab500MB.txt > /dev/null 98.29s user 0.18s system 99% cpu 1:38.47 total +15629440 + +egrep -o '(a|b)*a(a|b)(a|b)(a|b)(a|b)' file/ab500MB.txt > /dev/null 94.72s user 0.18s system 99% cpu 1:34.89 total +16410912 + +egrep -o '(a|b)*a(a|b)(a|b)(a|b)' file/ab500MB.txt > /dev/null 90.15s user 0.19s system 99% cpu 1:30.33 total +line:16410912 + +egrep -o '(a|b)*a(a|b)(a|b)' file/ab500MB.txt > /dev/null 82.88s user 0.20s system 99% cpu 1:23.09 total +line:19536800 + +egrep -o '[A-Z][a-zA-Z0-9_]*' 500MB.txt > /dev/null +56.34s user 0.16s system 99% cpu 56.506 total + +sudo purge 後(キャッシュ消した) +egrep -o '[A-Z][a-zA-Z0-9_]*' 500MB.txt > /dev/null +57.37s user 0.22s system 98% cpu 58.382 total + +キャッシュがあってもなってもかわらない。 +(ファイルを毎回読み込みながら grep してる?) + +------------------------------------------- + Mon Feb 8 17:24:16 JST 2016 compare cprep egrep ceriumgrep seqsearch 500MB.txt '[A-Z][a-zA-Z0-9_]*'