!pip install ita -U --userのように「-U」オプション付きでライブラリitaをインストールするコードが書かれていましたが,これを大学の教育用計算機システム上で実行するとおかしくなることがあるようです.現在は,
!pip install ita --userのように「-U」オプションなしのものを配布しています.もう一度Notebookをダウンロードし直して新しいファイルを使ってください.これを実行しようとしても,
AttributeError: '_NamespacePath' object has no attribute 'sort'というエラーが出る時は,ターミナルで
rm -rf ~/.localを一度実行すると回復するようです.
def ex9_1(data, name): start = 0 # i < start の時は data[i] < name end = len(data) # i >= endの時は data[i] >= name に保つ while end != start: center = (start + end) // 2 if name <= data[center]: end = center else: start = center + 1 if start < len(data) and name == data[start]: return start return -1教科書のプログラムではdata[i]が name 以上か,name 未満かが確定しえいない区間を start <= i かつ i < end としていましたが,start < i, i < end として,かわりに終了条件を変更した以下のプログラムもありました.これも意味はほぼ同じです.
def ex9_1(data, name): #二分探索 start = -1 # i < start の時は data[i] < name end = len(data) # i >= endの時は data[i] >= name に保つ while end - start > 1: #普段このように書いているので書き換えました(endとstartが隣接するまで計算) center = (start + end) // 2 if name <= data[center]: end = center else: start = center if end < len(data) and name == data[end]: return end #endが条件を満たす側 return -1以下のように,name と一致する要素をみつけたら,先頭要素を探すのにcenterから前に向かって順に不一致の要素を探すプログラムもありました.これは,多くのケースでは O(log n) の実行時間で動くのですが,たとえば,「すべての要素が'A'である長さnの配列から,'A' の先頭要素を探す」という場合には n/2 の実行時間がかかります.
def ex9_1(data, name): #整列済み配列dataからnameを発見。番号を返す。 start = 0 #左端 end = len(data) #右端 r = -1 while start != end: center = (start + end) // 2 if data[center] == name: while data[center] == data[center-1] and center !=0: center = center - 1 return center #見つけた if name < data[center]: end = center #中央より左にある else: start = center + 1 #中央より右にある return r#見つからなかった
mkdir ~/algo19のようにします.そして,ターミナルを開くたびに
cd ~/algo19 jupyter notebookと入力してJupyter Notebookを動かしてください.詳しくは,はいぱーワークブック「14.4 コマンドを使ったファイル操作」を参照してください.
cd ~/algo19を済ませてから,
python vote.py 選択肢番号のように使います.
Jupyter Notebookを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」の15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.
cd ~/algo19と入力してください.これらの機能を使うと,Jupyter Notebookを抜けずにvoteできます.
ターミナルの基本的な使い方は,はいぱーワークブックの15.2 ターミナルの基本的な使い方を,より高度な使い方は,15.4 ターミナルの便利な使い方を参照してください.
cdというコマンドと「~」の意味は,はいぱーワークブックの14.4 コマンドを使ったファイル操作の14.4.1 ディレクトリを読むと分かります.