分割ごとのアルゴリズムの実行時間を計算します
-
16-10-2019 - |
質問
このコードをPythonで書きます:
def sub(ma):
n = len(ma); m = len(ma[0])
if n != m : return
n2 = int(ceil(n/2))
a = []; b = []; c = []; d = []
for i in range(n2):
a.append(ma[i][0:n2])
b.append(ma[i][n2:n])
c.append(ma[n2+i][0:n2])
d.append(ma[n2+i][n2:n])
return [a,b,c,d]
def sum(ma):
if len(ma) == 1 : return ma[0][0]
div = sub(ma)
return sum(div[0])+sum(div[1])+sum(div[2])+sum(div[3])
「sum」メソッドに対する再発式$ t(n)$とは何かを知っていますか?私はそれが$$ t(n)= 4t(n/2) + f(n)$$ $ f(n)$とは?ありがとう、
解決
サブルーチン サブ マトリックスを4つの部分に分類します。これには時間がかかります$ f(n)$、したがっての実行時間 和 (これは、divide and-Conquerのように、入力四角のマトリックスのすべてのエントリを好奇心beding盛な分割整理方法で要約します)再発$$ t(n)= begin {cases} o(1)&n = 1 2t( lfloor nを満たします。 /2 rfloor) + 2t( lceil n/2 rceil) + f(n) + o(1)&n> 1。 end {case} $$サブルーチン サブ 非常にシンプルで、自分で実行時間を把握できると確信しています(ただし、PythonでAppendingのリストのセマンティクスに注意する必要があります)。
所属していません cs.stackexchange