アルゴリズムとデータ構造 2023-06-28 ⏱ 約 8 分

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

コーディングクイズを解く日課の再開にあたり、アルゴリズムとデータ構造の基本を総復習した記事。配列や文字列、ハッシュテーブル、連結リスト、木、スタック、キュー、ソート、計算量といった基礎を、コーディング問題を意識して整理する。

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
☕ サポート

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


関連記事