実行時間(^~^)

げふ(^~^) あらびょ(^q^) どふ(^~^) 公開下書き

実行時間(^~^)

20210124shogi2a2b1.png
「 実行時間分かんねー」

kifuwarabe-futsu.png
「 お父んは 体験しないと分かんないからな」

ohkina-hiyoko-futsu.png
「 100億年ぐらい待機するといいわよ」

📖 アルゴリズムイントロダクション 第3版 総合版:世界標準MIT教科書 Kindle版

ramen-tabero-futsu2.png
「 👆 この本の練習問題を 練習しようぜ?」

ramen-tabero-futsu2.png
「 プログラムの命令数を n としよう」

ramen-tabero-futsu2.png
「 プログラムを 1命令 実行するのにかかる時間を 1μs(マイクロ秒) としようぜ?」

ohkina-hiyoko-futsu.png
「 マイクロ秒 って何?」

ramen-tabero-futsu2.png
「 1秒は 1000ミリ秒。
1ミリ秒は 1000マイクロ秒だぜ」

kifuwarabe-futsu.png
「 じゃあ 1秒は 1,000,000(百万)マイクロ秒 だな」

ohkina-hiyoko-futsu.png
「 コンピューターって 1秒間に 100万命令も 計算できるもんなの?」

ramen-tabero-futsu2.png
「 1 MIPS (Million Instructions Per Second) というやつだな」

ramen-tabero-futsu2.png
「 じゃあ、時間を t で与えるから、 何 n まで処理できるか計算しろだぜ」

kifuwarabe-futsu.png
「 その数学みたいな言い回し、分かんね」

t = 1秒

kifuwarabe-futsu.png
「 だから 1,000,000(百万)命令だぜ」

ramen-tabero-futsu2.png
「 それ n な」

kifuwarabe-futsu.png
「 n 以外に何があるんだぜ?」

t = 1秒。lg n

ohkina-hiyoko-futsu.png
「 lg n って何?」

ramen-tabero-futsu2.png
「 底(てい)が e(ネイピア数)のときの 対数だぜ」

kifuwarabe-futsu.png
「 どうやって 計算すんだぜ?」

ramen-tabero-futsu2.png
「 lg 1,000,000 かなあ。 Wolfram alpha で計算すると 6

ohkina-hiyoko-futsu.png
「 6 命令しか実行できないなんてわけ なくない?」

kifuwarabe-futsu.png
「 1 の対数は 0 だしな」

ohkina-hiyoko-futsu.png
「 1秒ってことは、1マイクロ秒の 100万倍の命令を実行できるってことじゃないの?」

ramen-tabero-futsu2.png
「 それを lg n

20210629coder41.png

ohkina-hiyoko-futsu.png
「 👆 それ、処理時間みたいよ?」

ramen-tabero-futsu2.png
「 じゃあ n は 100万固定でいいんじゃないか? 定数な」

kifuwarabe-futsu.png
「 100万命令と、 処理速度の違うマシンスペックと、 処理時間が 問題として与えられたわけかだぜ」

20210629coder41.png

ramen-tabero-futsu2.png
「 うーん、こう? あれっ、 100万命令って どこから来たんだぜ?」

ohkina-hiyoko-futsu.png
「 n を求めんじゃないの?」

20210629coder41a1.png

ramen-tabero-futsu2.png
「 👆 1秒あって マシンスペックが nマイクロ秒なら、 処理件数は 1,000,000 だろ。ここは埋まる」

kifuwarabe-futsu.png
「 その行 埋めてしまおうぜ?」

20210629coder41a2.png

ramen-tabero-futsu2.png
「 👆 こんな表埋めてても 何も面白くないんだが」

20210629coder41a2.png

ramen-tabero-futsu2.png
「 👆 なんか数が 逆な気がするんだよな」

20210629coder41a3.png

ramen-tabero-futsu2.png
「 👆 こういうわけでもないのか」

kifuwarabe-futsu.png
「 n って何なんだぜ?」

ramen-tabero-futsu2.png
「 1,000,000 だろ」

ohkina-hiyoko-futsu.png
「 だから n を求めんじゃないの?」

ramen-tabero-futsu2.png
「 n が 1,000,000 だろ」

kifuwarabe-futsu.png
「 そんなことが あるのだろうか?」

20210629coder43.png

ohkina-hiyoko-futsu.png
「 👆 数学チャンネルによると、上式の n を求めろって ことらしいわよ」

kifuwarabe-futsu.png
「 じゃあ お父んは 何もせず 数学チャンネルに問題を解いてもらおうぜ?」

ramen-tabero-futsu2.png
「 多分 その答えは 6 なんだろうけど」

20210629coder41a4.png

kifuwarabe-futsu.png
「 ↑ いや、 434294.4……だぜ。 お父んは 黙ってろだぜ」

20210629coder41a5.png

kifuwarabe-futsu.png
「 ↑ うーむ、こんな雰囲気かなあ」

20210629coder41a6.png

kifuwarabe-futsu.png
「 ↑ もう疲れた……」

20210629coder44.png

kifuwarabe-futsu.png
「 ↑ これでいいだろ」

ramen-tabero-futsu2.png
「 数学でなくなってるぜ」

ohkina-hiyoko-futsu.png
「 数学できないなら プログラムでタイムを計りましょう!」

import math

# log2 は 終わらない(^~^)
# ("log2 n", lambda n:math.log2(n)),
# sqrt も終わらない(^~^)
# ("√n", lambda n:math.sqrt(n)),
test_cases = [
    ("n", lambda n: n),
    ("n log2 n", lambda n:n*math.log2(n)),
    ("n^2", lambda n:n**2),
    ("n^3", lambda n:n**3),
    ("2^n", lambda n:2**n),
    ("n!", lambda n:math.factorial(n))]

# 制限時間(単位:秒)
time_required_list = [1.0]

for test_case in test_cases:
    for t in time_required_list:
        # 処理件数
        n = 1  # 0 開始は無理(^~^)

        while True:
            if t < (test_case[1](n))/1_000_000:
                break

            n += 1

        print(
            f"{t} 秒で 1,000,000個処理できるマシンの性能が {test_case[0]:>8} になると、{t} 秒では {n-1:>7}個 処理するので精一杯だぜ(^q^)")
1.0 秒で 1,000,000個処理できるマシンの性能が        n になると、1.0 秒では 1000000個 処理するので精一杯だぜ(^q^)
1.0 秒で 1,000,000個処理できるマシンの性能が n log2 n になると、1.0 秒では   62746個 処理するので精一杯だぜ(^q^)
1.0 秒で 1,000,000個処理できるマシンの性能が      n^2 になると、1.0 秒では    1000個 処理するので精一杯だぜ(^q^)
1.0 秒で 1,000,000個処理できるマシンの性能が      n^3 になると、1.0 秒では     100個 処理するので精一杯だぜ(^q^)
1.0 秒で 1,000,000個処理できるマシンの性能が      2^n になると、1.0 秒では      19個 処理するので精一杯だぜ(^q^)
1.0 秒で 1,000,000個処理できるマシンの性能が       n! になると、1.0 秒では       9個 処理するので精一杯だぜ(^q^)
何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事