Big-O


  • アルゴリズム性能の数学的表現
  • アルゴリズムの性能予測の目的は、実際の実行時間ではなく、ユーザ成長率に基づいてアルゴリズムの性能を予測することである.
  • Big-Oは時間的複雑度、空間的複雑度がある.
  • 時間の複雑さ?


    実行アルゴリズムの演算回数(実行時間ではなく)を数値としてマーク

    じかんふくごうどかんすう


    演算回数をデータ数nと表す関数を時間複雑度関数と呼ぶ

    Big-O記号


    不要な時間的複雑度演算を排除し、時間的複雑度をマークしてデータの増加による処理を簡素化
    最悪の場合、計算時間効率であるため、処理するデータの数が十分多いと仮定します.

    特長

  • 定数アイテムを無視
    データ(n)サイズの影響で定数項を除く.O(2n), O(3n) => n
  • 影響なしを無視
    データ(n)サイズの影響で,最も影響力のある項目を除いては無視された.O(n^2 + n) => O(n^2)
  • O(1)


    入力データのサイズにかかわらず、アルゴリズムは同じ処理時間を必要とします.
    function add(n) {
    	console.log(n + n);
    }
    // n의 크기에 상관없이 연산은 한번만 일어나므로 O(1)

    O(log n)

  • 例)バイナリ検索
  • 処理の半分当たりの処理時間が
  • 減少する.

    O(n)


    入力データサイズに比例するアルゴリズムの処理
    nが10なら10番!
    for (let i = 0; i < n; i++) {
    	console.log(i)
    }
    for (let i = 0; i < n; i++) {
    	console.log(i)
    }
    for (let j = 0; j < n; j++) {
    	console.log(j)
    }

    O(n^2)


    アルゴリズム
  • の初期成長は遅いが,データの増加に伴って処理時間が急激に増加した.
  • 例)冗長
  • for (let i = 0; i < n; i++) {
    	for (let j = 0; j < n; j++) {
        	console.log(i, j);
        }
    }

    空間の複雑さ?

  • メモリ使用量