zatsu na benkyou matome saito

勉強したことをまとめるだけのサイト、数学、プログラミング、機械学習とか

データ構造とアルゴリズム:Big O Notation (Big O 記法)

スクリーンショット 2020-11-24 21.24.17.png (253.0 kB)

アルゴリズムの処理速度を可視化したもの。

O(log(n))

# O(log(n))
def func2(n):
    if n <= 1:
        return
    else:
        print(n)
        func2(n/2)
func2(10)

10
5.0
2.5
1.25

O(n)

# O(n)

def func3(numbers):
    for num in numbers:
        print(num)
        
func3(range(1,10))

1
2
3
4
5
6
7
8
9

O(n * log(n))

# O(n * log(n))
def func4(n):
    for i in range(int(n)):
        print(i, end=' ')
    print()

    if n <= 1:
        return
    func4(n/2)

func4(10)

0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 
0 1 
0 

O(n**2)

for文を2回回すと2乗になる

# O(n**2)
# for文を2回回すと2乗になる
def func5(numbers):
    for i in range(len(numbers)):
        for j in range(len(numbers)):
            print(numbers[i], numbers[j])
        print()

func5([1,2,3,4,5])

1 1
1 2
1 3
1 4
1 5

2 1
2 2
2 3
2 4
2 5

3 1
3 2
3 3
3 4
3 5

4 1
4 2
4 3
4 4
4 5

5 1
5 2
5 3
5 4
5 5