感度3000倍のオーダー多項式時間
深夜テンションでとある話題に参加する僕。
感度3000倍の薬飲ませたらどのタイミングで感度3000倍になるんだろうか
— 7/26〆切 (@kemu_nyaon) July 20, 2019
飲んでる最中に感度3000倍になったら喉に流れる感覚で灼け死にそう
— 7/26〆切 (@kemu_nyaon) July 20, 2019
そういえばR18作品とかでよく出てくる媚薬や"感度を増す薬"ってどういう原理で作用するんですかね。医学的に言えば体温とかを高くする成分と興奮を起こす成分を含めればいいんでしょうか。
今回は医学的な話(と理論的な話)は置いといて
「なぜ感度3000倍じゃないとダメなんだろう」
といった部分に集中した記事を書こうと思います。
まあ多分わざわざ3000倍にしているという事は効能的な問題で丁度良く体に回るのがそのくらいの倍率なんだろうと考えます。*1
計算科学でよく用いられる似たような概念がありますね。
計算量オーダー。
よくO(n)とかO(logn)とかで表現されるアレです。
詳しい話はこんな記事のためにしてもしょうがないのでざっくり言うと
「必要な基数をnとしたときに計算がどれくらいの計算量で終わるかを表す関数」
みたいなものです。
たとえばO(2n)であればn=2の時4,n=100のとき200.
O(n^2)であればn=2の時4,n=100のとき10000の計算量が必要というわけです。
対して最近のコンピュータは大体1秒でfor文10000000回をブン回せるらしいですね。
つまりn=2の時もn=100のときもO(2n)もしくはO(n^2)程度では大した差にはならない、といった話です。
」こういうオーダーでとても強力なO(n!)*2とかだとこの時点で露骨に時間に差がでます。
(計算量100!の時点で多分ウン日単位で時間かかる気がします)
これらを加味した結果こんなことを思いつく。
感度n倍の薬に対する多項式オーダーが存在しそう
— 7/26〆切 (@kemu_nyaon) July 20, 2019
詳しい仕様は割愛して単純にオーダー計算だけ行う場合を想定して、感度n倍の薬の多項式オーダーを考えてみましょう。
まあ単純に飲んでから30分~1時間の範囲で体に感度が行き渡ると考えましょう。
先述したように1秒間におよそ1000万程度の計算が行えるわけですから単純計算すれば
10000000 × 60 × (30 ~ 60)
= 18000000000 ~ 36000000000
の範囲にn=3000が綺麗に収まるような(ついでにどうしても3000倍である理由がつきそうな)多項式を考えればいいわけです。
大体O(n^3)であればそれっぽくなることに気付きました。
2000^3 = 8000000000 = 800秒(かなり短い)
3000^3 = 27000000000 = 45分 (ちょうどよさそう)
4000^3 = 64000000000 = 110分弱(ちょっと長い?)
3000^2 = 9000000 = 1秒前後
2^3000 = ほぼ無限
そんなわけで感度3000倍の薬問題はO(n^3)で片付けられる問題になるかもしれないということがわかりますた。
薬の処理がこんなに簡単なわけではないのでもうちょっと厳密に述べると
O(n^2) < O( f(n) ) <O(n^3)
あたりになるんだと思います。更に突き止めたい頭のおかしい人は個人で勝手にやってください。
以上徹夜糞記事でした。
O(n^3)だったら大体30~40分くらいで感度3000倍になりそうな気がする
— 7/26〆切 (@kemu_nyaon) July 20, 2019