<背景解説>
b, m, d (ゴールの深さ)と3つのアルゴリズム
<3つの探索を比較するための作業を考えよう>
0 : 0
1: 1 ~ b
2: b+1 ~ b+b**2
3: b+b**2+1 ~ b+b**2+b**3
4: b+b**2+b***3+1 ~ b+b**2+b***3+b****4
1.1 一度に、いくつも調べたい
#!/bin/sh
./node 2 4 4
./node 4 4 4
./node 6 4 4
./node 8 4 4
./node 10 4 4
一番最初の#! の部分を、シェバンという。その行から下を、/bin/shというプログラムで動かせ、と読みます。shは、一番小さなシェルのこと。
./mt-search 2 3 4 0 -> [0] -> NULL -> [2] -> [1] -> NULL -> [6] -> [5] -> [1] -> NULL -> [14] -> [13] -> [5] -> [1] -> NULL -> [13] -> [5] -> [1] -> NULL -> [5] -> [1] -> NULL -> [12] -> [11] -> [1] -> NULL -> [11] -> [1] -> NULL -> [1] -> NULL -> [4] -> [3] -> NULL Path 2 : -> [4] -> [1] -> [0] .
この結果を何とかできないだろうか (IDSの場合は、出力が異なる。./mt-search 2 3 4 2も試そう)
時間計算量 : ループ数。最後のPathの行を除く行数をカウントできれば:
空間計算量 : 対象の行の[ ] の数を数えて、最大値を求められれば:
ヒント: count.py というPythonのプログラムを作ろう。下は、一行読んでは、プリントするだけのプログラム
import fileinput for line in fileinput.input(): print(line) 実行: mt-searchの出力を python count.py へ、| でつなげば [tsuchiya@www1 c]$ ./mt-search 2 3 4 0 | python count.py -> [0] -> NULL -> [2] -> [1] -> NULL -> [6] -> [5] -> [1] -> NULL -> [14] -> [13] -> [5] -> [1] -> NULL -> [13] -> [5] -> [1] -> NULL -> [5] -> [1] -> NULL -> [12] -> [11] -> [1] -> NULL -> [11] -> [1] -> NULL -> [1] -> NULL -> [4] -> [3] -> NULL Path 2 : -> [4] -> [1] -> [0] . さらにヒント: 正規表現を使おう。import re。 各行をどうすればよいだろう。ぜひ、自作してみてほしい。 完成したら実行例: [tsuchiya@www1 c]$ ./mt-search 2 3 4 0 | python count.py 10 4 count.pyのプログラム例は、一番下にあります。
#!/bin/sh echo -n $1 $2 $3 $4 ./mt-search $1 $2 $3 $4 | python count.py
#!/bin/sh ./sample.sh 2 4 15 0 ./sample.sh 4 4 85 0 ./sample.sh 6 4 259 0 ./sample.sh 8 4 585 0 ./sample.sh 10 4 1111 0
2 4 4 4 4 4 6 4 4 8 4 4 10 4 4 b0, b1, b2 (b、つまり、枝の数の効果。dが木の一番深いところなので、各探索の最悪のゴール(最後に見つけるゴール)にあたる) 2 2 2 2 4 2 2 6 2 2 8 2 2 10 2 m0, m1, m2 (m、つまり、木の深さの効果。dは浅いところ2が指定されている) 2 10 2 2 10 4 2 10 6 2 10 8 2 10 10 d0, d1, d2 (d、ゴールの深さ。各dの最悪のノードの場合を計測しよう。最初は浅いところ、最後は葉にあたる)
コメントをはずして実行してみると、よい。 import fileinput import re lines = 0; nodes = 0; for line in fileinput.input(): if(re.match("->", line) or re.search("Open",line)): line = line.split("->") # print(line,end=" : ") elm = len(line) - 2 # print(elm, end="\n") lines += 1 if(elm > nodes): nodes = elm print(lines,nodes)