11/28 カードゲームのシミュレーション(2),データの検索(1)

11/28 カードゲームのシミュレーション(2),データの検索(1)


前回の補足


前回の感想,質問より

Q.
Jupyter Notebookを使っていたら,実行しようとするセルの左側が「In[*]:」となって,それ以上動かなくなってしまいました.
A.
In [*]: 
は,「そのセルを実行する指示が出ている(Shift + Return や Control + Returnが押された)が,python プログラムの実行が終わらない」ことを表しています.

画像ファイル中に見えてるセルはどれも数秒以内には実行が終わるセルに見えるので,おそらくは上の方に実行に非常に長い時間がかかる(または永遠に止まらない)セルがあるものと思われます.

そのような時には,Jupyter のメニューの Kernel -> Interrupt を選んで実行を中断してください.その後は,実行が終了するセルの実行を再開することができます.


Q.
誤差を少なくするために計算を1000回行うというのはわかったのですが、なぜ一回しか行わなかった場合、300だけ異常値を示すのかがよくわかりませんでした。
def comb_test(n):
  return comb(n, n // 2)
import i2a
result = i2a.bench.bench(comb_test,range(0, 1000,100))
i2a.bench.plot(result)
A.
1回しか行わなかった場合のグラフがデコボコになる問題ですが,
  • 10 ** -5 秒程度の時間計測では誤差が大きいので綺麗なグラフにならない
  • 教育用計算機システムに入っている python 処理系では numpy.float128 が128ビット実数ではなく,nが200-300の途中でオーバーフローが生じてしまっている.最初のオーバーフローで警告(下の方にピンクの背景が出ているもの)を表示しているが,その表示のための時間が時間計測に含まれてしまい,異常に時間がかかってしまっている
ことが原因のようです.

前回の課題について


講義資料


講義フォルダの作成


投票システム

vote.pyをダウンロードして(「リンク先のファイルを別名で保存」で,ホームフォルダの下のalgo18を選択(なければ作る).".txt"を「追加しない」を選ぶ)保存します.ドックからターミナルを起動して,
cd ~/algo18
を済ませてから,
python vote.py 選択肢番号
のように使います.

Jupyter Notebookを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.


テキストの補足


Notebook教材

以下のNotebook教材は,~/algo18 以下に ダウンロードして,Jupyter Notebookからopenして使ったり, Google Colaboratoryを使って,クラウド実行環境でPythonプログラムを実行できます.ダウンロードする場合もGoogle Colaboratoryの使い方を参照してください.Googleアカウントへのログインを求められたときは,通常のGoogleアカウント「XXX@gmail.com」ではなく,ECCSクラウドメールのアカウント「XXX@g.ecc.u-tokyo.ac.jp」を使ってログインしてください.

今日の課題