Mercurial > hg > Papers > 2016 > masa-master
changeset 101:cf5564c13205
fix
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 18 Feb 2016 22:22:58 +0900 |
parents | 94ec38d9bdc6 |
children | df2df954cd01 |
files | paper/c4.tex paper/c6.tex paper/master_paper.pdf |
diffstat | 3 files changed, 44 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/c4.tex Thu Feb 18 21:59:42 2016 +0900 +++ b/paper/c4.tex Thu Feb 18 22:22:58 2016 +0900 @@ -252,12 +252,14 @@ \begin{figure}[htbp] \begin{center} -\includegraphics[width=1.0\textwidth]{images/example/iodivsuc.pdf} +\includegraphics[width=0.8\textwidth]{images/example/iodivsuc.pdf} \end{center} \caption{分割周りの処理} \label{fig:iodivsuc} \end{figure} +\newpage + \begin{lstlisting}[frame=lrbt,label=src:bmTMmain,caption=Boyer-Moore String Search の TMmain,numbers=left] typedef struct bm { int* skip_table; @@ -627,6 +629,8 @@ 状態の組み合わせは、BitVector の論理和によって簡単に計算される。 (図\ref{fig:bitvector}) +\newpage + \begin{figure}[htpb] \begin{center} \includegraphics[scale=0.2]{images/regex/bitvector.pdf} @@ -635,7 +639,7 @@ \label{fig:bitvector} \end{figure} - +\ % charclass 構造体 ソース \begin{lstlisting}[frame=lrbt,label=src:cc,caption=文字クラス(charClass)の構造体,numbers=left] typedef struct utf8Range { @@ -663,19 +667,19 @@ それぞれの二分木に文字の範囲である Condition を持っている。 その Condition の範囲内の文字の入力があれば、次の状態 nextState に遷移する。 -Condition には Word も格納できるようにしている。 -現段階の実装では、BitVector の最大数は 64 で制限されている。 -一つ一つの文字に状態を割り振るとすぐに上限に達する恐れがある。 - -状態数を節約する工夫として、文字列を 1 の状態として割り当てることにより、文字列の長さ分だけ節約することができる。 -図\ref{fig:wordstate}は、`word' という文字列の正規表現の正規表現木、DFA 及び状態遷移テーブルである。 -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.17]{images/regex/wordstate.pdf} - \end{center} - \caption{状態割当を一文字から文字列にすることにより、状態数を節約できる。} - \label{fig:wordstate} -\end{figure} +% Condition には Word も格納できるようにしている。 +% 現段階の実装では、BitVector の最大数は 64 で制限されている。 +% 一つ一つの文字に状態を割り振るとすぐに上限に達する恐れがある。 +% +% 状態数を節約する工夫として、文字列を 1 の状態として割り当てることにより、文字列の長さ分だけ節約することができる。 +% 図\ref{fig:wordstate}は、`word' という文字列の正規表現の正規表現木、DFA 及び状態遷移テーブルである。 +% \begin{figure}[htpb] +% \begin{center} +% \includegraphics[scale=0.17]{images/regex/wordstate.pdf} +% \end{center} +% \caption{状態割当を一文字から文字列にすることにより、状態数を節約できる。} +% \label{fig:wordstate} +% \end{figure} 図\ref{fig:sc} に2つの状態があり、それぞれに入力と遷移先がある。 これら 2 つの状態を一つの状態として表現し、新しく状態遷移図を生成する。 @@ -743,6 +747,8 @@ } \end{lstlisting} +\newpage + \begin{lstlisting}[frame=lrbt,label=src:task,caption=ceriumGrep のマッチング部分,numbers=left] TSValue blockSearch(TSValue tsv,Buffer buff,int task_spawned) { tsv.current = tsv.tg->stateStart->tState; @@ -843,6 +849,7 @@ そして、1つ目のファイルの末尾が状態遷移の途中で終わっていた場合(状態 1 でない場合)は、結果を集計する際に再度マッチングし始めた場所から正規表現をマッチングさせる。 +\newpage \begin{figure}[htpb] \begin{center} \includegraphics[scale=0.3]{images/regex/regexdivide.pdf} @@ -851,6 +858,8 @@ \label{fig:regexdivide} \end{figure} + +\newpage \begin{lstlisting}[frame=lrbt,label=src:regexprint,caption=マッチした結果を Print する,numbers=left] static TSValue stateSkipOnce(TSValue tsv) {
--- a/paper/c6.tex Thu Feb 18 21:59:42 2016 +0900 +++ b/paper/c6.tex Thu Feb 18 22:22:58 2016 +0900 @@ -11,22 +11,23 @@ その結果、ファイル読み込みを含め egrep と比較して最大 66 \% 速度がでる。 \section{今後の課題} -% これまでの正規表現は一文字ずつ参照して状態を割り振っていった。この状態割り振りの問題として文字列の長さの分だけ状態ができてしまう。 -% 状態が長くなればなるほど、ファイルと正規表現のマッチング時の状態遷移数もそれだけ多くなってしまう。 -% 状態遷移数が多くなると、それだけ状態と入力を見て次の状態に遷移するという動作を何度も繰り返すことになってしまうので、処理的にも重くなってしまう。 -% 同じ正規表現でも状態を少なくすればそのような繰返し処理も減っていくので、状態数を減らせばマッチングするまでの処理を軽減することができる。 -% 状態数を減らす工夫として、文字列を一つの状態として見ることによって状態数を減らす。 -% -% 図\ref{fig:wordstate}は、`word' という文字列の正規表現の正規表現木、DFA 及び状態遷移テーブルである。 -% 一文字ずつそれぞれに状態を割り振った場合、状態数 5 のオートマトンが構成される。 -% これを一つの文字列に対して状態を割り振った場合、状態数 2 のオートマトンが構成され、状態数を削減することができる。 -% -% \begin{figure}[htpb] -% \begin{center} -% \includegraphics[scale=0.17]{images/regex/wordstate.pdf} -% \end{center} -% \caption{文字単位の状態割り振りを文字列単位での状態割り振りに変更} -% \label{fig:wordstate} -% \end{figure} -% -% 実際にファイルに対して文字列を検索するときは、Boyer-Moore String Search を採用することにより、さらに高速になると期待される。 + +これまでの正規表現は一文字ずつ参照して状態を割り振っていった。この状態割り振りの問題として文字列の長さの分だけ状態ができてしまう。 +状態が長くなればなるほど、ファイルと正規表現のマッチング時の状態遷移数もそれだけ多くなってしまう。 +状態遷移数が多くなると、それだけ状態と入力を見て次の状態に遷移するという動作を何度も繰り返すことになってしまうので、処理的にも重くなってしまう。 +同じ正規表現でも状態を少なくすればそのような繰返し処理も減っていくので、状態数を減らせばマッチングするまでの処理を軽減することができる。 +状態数を減らす工夫として、文字列を一つの状態として見ることによって状態数を減らす。 + +図\ref{fig:wordstate}は、`word' という文字列の正規表現の正規表現木、DFA 及び状態遷移テーブルである。 +一文字ずつそれぞれに状態を割り振った場合、状態数 5 のオートマトンが構成される。 +これを一つの文字列に対して状態を割り振った場合、状態数 2 のオートマトンが構成され、状態数を削減することができる。 + +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=0.17]{images/regex/wordstate.pdf} + \end{center} + \caption{文字単位の状態割り振りを文字列単位での状態割り振りに変更} + \label{fig:wordstate} +\end{figure} + +実際にファイルに対して文字列を検索するときは、Boyer-Moore String Search を採用することにより、さらに高速になると期待される。