ブログ

アルゴリズムとデータ構造の詳細ガイド

記事 47件

動的計画法

最長バイトニック部分列 完全解説 - 正方向+逆方向LIS

上がってから下がる山型の最長部分列を求める「最長バイトニック部分列」を解説します。正方向LISと逆方向LISを合成するO(n²)のDPを可視化で確認しましょう。

バイトニックLIS動的計画法コーディングテストAlgoNote
グリーディ

円形ガスステーション問題、貪欲法で一周する出発点を見つける - AlgoNote

円形に配置されたガスステーションを一周する出発点をO(n)の貪欲法で見つける方法を解説します。差の累積と出発点移動の原理を可視化で確認しましょう。

貪欲法累積和循環配列コーディングテストAlgoNote
累積和

累積和で区間和クエリをO(1)応答 - AlgoNote

地域図書館の訪問者データで累積和(prefix sum)を身につけます。累積和配列を事前に作れば、どんな区間[l, r]の和もprefix[r+1] - prefix[l]の引き算一回でO(1)応答できます。全工程はAlgoNoteの可視化で。

累積和区間和前処理コーディングテストAlgoNote
ソート

座標の多重キーソート完全解説 - 仕組みと実装

(x, y)座標をx昇順、同点ならy昇順でソートする多重キー比較ソートを解説します。比較関数の書き方と動作過程を可視化で確認しましょう。

多重キーソート座標ソート比較ソートアルゴリズムAlgoNote
動的計画法

整数を1にする - 最小操作DP完全解説(魔法カウンター)

÷3, ÷2, −1の3操作で整数Xを1にする最小回数をDPで求めます。なぜグリディが間違うのか、dp[i]=1+min(...)の漸化式がどう正解を保証するのかを、魔法カウンターの話と可視化で確認しましょう。

DP動的計画法最小操作コーディングテストAlgoNote
グラフ

最小乗り換えルート探索 - BFS最短移動の完全解説(AlgoNote)

重みなしの路線グラフで出発駅から目的駅までの最小移動(乗り換え)回数をBFSのレベル探索で求める方法を解説します。キューと距離配列の動きをAlgoNoteの可視化で確認しましょう。

BFSグラフ最短経路最小移動AlgoNote
探索

ケーブル切断 - パラメトリック二分探索の完全解説 | AlgoNote

長さがバラバラのケーブルを同じ長さに切ってK本以上作る最大の切れ端の長さを、答えに対する二分探索と本数カウントで求めます。AlgoNoteの可視化でステップごとに確認しましょう。

パラメトリック探索二分探索ケーブル切断コーディングテストAlgoNote
動的計画法

2×nタイリングの漸化式を完全理解 - アルゴノート

幅2マスの廊下を1×2 / 2×1タイルで埋める場合の数を漸化式 dp[i]=dp[i-1]+dp[i-2] で解く方法を解説します。フィボナッチと同じ構造をアルゴノートの可視化で確認しましょう。

タイリング動的計画法DP漸化式AlgoNote
データ構造

爆弾文字列の除去 - スタックでパターンを弾く - AlgoNote

文字列から特定パターンを見つけるたびに除去する問題を、スタックでO(n)に解く方法を解説します。末尾だけを比較する核心アイデアを可視化で確認しましょう。

スタック文字列シミュレーションコーディングテストAlgoNote
尺取り法

目標に最も近い2数の和 - 二点探索でO(n)に解く方法 - AlgoNote

ソート済み数列で2数の和が目標に最も近いペアを探す問題を、デュエットの音程合わせの物語で解説します。全ペアを比較するO(n²)の代わりに、両端の二点探索でO(n)に終える核心アイデアをつかみましょう。全工程はAlgoNoteの可視化で確認できます。

ツーポインタソート2数の和コーディングテストAlgoNote
探索

ケーキカット - 「答えを二分探索」するパラメトリックサーチ - AlgoNote

デザート店の試食コーナー問題でパラメトリックサーチを身につけます。切る位置を直接選ぶ代わりに、刃の高さ(答え)を二分探索する発想を紹介します。全工程はAlgoNoteの可視化で。

パラメトリックサーチ二分探索決定問題コーディングテストAlgoNote
データ構造

双方向連結リストをわかりやすく解説 - アルゴノート

双方向連結リストとは何か、単方向連結リストとの違い(逆方向走査・O(1)削除)を解説します。prev/next双方向ポインタを扱う核心アプローチをアルゴノートの可視化で確認しましょう。

