ヒープの深さと各深さにおける要素数から和を求めるプログラムの時間計算量
今回書いたプログラムの計算量をヒープを構成する要素数len(a)
=n としてオーダで考えると O(log2(n)) という理解でしょうか。
2**x for x in range(num)
もfor j in range (len(depth_list))
も繰り返し回数は log2(n)+1 なので、オーダ記法だと全体として O(log2(n)) に抑えられると考えましたが、計算量を見積もるのにまだ不慣れなため、ご意見を伺いたいです。
該当プログラム
import heapq
import math
a = [6, 3, 2, 4, 5, 7, 1, 8]
heapq.heapify(a)
num = int(math.log2(len(a)))
depth_list = []
for i in range(num+1):
depth_list.append(i)
print('depth_list')
print(depth_list)
element= [2**x for x in range(num)] + [len(a) - (2**num - 1)]
print('element')
print(element)
total = 0
for j in range (len(depth_list)):
total += depth_list[j]*element[j]
print('tolal')
print(total)