質問

このコードを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のリストのセマンティクスに注意する必要があります)。

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top