双方向連結リスト連結リストデータ構造ポインタAlgoNote
データ構造

スマホアプリ管理者 - 最近N個だけ残すLRUの核心発想 - AlgoNote

「最近使ったアプリを数個だけメモリに残す」というおなじみのルールは、実はLRUキャッシュです。なぜ配列やハッシュマップ単独では足りないのか、そしてなぜハッシュマップ + 双方向連結リストの組み合わせが全動作をO(1)にするのか、その発想をつかみます。全工程はAlgoNoteの可視化で。

LRUキャッシュハッシュマップ双方向リストデータ構造コーディングテストAlgoNote
データ構造

セグメントツリー - 区間和クエリも更新もO(log n)で - AlgoNote

値が頻繁に変わる配列で「区間和」を高速に求めるセグメントツリーの核心アイデアをつかみます。なぜ累積和(prefix sum)では足りないのか、なぜ区間をツリーでまとめるのか、その発想を紹介します。全工程はAlgoNoteの可視化で。

セグメントツリー区間和データ構造ツリーコーディングテストAlgoNote
ソート

最大の数を作る - 数字断片をつなげるカスタム比較ソート - AlgoNote

[3, 30, 34, 5, 9] をつなげて作れる最大の数は? 数値の大きさ順では間違いです。鍵は「a+b vs b+a」のカスタム比較。なぜこう比べるのか、その approach までつかみます。全工程はAlgoNoteの可視化で。

最大の数ソートカスタム比較文字列コーディングテストAlgoNote
データ構造

次の暑い日アラート - 単調スタックでO(n)で解く方法 - AlgoNote

「今日より暑い日は何日後に来るか?」を単調スタックでO(n)で解く核心アイデアをつかみます。なぜ二重ループ(O(n²))ではなくスタックなのか、その発想を紹介します。全工程はAlgoNoteの可視化で。

単調スタックスタックデータ構造コーディングテストAlgoNote
グラフ

プリム法 - 優先度キューで「辺」を選んで育てる最小全域木入門 - AlgoNote

プリム法で最小全域木(MST)の核心アイデアをつかみます。1つのノードから出発し、優先度キューで最も安い辺を選んで木を育てる発想と、ダイクストラとの違いを紹介します。全工程はAlgoNoteの可視化で確認しましょう。

プリム最小全域木MSTグラフ優先度キューAlgoNote
グラフ

トーナメント順位決定 - 一部の試合結果で順位を確定するフロイド-ワーシャル応用 - AlgoNote

腕相撲大会で一部の試合結果のみが分かるとき、順位が確定する選手が何人かを求める問題で、フロイド-ワーシャルの新しい使い方を学びます。最短距離の代わりに「勝敗到達関係」を埋める発想を紹介します。全工程はAlgoNoteの可視化で。

フロイド-ワーシャルグラフ推移閉包到達性コーディングテストAlgoNote
グリーディ

カフェ注文処理 - なぜ短い注文から作ると総待ち時間が最小? - AlgoNote

オープン直後のカフェに客が一斉に来たとき、どの注文から作れば全員の待ち時間の合計が最小になる? ソート1行で終わる貪欲法の直感をつかみます。全工程はAlgoNoteの可視化で。

貪欲法ソート累積和コーディングテストAlgoNote
ソート

シェルソート - 挿入ソートに「間隔(gap)」を加えて速くする入門 - AlgoNote

挿入ソートはなぜ遅くなることがある? シェルソートは離れた要素から整理する「間隔(gap)」の発想でその弱点を補います。なぜgapを使うのか、その approach までつかみます。全工程はAlgoNoteの可視化で。

シェルソートソート挿入ソートコーディングテストAlgoNote
探索

EV充電器の配置 - 「答えを二分探索」するパラメトリックサーチ入門 - AlgoNote

高速道路の充電器配置問題で、パラメトリックサーチの核心アイデアをつかみます。位置を直接選ぶ代わりに、答え(最小距離)を二分探索する発想を紹介します。全工程はAlgoNoteの可視化で。

パラメトリックサーチ二分探索貪欲法コーディングテストAlgoNote
ソート

クイックソート、ピボットで分割しながらその場で整列する - AlgoNote

クイックソートの核心である分割(partition)の過程と、平均O(n log n)・最悪O(n²)になる理由を解説します。ピボット選択とその場整列の原理を可視化でステップごとに確認しましょう。

ソート分割統治クイックソートコーディングテストAlgoNote
ソート

マージソート、半分に分けて整列し統合する分割統治 - AlgoNote

