9: 2016-08-04 (木) 01:03:53 osinko  |
現: 2016-08-04 (木) 11:20:26 osinko  |
| //Nodeクラスのルートと左右の葉に適切にデーターを収納する | | //Nodeクラスのルートと左右の葉に適切にデーターを収納する |
| //左右の葉では、それぞれ解析実行して再帰処理し文字列の式を分解していく | | //左右の葉では、それぞれ解析実行して再帰処理し文字列の式を分解していく |
| + | |
| // left-hand side | | // left-hand side |
| Left = new Node(RemoveBracket(this.Expression.Substring(0, posOperator))); | | Left = new Node(RemoveBracket(this.Expression.Substring(0, posOperator))); |
| &ref(tree2.png); | | &ref(tree2.png); |
| | | |
- | この要領で式木を生成すればいい。式木の末端程、計算優先順位は高くなるのでcalculate時は末端から計算する | + | この要領で式木を生成すればいい。式木の末端程、計算優先順位は高くなるのでcalculate時は末端からトラバースして計算する |
| | | |
| **式木から数式のパターンを眺めてみる [#bafcc66b] | | **式木から数式のパターンを眺めてみる [#bafcc66b] |
| の \(3!=3\times 2\times 1=6\) パターンで全てを網羅する事ができる。そこで、この式木を実際に組んで性質をまとめてみる。まず、以下の約束事を定義する | | の \(3!=3\times 2\times 1=6\) パターンで全てを網羅する事ができる。そこで、この式木を実際に組んで性質をまとめてみる。まず、以下の約束事を定義する |
| | | |
- | \(\bullet =\left\{ \times ,\div ,+,- \right\} \\ \overline { \bullet } =\left\{ \times ,\div \right\} \\ \underline { \bullet } =\left\{ +,- \right\} \) | + | \(①,②,③=\left\{ \times ,\div ,+,- \right\} \\ \overline { ① } ,\overline { ② } ,\overline { ③ } =\left\{ \times ,\div \right\} \\ \underline { ① } ,\underline { ② } ,\underline { ③ } =\left\{ +,- \right\} \) |
| | | |
- | ここで使用している「\(\bullet \)」マークは匿名の二項結合演算子(この場合①~③)を表している。記号に上線があるものは優先順位の高い演算子の集合「×÷」。下線のあるものは優先順位の低い演算子の「+-」。マークのみは「×÷+-」の集合になっている。このルールに従い式木から数式を見ると以下のような分類が可能となる | + | //\(\bullet =\left\{ \times ,\div ,+,- \right\} \\ \overline { \bullet } =\left\{ \times ,\div \right\} \\ \underline { \bullet } =\left\{ +,- \right\} \) |
| + | |
| + | //ここで使用している「\(\bullet \)」マークは匿名の二項結合演算子(この場合①~③)を表している。記号に上線があるものは優先順位の高い演算子の集合「×÷」。下線のあるものは優先順位の低い演算子の「+-」。マークのみは「×÷+-」の集合になっている。このルールに従い式木から数式を見ると以下のような分類が可能となる |
| + | |
| + | 二項結合演算子(この場合①~③で「×÷+-」の集合)に上線があるものは優先順位の高い演算子の集合「×÷」。下線のあるものは優先順位の低い演算子の「+-」の集合になっている。このルールに従い式木から数式を見ると以下のような分類が可能となる |
| | | |
| ***式木123のパターン [#n73fa719] | | ***式木123のパターン [#n73fa719] |
| | | |
| \(a\overline { ① } b\overline { ② } c\overline { ③ } d\quad \Leftrightarrow \quad a\times b\times c\times d\quad \Leftrightarrow \quad 123のパターン\\ a\underline { ① } b\overline { ② } c\overline { ③ } d\quad \Leftrightarrow \quad a+b\times c\times d\quad \Leftrightarrow \quad 132のパターン\\ a\underline { ① } b\overline { ② } c\underline { ③ } d\quad \Leftrightarrow \quad a+b\times c+d\quad \Leftrightarrow \quad 312のパターン\\ a\overline { ① } b\overline { ② } c\underline { ③ } d\quad \Leftrightarrow \quad a\times b\times c+d\quad \Leftrightarrow \quad 321のパターン\\ a\overline { ① } b\underline { ② } c\underline { ③ } d\quad \Leftrightarrow \quad a\times b+c+d\quad \Leftrightarrow \quad 321のパターン\\ a\underline { ① } b\underline { ② } c\underline { ③ } d\quad \Leftrightarrow \quad a+b+c+d\quad \Leftrightarrow \quad 321のパターン\\ a\underline { ① } b\underline { ② } c\overline { ③ } d\quad \Leftrightarrow \quad a+b+c\times d\quad \Leftrightarrow \quad 亜種のパターン\\ a\overline { ① } b\underline { ② } c\overline { ③ } d\quad \Leftrightarrow \quad a\times b+c\times d\quad \Leftrightarrow \quad 亜種のパターン\) | | \(a\overline { ① } b\overline { ② } c\overline { ③ } d\quad \Leftrightarrow \quad a\times b\times c\times d\quad \Leftrightarrow \quad 123のパターン\\ a\underline { ① } b\overline { ② } c\overline { ③ } d\quad \Leftrightarrow \quad a+b\times c\times d\quad \Leftrightarrow \quad 132のパターン\\ a\underline { ① } b\overline { ② } c\underline { ③ } d\quad \Leftrightarrow \quad a+b\times c+d\quad \Leftrightarrow \quad 312のパターン\\ a\overline { ① } b\overline { ② } c\underline { ③ } d\quad \Leftrightarrow \quad a\times b\times c+d\quad \Leftrightarrow \quad 321のパターン\\ a\overline { ① } b\underline { ② } c\underline { ③ } d\quad \Leftrightarrow \quad a\times b+c+d\quad \Leftrightarrow \quad 321のパターン\\ a\underline { ① } b\underline { ② } c\underline { ③ } d\quad \Leftrightarrow \quad a+b+c+d\quad \Leftrightarrow \quad 321のパターン\\ a\underline { ① } b\underline { ② } c\overline { ③ } d\quad \Leftrightarrow \quad a+b+c\times d\quad \Leftrightarrow \quad 亜種のパターン\\ a\overline { ① } b\underline { ② } c\overline { ③ } d\quad \Leftrightarrow \quad a\times b+c\times d\quad \Leftrightarrow \quad 亜種のパターン\) |
- | ***結論 [#h0fc7fad] | + | ***中間まとめ [#h0fc7fad] |
| &font(150%){以上の事から式木の5パターンで4項の括弧を含めた四則演算の優先順位が網羅できることが確認できる&br;}; | | &font(150%){以上の事から式木の5パターンで4項の括弧を含めた四則演算の優先順位が網羅できることが確認できる&br;}; |
| | | |
- | この考えが正しいかどうか。まずブルートフォースの形式で力技で率直にアプローチしたコードと、5パターンにまでシンプル化した式木を利用したコードのふたつで検証を行い、どちらの答えも同一であれば、まず間違いはないだろうとする。では、コーディングを始める | + | この考えが正しいかどうか。まずブルートフォースの形式で力技で率直にアプローチしたコードと、5パターンにまでシンプル化した式木を利用したコードのふたつで検証を行い、どちらの答えも同一であれば、まず間違いはないだろうと考える。コーディングはまだ早い。もう少し考えを進めてみる |
| + | |
| + | **群(group)の理論で、式木の置換処理を考える [#c9f619a3] |
| + | |
| + | 資料:[[群 (数学):https://ja.wikipedia.org/wiki/%E7%BE%A4_(%E6%95%B0%E5%AD%A6)]] |
| + | 数学における「群」とは「似ているものをひっくるめる」理論といえる。似ているもの同士がどこが似ているかを人に説明するのは難しい。その対象が抽象的な物であればある程難しいものだと考えられる。 |