No.5ベストアンサー
- 回答日時:
No.3です。
私のやり方も実は左からやっているのと同じなのです。かっこの中を先に変換しているだけで、計算自体は左から行っています。
逆ポーランド記法は X op Y (opは算術記号)が XYop と変換される、というのが基本になります。XとYはそれぞれ式であっても同じです。元の式は3項以上あると、どこかで区切って2項演算にしてやる必要があります。左から、というのはそれを左から計算されるように処理する、という意味でしょう。
たとえばA+B+Cという式があったとします。式は左から処理するのでA+Bを先に処理します。それを明示的に書くと(A+B)+Cという書き方ができます。これを変換すると、A+BはAB+なので、
(A+B)+C→(AB+)+C→(AB+)(C)+→AB+C+
となります。
しかし、最初の式をA+(B+C)と区切ってしまうと、
A+(B+C)→A+(BC+)→(A)(BC+)+→ABC++
と違う結果になります。これは、A+(B+C)では「かっこの中を先に計算する」という計算規則からすると「右側を先に計算している」ということになり、計算としての結果は同じでも左から計算しているわけではなく、逆ポーランド記法の変換結果も異なってしまいます。
例1の場合を改めて参考書と同じ過程を通るようにして変換してみましょう。X+Y → XY+、X*Y → XY* となることを頭においておき、
A+B*(C+D)+E を、(A+B*(C+D)) + E と解釈し、上の式のXに(A+B*(C+D))、YにEを当てはめたとすると、X+YはXY+ですから
X+Y → (A+B*(C+D)) + E → (A+B*(C+D))E+ …(1)
同じように処理していって、A+B*(C+D)の部分をX=A,Y=B*(C+D)とあてはめると、
X+Y → A + B*(C+D) → A(B*(C+D))+
となり、これを(1)の式に代入すると
(A(B*(C+D))+)E+ …(2)
さらにかっこの中を見ていくと、
B*(C+D) → B(C+D)*と変換できるので、これを(2)にあてはめると、
(A(B(C+D)*)+)E+
となり、最後にC+DはCD+と置きかえられるので、
(A(B(CD+)*)+)E+ → ABCD+*+E+
となります。
実は私の変換方法も同じことをやっているのです。最後のC+D→CD+などを先に変換しておいただけで、中から計算しているように見えているだけです。
最初に A+B*(C+D)+E を A+(B*(C+D)+E)としてしまうと、最初の方でA+B+CをA+(B+C)とした場合と同じく、結果が異なってしまいます。
例2の場合も同じように、XとYに一度置きかえてみましょう。
X*YはXY*と変換されます。
Xを(A+B)、Yを(C-D)とすると、
X*Y → XY* は、
(A+B)*(C-D) → (A+B)(C-D)*
という意味になります。
そしてA+BはAB+、C-DはCD-になるので、上の式は
(A+B)(C-D)* → (AB+)(CD-)* → AB+CD-*
となります。
>私の頭の中は(A+B)*(C-D)→(AB+)*(CD-)?→AB+*CD-?→*だけ右に来て+がそのまま?
(AB+)*(CD-)がまだ変換に最中なのにかっこを消してしまっています。ここから、(AB+)(CD-)*とさらに変換して逆ポーランド記法への変換は完了します。
この回答への補足
度々本当にすみません。XYopが、XとYはそれぞれ式であっても同じということから、例2は分かりました。ありがとうございます。こんなに丁寧に説明して頂いてまた質問で申し訳ないのですが、例1は「元の式は3項以上あると、どこかで区切って2項演算にしてやる必要がある」ことから、
(1)A+B*(C+D)+Eを(A+B*(C+D)) + EでXに(A+B*(C+D))、YにEを当てはめて
(2)A+B*(C+D)の部分をX=A,Y=B*(C+D)とあてはめる
となっていますが、区切る場所はどうやって決めていくのですか。
どうして最初のA+B+Cは(A+B)+Cで左からなのに、例1だと区切る場所が変わるのでしょうか。
気が向いたらで構いません。よろしくお願いします。
No.7
- 回答日時:
もう少しやわらかく考えてみたらどうでしょう?
例1 A+B*(C+D)+E
これを実際に頭の中で計算するときを考えます
おそらく
CとDを足したもの(+)にBをかけて(*)それにAを足して(+)Eを足す(+)
のような感じになると思います
この出来上がった文字列を左から順番に記号に変換すると
A+B*(C+D)+E → CD+B*A+E+ となります
これが逆ポーランド記法の基本的な考え方です
しかし実際には
A、B、C…と順番にデータが処理されることが前提のため
Aから順番に表記したものが一般的?になっている
このためAから順番に表記する方法を考える必要がある
問題をわかりやすくするため
解答から元の数式を求める方法を考えてみる
基本は3点
・左から順番
・数値は2つ一組
・計算は演算子
<逆ポーランド記法 → 数式への変換>
ABCD+*+E+
A
計算なし
AB
計算なし
ABC
計算なし
ABCD
計算なし
ABCD+
計算あり
対象は直前のCD → C+D
ABCD+*
計算あり
対象は直前のB → B*(C+D)
ABCD+*+
計算あり
対象は直前のA → A+B*(C+D)
ABCD+*+E
計算なし
ABCD+*+E+
計算あり
対象は直前のE → A+B*(C+D)+E
この逆を考えればよい
<数式 → 逆ポーランド記法への変換>
A+B*(C+D)+E
A
最初の数値
AB
次の数値 ここまでは必須
ABC
次の数値
AとBの演算はまだ行わないので演算子はなし
ABCD
次の数値
BとCの演算はまだ行わないので演算子はなし
ABCD+
演算子(+) 1番目の演算
C+Dの演算を行う
ABCD+*
演算子(*) 2番目の演算
B*(C+D)の演算を行う
ABCD+*+
演算子(+) 3番目の演算
A+B*(C+D)の演算を行う
ABCD+*+E
次の数値
ABCD+*+E+
演算子(+) 4番目の演算
A+B*(C+D)+Eの演算を行う
初めの内は
逆ポーランド記法 → 数式に変換するほうが理解しやすいと思います
情報処理試験対策だけを考えるのであれば
答え(4択)から数式を求めて解答を導く
というのもひとつの手ではあります
何人もの方が丁寧に回答を下さって本当にありがたく思います。
やっぱり頭の中で数式を1回整理する必要ってあるんですね。他の人は必要ないのかもしれないけど。もっと事務的にこうなったらこうみたいにぽんぽんできるのかと思って。
ここに回答をもらってから、数式が短めの逆・・の問題なら正解できるようになりました。kohji_5959さんの逆・・⇒数式も理解できるので困ったとき用に覚えておこうと思います。ありがとうございます。
No.6
- 回答日時:
#1です。
木が違います。正しくは以下のとおりです。
\
+
/ \
+ E
/\
A *
/\
B +
/\
C D
一番優先順位が低いものが順番に節になります。
\
+
/ \
A+B*(C+D) E
この段階で次に節になるのはA+B*...の+です。一番優先順位が低くて
一番最後に計算されます。で、以下のとおりになります。
\
+
/ \
+ E
/ \
A B*(C+D)
次は*が節に、最後にC+Dの+が節になり完成です。
度々ありがとうございます。
やはり優先順位的なところが難しく感じます。きっと数学が苦手だったこともあるのだと思います。少し理解が深まりました。基本情報の問題を解くことだけを考えれば対応できそうです。ありがとうございました。
No.4
- 回答日時:
#1です。
>木構造を使う方法ですとABCD+*+E+はAB+CD+*E+になります。
これ大嘘でした。ごめんなさい。今やってみたら違ってました。
木構造を使ってもABCD+*+E+ですね。。。
混乱したらごめんなさいm(_ _)m
素早い回答ありがとうございます。
スタックのURLは英語みたいでしたが、木のほうは参考にさせてもらいました。木を使って例2は解けるようになりました。これだけでも大変ありがちのですが、例1はasfdさんの最初の回答と同じAB+CD+*E+になります。
\
+
/ \
* E
/\
+ +
/\ /\
A B C D
の後順です。違いますか。時間がある時で構いませんので、例2がABCD+*+E+になる理由を教えていただけたらと思います。よろしくお願いします。
No.3
- 回答日時:
A+BがAB+、A*BはAB*となることはわかりますよね。
そうすると、順番に処理していけば、以下のようになります。
変換の過程を書いてみますが、途中で()を挟むとわかりやすいです。
例1
C+D → CD+
B*(C+D) → B(CD+)* → BCD+*
A+B*(C+D) → A(BCD+*)+ → ABCD+*+
A+B*(C+D)+E → (ABCD+*+)E+ → ABCD+*+E+
例2
A+B → AB+
C-D → CD-
(A+B)*(C-D) → (AB+)(CD-)* → AB+CD-*
この回答への補足
素早い回答ありがとうございます。ごめんなさい。まだちょっとよく分からないのですが、
質問(1)最初に優先順位についてこちらで質問したときに、
左からと回答して頂いて、参考書も優先順位順に()をつけるという事で(A+(B*(C+D)))E+→(A(B*(C+D))+E+→(A(B(C+D)*+)E+つづく
といった感じで左から行っているようですが、ham_kamoさんの回答を見た感じでは普通の数式のように()が先で*が次でみたいに行っても構わないということですか。(ちなみに私はこの参考書の「優先順位順に()をつける」の意味も分かりません。)
質問(2)(A+B)*(C-D) → (AB+)(CD-)* は、なんで*だけ後ろに来るんでしょうか。私の頭の中は(A+B)*(C-D)→(AB+)*(CD-)?→AB+*CD-?→*だけ右に来て+がそのまま?となります。度々すみません。お手すきのときで構いませんので、よろしくお願いします。
No.2
- 回答日時:
左から見て行って、3つの並びが「数 数 演算子」の形になったら計算する、
というのを繰り返してみてください。
ABCD+*+E+
を左から見て、最初に「数 数 演算子」の形になるのは
CD+
なので、C+Dを計算。C+D=Fだとして話を続けると、
ABF*+E+
また左から見て、最初に「数 数 演算子」の形になるのは
BF*
なので、B*Fを計算。B*F=Gだとすると、
AG+E+
同様に、A+G=Hとすると、
HE+
最後にHとEを足して終了です。
なお、アルファベットの部分に実際に数字を入れる場合、
数字と数字を区切るための「デリミタ」が必要になります。
参考URL:http://ja.wikipedia.org/wiki/%E9%80%86%E3%83%9D% …
No.1
- 回答日時:
段階を追って書こうと思ったんですが、途中まで書いたらすごく
長かったので辞めます。これは2種類のアルゴリズムがあります。
二分木を作る方法と、スタックを使う方法です。
スタックを使う方法だと、上記の回答になります、
木構造を使う方法ですとABCD+*+E+はAB+CD+*E+になります。
どちらも正解なので、あまり違いを気にする必要は無いと思います。
スタックを使う方法は
http://en.wikipedia.org/wiki/Shunting_yard_algor …
木構造を使う方法は
http://santamartadotnet.hp.infoseek.co.jp/docume …
です。
参考URL:http://en.wikipedia.org/wiki/Shunting_yard_algor …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 数学B 私の回答はあっていますか? A(1,3), B(2,5), C(6,8), D(5,6), 8 2022/05/22 00:55
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- 数学 数学の質問です。 円に内接する四角形ABCD において, AB=2, BC = 1, CD = 3, 3 2023/04/18 18:28
- 数学 数Bベクトル 平行四辺形ABCDにおいて、辺ABを3:2に内分する点をE、対角線BDを2:5に内分す 3 2022/06/19 12:11
- USBメモリー・SDカード・フラッシュメモリー PDF文書をCD-Rで配るときの注意事項 4 2022/03/31 16:49
- 高校 行列のかけ算 2 2022/06/24 17:12
- 物理学 写真の図についてですが、 ①BC間を導線で繋いだら、AB間、CD間の電場の強さが変わっていますが、こ 1 2023/02/19 14:34
- 数学 aの3乗=bの3乗となるとき、a=bとならない場合はありますか? 4 2023/02/12 15:38
- 数学 行列の証明 7 2022/05/05 12:11
関連するカテゴリからQ&Aを探す
医師・看護師・助産師
薬剤師・登録販売者・MR
医療事務・調剤薬局事務
歯科衛生士・歯科助手
臨床検査技師・臨床工学技士
理学療法士・作業療法士・言語聴覚士
臨床心理士・心理カウンセラー・ソーシャルワーカー
介護福祉士・ケアマネージャー・社会福祉士
弁護士・行政書士・司法書士・社会保険労務士
フィナンシャルプランナー(FP)
中小企業診断士
公認会計士・税理士
簿記検定・漢字検定・秘書検定
情報処理技術者・Microsoft認定資格
TOEFL・TOEIC・英語検定
建築士
インテリアコーディネーター
宅地建物取引主任者(宅建)
不動産鑑定士・土地家屋調査士
マンション管理士
電気工事士
美容師・理容師
調理師・管理栄養士・パティシエ
シェフ
保育士・幼稚園教諭
教師・教員
国家公務員・地方公務員
警察官・消防士
その他(職業・資格)
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
時間単位の書き方について教え...
-
経常利益増加率⇒マイナス÷マイ...
-
公共建築工事共通費積算基準(...
-
現在の預貯金が6000万で現在58...
-
建築用語?
-
レンタルの料金設定について
-
売り上げの15パーセントを渡さ...
-
暦月の1ヶ月
-
2時間45分の勤務がなんで2.75時...
-
IRRがマイナスになるとは?また...
-
鉄板の耐過重
-
パート面接時の筆記試験攻略方...
-
レシピに書かれた人数分以上に...
-
関数電卓を使って角度を計算す...
-
縮尺60分の1の設計図を600分の1...
-
有効採光面積は窓のどこから計...
-
20%減少の計算教えてください。
-
ラウンドダウン関数を使わずに...
-
EXCELで、条件によって計...
-
残業時間を計算し且つ足りない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
時間単位の書き方について教え...
-
経常利益増加率⇒マイナス÷マイ...
-
建築用語?
-
レンタルの料金設定について
-
鉄板の耐過重
-
公共建築工事共通費積算基準(...
-
売り上げの15パーセントを渡さ...
-
2時間45分の勤務がなんで2.75時...
-
レシピに書かれた人数分以上に...
-
20%減少の計算教えてください。
-
パート面接時の筆記試験攻略方...
-
縮尺60分の1の設計図を600分の1...
-
暦月の1ヶ月
-
パート面接での筆記試験(計算問...
-
IRRがマイナスになるとは?また...
-
関数電卓を使って角度を計算す...
-
残業時間を計算し且つ足りない...
-
年率の利子の計算の公式を教え...
-
玉掛けの 角度 法令基準は...
-
今接客業で仕事をしていて、医...
おすすめ情報