12/12 データの検索(3)
12/12 データの検索(3)
前回の補足
今回は代理TAで 呉小玢さんが入ります.
標準テキストの修正分に関してアルゴリズム入門 共通資料 (2018年度) で公開されています.
演習室内は飲食禁止です.ペットボトル等を持ち込む場合も,バッグの中にしまってください.ただし,医療目的でののど飴の使用は許可します.
10/24, 31, 11/7, 12/19, 1/9は3限に講義が入っているので,3限終了後に入室してください
前回の感想,質問より
Q.
今日は空調が暑かったので、授業中に学生の意見を聞くなどして調整してもらえると助かります。
A.
情報教育棟の空調は事務室の集中管理なので、電話をすれば調整できたかもしれません。ただ、冷房と暖房は使える期間が限られているケースもあるので、暖房を弱めることはできても,冷房には切り替えることはできないかもしれません.
Q.
mergesortのプログラム
def mergesort(a): #配列aを整列
n = len(a)
if n <= 1: #短いときはそれでよし
return a
else:
l = mergesort(a[0 : n//2])
r = mergesort(a[n//2 : n])
#前半と後半をそれぞれ整列
return merge(l,r)
#整列した結果を併合
で,なぜ、else以下でmergesort()をそれぞれ行うだけで、整列できるのでしょうか。数列が2つあることが必要なはずですが、一つでも整列できるのですか。
A.
「mergesort()をそれぞれ行う」部分は「整列済の配列を2つ作る」部分であり,たしかにそれだけでは整列できません.「整列済の配列2つから整列済の配列を1つ作る」部分が「merge(l, r)」であり,その部分が併合整列法の主要部分になっています.mergeが別の関数で定義されているので,わかりにくかったかもしれません.
Q.
誤差のために、0.07*100が7にならないというのは不便だと感じた。
A.
そうですね.python でもdecimalというモジュール (ライブラリ) を使うと10進小数を決められた桁までは誤差なく表現できます.
IN [1]: import decimal
a = decimal.Decimal('0.07')
b = decimal.Decimal('7')
b - a * 100 == 0.0
OUT[1]: True
ただ,これで誤差なく表現,計算できる数は浮動小数点数と同様に限られていますし,実行速度も速くないので特別な必要がある場合以外は使われません.
Q.
併合整列法はmergesort関数の中にmergesort関数が現れていますから、一種の再帰関数と言えるのでしょうか?
A.
はい。講義で定義したmergesortの関数は再帰関数です。併合整列法は再帰関数で書くことで、自然に書くことができて、効率も良いアルゴリズムの代表的な例となっています。
前回の課題について
ITC-LMSの掲示板12/5の課題,質問 への書き込みは 12/12 11:00現在で 53名が済んでいます.
講義資料
教科書の代わりになる,「標準テキスト」がITC-LMSに登録後に「教材」からダウンロード可能です.他の人への再配布は禁止します.
講義スライドはITC-LMSで「教材」を選択するとPDFファイルをダウンロードできます(講義が進むに連れて追加されます).PDFファイルからプログラムをコピー & ペーストすると動かないことがあります。
講義フォルダの作成
投票システム
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」を使ってログインしてください.
今日の課題
講義中に投票を求められるので,投票システムを使って投票をする.
ITC-LMS の掲示板「12/12の課題,質問」(講義の時間中に閲覧可能になる)に以下のことを書き込む(なるべく講義時間中に,それ以降は試験当日まで受け付け).
スライド中の練習,あるいは標準テキストの第8, 9章の練習問題のどれかを解いて回答する.
あとから別の問題を解いた人は後から付け加えても良い.