数学は暗記か・効率いい勉強法

競プロ勉強やりながら言語化できた内容なので記事に

 

 

数学は暗記だ。数学は暗記じゃない。と極端な意見をこの手の話題では目に入るが、論理だてて説明しているものがあまりないように思うので、記録に残しておこうと思う

 

まず、それぞれの問題xに対して、問題のある解法yの「深度」f(x,y)を定義する。ここでは、f(x,y)は定義可能という前提で進める。

 

深度f(x,y) は、{ a_k } 1<=k<=n となる数列であり、特にnを問題の「解法の深さ」と定義する。それぞれのa_k は 、「一文字以外を固定して、一文字を動かして値域を調べる」「バームクーヘン分割」「bitDP」などといった、大きな括りでの解法を表すとする。

 

[定義] f(x,y) = { a_k } 1<=k<=n を、xをyという解法で解く際に必要とする手法の列とする

 

で、ここからが数学は暗記じゃない、暗記だ。という話になるのだが、暗記だという人は要するに、数列の構成要素a_1 , ... , a_n がすべて頭に入っていないと、f(x,y)を構成できないから暗記だという。暗記じゃないという人は、a_1 , ... , a_n というf(x,y)をそのまま覚えてなくても、a_1 , ... , a_n の部分集合さえ覚えていれば解けるから暗記じゃないという。のような状況だと自分は捉えている。

 

そして、解法の丸暗記というもっともよくない行動が、a_1 , ... , a_n を適当に並び替えることで、f(x,y) を構成するということを放棄して、問題ごとにf(x,y)をそのまま丸暗記していることだと言語化をしてみることにする。

 

これはオーダーを考えると効率が悪いことは明らかで、例えば解法の種類が10通りでそれらを用いて深さ3の問題を解く特、10*9*8 = 720通りの問題の深度がある。この720通りをすべて覚えようとするのが、いわゆる悪い丸暗記勉強であって、正しい勉強は10個の解法だけ覚えたら、あとは組み合わせを試行錯誤することで、f(x,y)を構成できるようにすることであろう。

 

いわゆる要領のいいひとというのは、覚えたa_1 , ... , a_n から深度を構成する能力にたけた人であるとも言語化できる。

 

また、問題の深さがnで、解法の種類がMのとき、Mがnより十分大きいなら、問題の深度を構成するには総当たりだと、M^n 通りほど試す必要がある。

 

ほとんどの目の前に現れる問題は、1つの方針で解けるという事がなく、複数の要素を組み合わせて解く問題なので、nは1より大となる。そのため、丸暗記をしていたらキリがなく、手持ちの道具をきれいに使えるようになる必要がある。

 

わたしが今回競プロ勉強をして思ったことは、自分が数学を勉強していた時に思っていた、「考えればなんでも導ける」は考え方として極端だったなというものである。確かにa_n を a_1 , ... , a_{n-1} から導けて暗記をするまでもないというような事態は多発するだろうが、事実として、覚えていないと時間いっぱいで手持ちの手法から導くのが困難なものというものは存在する。

競技プログラミングの勉強で、「とにかく考えろ」という意見をよく見るが、今は「はい嘘松」と思っている。いくら考えても手持ちのポケットにないから解けないものは実際にあるので、それに時間を無尽蔵に使うのは学生でもなければ厳しいし、学生にしても時間の限度があるだろう。

 

それより大事なのは、解法を見て、手持ちのポケットの解法を組み合わせて問題の深度を再構成できた問題であったか、無理だったかどうかを復讐する事であろう。ここで無理だったら、はい無理。これはポケットに入れて覚えるしかない。とするしかない。そして、この無理の基準はかなり高く設けて、覚える内容は減らす方が好ましい。

逆に再構成できる問題だった場合、それは自分の実力不足が原因で解けなかった問題に他ならないので、どのような実力不足が原因で解けなかったのかを分析するのが大事であろう。わたしは解けるか解けないかわからない問題に時間をかけるより、解けたはずの問題が解けなかった理由を考察して、自分の弱点を一つ一つつぶしていくのが、結局は最高効率の勉強になるだろうと、思えている。

ここで、解けなかった理由で「考える前に答えを見てしまった」という事象に出くわして初めて、「とにかく考えること」という手法をポケットに入れればいいと考えている。

 

ただし、高校範囲の理系科目の勉強なら「これまで習った内容で出てくる問題が解けること」が基本的に保証されているので、最低限の時間は考えた後に解答を見て反省するのがよいだろう。競技プログラミングは全く思いつけないところから解法が飛んでくるのでまた別の話。

 

現代はタイパを重視するが、これが自分が考えるタイパのいい数学などの勉強法である。

 

ポイントは、問題の解法の深さを定義することで、丸暗記することで指数的に手間が増えることが立証できるという主張と、解法は様々なパーツから構成されているからそれらがそもそもポケットにないと解けないという部分である。当たり前といえば当たり前だが、きちんと書こうとすると意外と長くなるものである。