時間、空間の複雑さとBig O
1879 ワード
時間と空間の複雑さを分析する重要性アルゴリズムの効率を向上させ、最少の資源を使って、最高の効率 を達成する.正しいデータ構造とアルゴリズムを選択する .
Big Oユーザは、アルゴリズムの時間と空間の複雑さを記述し、最悪の場合を指す を指す.は、入力長Nを与え、特に最悪の場合、アルゴリズムが費やす時間と空間上限 を指す.は、アルゴリズムと入力サイズの関係を説明する .
空間複雑度アルゴリズムに必要なメモリサイズと入力Nの関係 は、nサイズの1次元配列を構築するために、メモリはO(n)であり、2次元配列はO(n 2) である必要がある.
Big O計算方法除去定数 .非主要因子を除去する .例: O(N+8)=O(N)O(N 2+N)=O(N 2)
例題
フィボナッチ数
フィボナッチの数は、通常F(n)で表され、形成されたシーケンスをフィボナッチの数列と呼ぶ.この数列は0と1から始まります.後ろの各数字は前の2つの数字の合計です.つまり、
F(0)=0、F(1)=1 F(N)=F(N−1)+F(N−2)であり、N>1はNを与え、F(N)を計算する.時間の複雑さが、ツリーノードの個数に再帰されると、時間複雑度上限O(20+21+22++++2 n−1)=O(2 n−1)が、再帰式にM再帰的コールがある場合、時間複雑度はO(Mn) である.空間複雑度O(n)*各レイヤの動作占有空間 検索テキストの挿入位置
順序配列と目標値を指定し、配列内で目標値を見つけ、インデックスを返します.ターゲット値が配列に存在しない場合は、順序で挿入される位置を返します.
配列に重複要素がないと仮定できます.
例1:時間の複雑度の2分の数の時間複雑さは、2の何乗がNに等しいかに依存し、時間複雑度O である.
一般的なアルゴリズムの時間複雑度低から高:O(1)、O(logN)、O(NlogN)、O(N 2)(E:辺、V:ノード) アルゴリズム
時間の複雑さ
空間複雑度
深さ優先巡回
O(124)E 124+124 V 124)
O(124 V 124)
広さ優先巡回
O(124)E 124+124 V 124)
O(124 V 124)
クイックソート
O(N 2)
O(N)
並べ替え
O(NlogN)
O(N)
泡の並べ替え
O(N 2)
O(1)
並べ替えの挿入
O(N 2)
O(1)
Big O
空間複雑度
Big O計算方法
例題
フィボナッチ数
フィボナッチの数は、通常F(n)で表され、形成されたシーケンスをフィボナッチの数列と呼ぶ.この数列は0と1から始まります.後ろの各数字は前の2つの数字の合計です.つまり、
F(0)=0、F(1)=1 F(N)=F(N−1)+F(N−2)であり、N>1はNを与え、F(N)を計算する.
func fib(N int) int {
if N <= 0 {
return 0
}
if N == 1 {
return 1
}
return fib(N-1)+fib(N-2)
}
順序配列と目標値を指定し、配列内で目標値を見つけ、インデックスを返します.ターゲット値が配列に存在しない場合は、順序で挿入される位置を返します.
配列に重複要素がないと仮定できます.
例1:
: [1,3,5,6], 5
: 2
解法-二分法を利用する:func searchInsert(nums []int, target int) int {
if len(nums) == 0{
return 0
}
start := 0
high := len(nums)-1
for start <= high {
mid := (start+high)/2
num := nums[mid]
if target == num{
return mid
}else if(target > num) {
start = mid + 1
} else {
high = mid-1
}
}
return start
}
一般的なアルゴリズムの時間複雑度
時間の複雑さ
空間複雑度
深さ優先巡回
O(124)E 124+124 V 124)
O(124 V 124)
広さ優先巡回
O(124)E 124+124 V 124)
O(124 V 124)
クイックソート
O(N 2)
O(N)
並べ替え
O(NlogN)
O(N)
泡の並べ替え
O(N 2)
O(1)
並べ替えの挿入
O(N 2)
O(1)