マージソートが配列を半分に分けて整列し、2つの整列済み部分を統合する原理と、常にO(n log n)を保証し安定ソートである理由を解説します。統合過程を可視化で確認しましょう。

ソート分割統治マージソート安定ソートAlgoNote
文字列

KMP文字列検索、失敗関数でO(n+m)にパターンを見つける - AlgoNote

KMPが失敗関数(部分一致テーブル)で既に比較した情報を再利用し、テキストポインタを戻さずO(n+m)でパターンを見つける原理を解説します。単純検索との違いを可視化で確認しましょう。

文字列KMPパターンマッチング失敗関数AlgoNote
データ構造

ヒープ(Heap)、最小・最大をO(log n)で取り出す優先度付きキュー - AlgoNote

ヒープが完全二分木を配列で表現し、最小(または最大)をO(log n)で挿入・削除する原理を解説します。sift-up/downと優先度付きキューの活用を可視化で確認しましょう。

データ構造ヒープ優先度付きキュー二分木AlgoNote
データ構造

キュー(Queue)、先に入ったものが先に出るFIFO構造 - AlgoNote

キューがFIFO(先入先出)で動く原理と、enqueue・dequeueをO(1)で処理する循環キュー実装を解説します。スタックとの違い、BFSの活用を可視化で確認しましょう。

データ構造キューFIFO循環キューAlgoNote
バックトラッキング

Nクイーン問題、バックトラッキングで互いに攻撃しない配置 - AlgoNote

Nクイーン問題を1行ずつ安全な列に置き、行き詰まると戻るバックトラッキングで解く原理と、列・対角線の使用で枝刈りする方法を解説します。戻る過程を可視化で確認しましょう。

バックトラッキングNクイーン枝刈り再帰AlgoNote
データ構造

ハッシュテーブル、平均O(1)で保存・検索する原理と衝突処理 - AlgoNote

ハッシュテーブルがハッシュ関数でキーをインデックスに変換し平均O(1)で保存・検索する原理と、衝突をチェイニング・開番地法で処理する方法を解説します。負荷率と再ハッシュを可視化で確認しましょう。

データ構造ハッシュハッシュテーブル衝突処理AlgoNote
データ構造

ユニオンファインド(Union-Find)、グループを統合し同じ集合か問う - AlgoNote

ユニオンファインドが要素のグループ(集合)を管理し、union・findをほぼO(1)で処理する原理を解説します。経路圧縮とランク統合の最適化を可視化で確認しましょう。

データ構造ユニオンファインド素集合グラフAlgoNote
動的計画法

最長増加部分列(LIS)、O(n log n)で長さを求める - AlgoNote

LISが数列で増加し続ける最長部分列の長さを求める問題であることを整理し、O(n²)のDPと二分探索ベースのO(n log n)解法(tails配列)を解説します。両者の違いを可視化で確認しましょう。

DP動的計画法LIS二分探索AlgoNote
動的計画法

0/1ナップサック問題、入れる・入れないをDPで解く - AlgoNote

0/1ナップサック問題をdp[i][w]状態と入れる/入れない漸化式でO(nW)に解く原理を解説します。1次元配列最適化とよくあるミスを可視化で確認しましょう。

DP動的計画法ナップサック最適化AlgoNote
動的計画法

最長共通部分列(LCS)、2つの列の共通順序をDPで見つける - AlgoNote

LCSが2つの列で順序を保った最長の共通部分列をdp[i][j]漸化式でO(mn)に見つける原理を解説します。部分文字列との違いと逆追跡復元を可視化で確認しましょう。

DP動的計画法LCS文字列AlgoNote
動的計画法

コイン交換問題、最小コイン枚数をDPで求める - AlgoNote

コイン交換でグリーディが失敗する理由と、dp[a]=金額aの最小コイン数の漸化式でO(金額×コイン数)に解く原理を解説します。到達不可の扱いとよくあるミスを可視化で確認しましょう。

DP動的計画法コイン交換最適化AlgoNote
尺取り法

スライディングウィンドウ、区間を滑らせO(n)で区間値を保つ - AlgoNote

スライディングウィンドウが連続区間を1つずつ滑らせ、入る値を足し出る値を引いて区間和・最大をO(n)で保つ原理を解説します。固定/可変ウィンドウの違いを可視化で確認しましょう。

尺取り法スライディングウィンドウ区間和コーディングテストAlgoNote
尺取り法

尺取り法(2ポインタ)、整列配列をO(n)で走査する技法 - AlgoNote

