2020-06-20 課題¶
- コンテンツの案内ページ
- GitHub へのリンク
- matplotlib を忘れないように、簡単なグラフをいくつか描いてみてください。
- TeX でいろいろな式を書いてみましょう。
- 実際に競プロの問題をいくつか解いてみましょう。まずは Beginners' selection をやっていきます。
- 今回は ABC087B と ABC083B です。
- Pythonで10問解いてみた記事もあるので参考にしてください。
- 他にもここのページを一通り眺めてみてください。
メモ:先に進む前に録画してあるか確認しよう¶
自分用メモ¶
- 常微分方程式で漸化式から微分方程式に流れる部分の書き直し
- 勉強のおすすめ:AtCoder はどうか?C++の解説もあるし、仕事・評価にも割と直結するし、具体的な問題つきで勉強できる。
- https://atcoder.jp/contests/apg4b
- C++のコードをPythonで書き直してみるだけでもかなりの勉強になるはず
- Python によるアルゴリズム https://qiita.com/cabernet_rock/items/cdd12b07d213b67d0530
- https://atcoder.jp/contests/apg4b
- 文と式の説明
- IT 基礎知識みたいなやつ
- 数値計算に関わるクラス・オブジェクトの説明
- まずは辞書・構造体の拡大版として導入するか?
- 変な誤解を生まないような書き方を考える
- 遅延型方程式に対するコメント追加
- import に関する実演
- matplotlib のチュートリアルを読もうの会
- matplotlib 回では実際に matplotlib のチュートリアルを読もう
- 公式情報に触れる重要性
- 古い情報が古いと書いてあったりする:たとえば
pylab
- Gallery
- 見ていて面白い
- 「どこをいじるとどう変わるか」が視覚的にわかる
- 公式情報なのできちんとアップデートしてくれている(はず)
- 公式情報にソースがあるので自分でいろいろ書き換えていて破滅したとき、必ずオリジナルを復元できる
- Jupyter (IPython)でのはまりどころ解説を作ろう
- いったん変数を作ると他のセルでも読み込める(読み込めてしまう)
- 「セルを上から順に読み込まないと動かない」問題の原因
- カーネル再起動まで変数は残り続ける
Matplotlib¶
- とりあえず本当に簡単な図を描く
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
自然言語処理100本ノック¶
- この間紹介したらやってみたくなったので、(勉強会の課題ネタ競プロを放棄して眺めてみた)
- URL: 言語処理100本ノック 2020 (Rev 1)
- 文字列に限定した競プロの趣もある
第1章: 準備運動 00. 文字列の逆順¶
文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.
1 2 |
|
1 2 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
第1章: 準備運動 01. 「パタトクカシーー」¶
- 「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.
1 |
|
1 |
|
1 |
|
1 |
|
02. 「パトカー」+「タクシー」=「パタトクカシーー」¶
「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 |
|
03 円周率¶
"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.
1 2 |
|
1 |
|
1 2 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 |
|
1 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
04. 元素記号¶
"Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭の2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.
(言っていることがよくわからなくて何度も読み返した。)
1 2 3 4 5 6 7 8 9 |
|
1 |
|
1 2 3 4 5 |
|
内包表記をループで書き直した¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
プログラミングの一般論¶
- Web システムを例にした速度問題
- データ構造とアルゴリズム
- 連結リストと配列:どんな特性があるか?
- スタックとキュー:いつどこで使うか?どう実装するか?
web システムの事例¶
- 参考
- システムが重いというときどこにどんな原因があるか?
- ソシャゲでもよくある「障害発生」はどこでどう起こるか?
- どこかのサーバーが物理的に壊れることもある
- データ構造とアルゴリズム(いわゆる「プログラミング」)がかかわるのはどこか?
- web サーバーでの処理(プログラム)
- データベースの(インデックス)設計
- ソフトによる問題なら基本的にはどこにでもありうる
データ構造とアルゴリズム¶
- 鶏と卵で、同時に考えるべきテーマ:何かをするためにはどうデータを持ってどんな処理をすれば効率がいいか?
- 効率にもいろいろある
- 単純な処理速度・メモリ消費量・計算量
(連結)リストと配列¶
- 何が違うのか?
- メモリ上の配置やデータの「つなぎ方」
- 状況によって使い分ける
リストの特徴¶
- 要素数は変わることが前提
- データを(先頭に)追加するのは簡単
- データの削除も比較的簡単
- 先頭から 1 つずつ順に処理するならそれなり
- 検索やデータの書き換えが遅い:連結構造をたどる必要がある
配列の特徴¶
- 要素数は固定
- データの追加・削除が重め
- データの参照・書き換えが速い:アドレスが連続なので先頭さえわかれば「そこから何番先」と直指定できる
- 「リストで遅ければ配列で書き直す」みたいなことはよくある
ベクター(参考)¶
- 「要素数可変の配列」
- リストのように要素追加・削除が比較的低コストで、要素の参照・書き換えも配列のように速い
- 何が問題か:要素の追加が楽なように余計なメモリ領域を確保する
- ハードウェア組み込みプログラムのように、メモリがカツカツの状況では使えない
- 「メモリがカツカツ」という意味が理解できるか?