見出し画像

Python 計算量の沼で元気にクロール\(^o^)/

今日も今日とて、pythonのお勉強!

今日は、前回と前々回の反省を活かし、Atcoderのコンテストで【TLE】にならないように、計算量や実行時間のお勉強!学習に使用した参考文献は下記の記事



計算量とかいう未開の地

これまで、実行時間とか、計算量とか気にしたことなかったから、未開の地。先輩から

「for文の中にfor文を書くのはやめようね」

とは言われていたけど、、

ま、御託を並べてもしょうがないので、早速勉強!

参考文献

上記の記事によると、nのk次関数のkの部分が実行時間や計算量に大きな影響を与えているっぽい。

だから、for文一回なら、O(n)だし、

for文の中にfor文を作るとO(n^2)ってなるってこと。

「なるほど・・・」

今まで、「for文の個数 = 次数」だと思っていたけど、それは間違いだったみたい。

ここまではなんとか理解できました。

ですが、O(log(n))のところで躓きました・・

反復(i = i*2) のところがわからない・・・

ある程度、実行時間や計算量について理解できたのですが、反復(i = i*2) のところで躓きました・・・

記事に丁寧に書いたあったのですが、、うまく理解できませんでした(´;ω;`)

記事によると、反復でかつ、i が定数倍のときは、O(log(n))になるんかな?

(↑自信ないので、間違っていたらコメント下さい。)

書いてあることは高校数学の範囲なので、式変形自体は理解できたのですが、なんでその式になるかがわからない。

よくわからないから別の記事を読んでみる

理解不足を埋めるため、他の記事も読んでみました。

上記の記事は、計算量について基本知識の記事でした。

上記の記事によると、問題で定義されている制約がTLEと深い関係があるっぽい

だから、制約よりも小さいk次関数なら大丈夫。

とりあえず、入力値のmaxが10^3くらいだったら、for文を二重にまわしても大丈夫ってことなんか???

わからん!!

足りないのは、事前知識と思考法

今までは、「解ければいいや」としか思ってなかったのですが、AtcoderのC問題以上になると、計算量についても思案しないとだめっぽい

これからは、問題文をみたら、「どーやったら解けるか」だけじゃなく、「計算量はいくつか」「どーやったら計算量を落とせるか」まで考える。

そのために必要なのは、計算量に関する事前知識と思考法が大事。

2記事ともすごく丁寧に説明されていたので、再度読み込みしていきたいと思います!

目指せ茶色!!




この記事が気に入ったらサポートをしてみませんか?