0

サイズ n の配列 A があるとします。その中にいくつかの要素があります。目標は、それらをできるだけ早く印刷することです。印刷順は問いません。

素朴なアルゴリズムは、

print_number (A)
    for(i = 0 to n)
        print A[i]

そして、それは O(n) の時間の複雑さを持ちます

そして、下のものはどうですか?

print_number (A, l, r)
if (l == r)   // terminating condition
    print A[i]
else
    mid = (l+r)/2
    print_number (A, l, mid)
    print_number (A, mid, r)

これは O(n) になります

[編集済み]並列処理を使用する場合は、十分な数のプロセッサを想定してください。

print_number (A, l, r)
if (l == r)   // terminating condition
    print A[i]
else
    mid = (l+r)/2
    spawn print_number (A, l, mid) // assign to a new thread / processor
    print_number (A, mid, r)

O(lgn) でしょうか?またはO(n)?

4

0 に答える 0