尺取り法が整列配列で2つのインデックスを動かし、2数の和などをO(n)で解く原理と、単調性により答えを逃さない理由を解説します。可視化で確認しましょう。

尺取り法ソート2数の和コーディングテストAlgoNote
数学

エラトステネスの篩、N以下の素数を一度に見つける - AlgoNote

エラトステネスの篩が素数の倍数を消しながらN以下の全素数をO(N log log N)で見つける原理を解説します。なぜp²から消すのか、√Nで止める理由を可視化で確認しましょう。

数学素数エラトステネスの篩整数論AlgoNote
グラフ

トポロジカルソート、依存関係のある作業を順序立てる - AlgoNote

トポロジカルソートが有向グラフ(DAG)で全ての辺u→vについてuがvより前に来るよう頂点を並べる原理と、入次数を使うKahnアルゴリズムを解説します。サイクル検出を可視化で確認しましょう。

グラフトポロジカルソートDAG入次数AlgoNote
グラフ

深さ優先探索(DFS)、行けるところまで進んで戻る走査 - AlgoNote

DFSが一方向に深く進み、行き詰まると戻る(バックトラッキング)グラフ走査の原理と、スタック・再帰での実装、BFSとの違いを解説します。訪問印の重要性を可視化で確認しましょう。

グラフDFS深さ優先探索バックトラッキングAlgoNote
木構造

二分木の走査、前順・中順・後順・レベル順を一望 - AlgoNote

二分木の前順・中順・後順が「いつルートを訪れるか」の違いであること、中順がBSTで昇順になる理由、レベル順(BFS)を解説します。可視化で確認しましょう。

木構造走査前順中順後順二分木AlgoNote
数学

最大公約数とユークリッドの互除法、LCMまでO(log)で求める - AlgoNote

ユークリッドの互除法がgcd(a,b)=gcd(b, a mod b)で最大公約数をO(log)で求める原理となぜ成り立つか、そしてGCDからLCMを求める方法を解説します。剰余で縮む過程を可視化で確認しましょう。

数学最大公約数ユークリッドの互除法整数論AlgoNote
ソート

ヒープソート、最大ヒープで最大値を一つずつ取り出す - AlgoNote

ヒープソートが配列を最大ヒープにしてからルート(最大値)を末尾へ取り出して整列する原理を解説します。heapifyと常にO(n log n)・その場整列である理由を可視化で確認しましょう。

ソートヒープヒープソート優先度付きキューAlgoNote
ソート

ソートアルゴリズム完全ガイド - 7つの必須ソート比較

バブルソートからカウンティングソートまで、7つの主要ソートアルゴリズムの原理と時間計算量を比較します。各アルゴリズムを可視化で体験しましょう。

ソートアルゴリズム時間計算量コーディングテスト
探索

二分探索アルゴリズム完全解説 - 仕組みと実装ガイド

二分探索の原理、実装方法、時間計算量を解説します。ソート済み配列からO(log n)で値を見つける必須アルゴリズムを可視化で確認しましょう。

二分探索アルゴリズムコーディングテストO(log n)AlgoNote
グラフ

BFS(幅優先探索)アルゴリズムをわかりやすく解説

BFS(幅優先探索)の動作原理、キューを用いた実装、DFSとの違いを解説します。最短経路探索の基本となるグラフアルゴリズムを可視化で学びましょう。

BFS幅優先探索グラフ最短経路AlgoNote
グラフ

ダイクストラ法をわかりやすく解説 - 最短経路アルゴリズム

ダイクストラ法の動作原理、優先度キューを用いた実装、時間計算量を解説します。重み付きグラフで最短経路を求める核心アルゴリズムを可視化で確認しましょう。

ダイクストラ最短経路グラフ優先度キューAlgoNote
動的計画法

フィボナッチ数列で学ぶ動的計画法(DP)入門

動的計画法(DP)の核心概念をフィボナッチ数列で簡単に理解します。メモ化とタビュレーションの違い、時間計算量の改善過程を可視化で確認しましょう。

動的計画法DPフィボナッチメモ化AlgoNote
データ構造

スタック(Stack)データ構造完全解説 - 操作・活用・面接対策

スタックデータ構造の概念、LIFO原理、主要操作、コーディングテスト活用法を解説します。括弧検査、後置記法、ブラウザの戻るボタンなど実践例を可視化で確認しましょう。

スタックデータ構造LIFOコーディングテストAlgoNote
ブログ | アルゴリズム学習ガイド | AlgoNote