アルゴリズムとデータ構造の基本の復習

「アルゴリズムとデータ構造の基本の復習」のまとめと読書メモ。重要なポイントと実践的な知見を整理します。

Read in: en
アルゴリズムとデータ構造の基本の復習

概要

コーディングクイズを解く日課を再開するに当たって、リハビリを兼ねてアルゴリズムとデータ構造の基本について復習。

配列

時間計算量

操作 計算量
アクセス O(1)
検索 O(n)
検索(ソート済み) O(log(n))
挿入 O(n)
挿入(末尾) O(1)
削除 O(n)
削除(末尾) O(1)

考慮事項

文字列

時間計算量

実装によるので割愛

考慮事項

ハッシュテーブル(ハッシュマップ)

操作 計算量
アクセス N/A
検索 O(1)※
挿入 O(1)※
削除 O(1)※

※平均ケース

考慮事項

再帰

時間計算量

実装によるので割愛

考慮事項

ソートと探索

ソートアルゴリズムの計算量

アルゴリズム 時間計算量 空間計算量
バブルソート O(n^2) O(1)
挿入ソート O(n^2) 0(1)
選択ソート O(n^2) O(1)
クイックソート O(nlog(n)) O(log(n))
マージソート O(nlog(n)) O(n)
ヒープソート O(nlog(n)) O(1)
カウントソート O(n+k) O(k)
基数ソート O(nk) O(n+k)

探索アルゴリズムの計算量

アルゴリズム 計算量
二分探索 O(log(n))

二次元配列

package main

import "fmt"

func main() {
	matrix := [][]int{[]int{0, 1}, []int{2, 3}, []int{4, 5}}
	for i, v := range matrix {
		for j, _ := range v {
			// iがrowでjがcolumn
			matrix[i][j] = 0
		}
	}
	fmt.Println(matrix)
}

考慮事項

連結リスト

時間計算量

操作 計算量
アクセス O(n)
検索 O(n)
挿入 O(1)
削除 O(1)

キュー

時間計算量

操作 計算量
エンキュー O(1)
デキュー O(1)

スタック

時間計算量

操作 計算量
プッシュ O(1)
ポップ O(1)

グラフ

計算量

Vは頂点、Eはエッジの数とする。

アルゴリズム 計算量
深さ優先検索 O(V+E)
幅優先検索 O(V+E)
トポロジカルソート O(V+E)

ヒープ

時間計算量

操作 計算量
挿入 O(log(n))
削除 O(log(n))

トライ

時間計算量

mは文字列の長さとする。

操作 計算量
検索 O(m)
挿入 O(m)
削除 O(m)

参考

その他

データ構造とアルゴリズムの勉強に当たって参考にした記事。

Tags: アルゴリズム データ構造
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事