最長バイトニック部分列 完全解説 - 正方向+逆方向LIS
上がってから下がる山型の最長部分列を求める「最長バイトニック部分列」を解説します。正方向LISと逆方向LISを合成するO(n²)のDPを可視化で確認しましょう。
アルゴリズムとデータ構造の詳細ガイド
記事 47件
上がってから下がる山型の最長部分列を求める「最長バイトニック部分列」を解説します。正方向LISと逆方向LISを合成するO(n²)のDPを可視化で確認しましょう。
円形に配置されたガスステーションを一周する出発点をO(n)の貪欲法で見つける方法を解説します。差の累積と出発点移動の原理を可視化で確認しましょう。
地域図書館の訪問者データで累積和(prefix sum)を身につけます。累積和配列を事前に作れば、どんな区間[l, r]の和もprefix[r+1] - prefix[l]の引き算一回でO(1)応答できます。全工程はAlgoNoteの可視化で。
(x, y)座標をx昇順、同点ならy昇順でソートする多重キー比較ソートを解説します。比較関数の書き方と動作過程を可視化で確認しましょう。
÷3, ÷2, −1の3操作で整数Xを1にする最小回数をDPで求めます。なぜグリディが間違うのか、dp[i]=1+min(...)の漸化式がどう正解を保証するのかを、魔法カウンターの話と可視化で確認しましょう。
重みなしの路線グラフで出発駅から目的駅までの最小移動(乗り換え)回数をBFSのレベル探索で求める方法を解説します。キューと距離配列の動きをAlgoNoteの可視化で確認しましょう。
長さがバラバラのケーブルを同じ長さに切ってK本以上作る最大の切れ端の長さを、答えに対する二分探索と本数カウントで求めます。AlgoNoteの可視化でステップごとに確認しましょう。
幅2マスの廊下を1×2 / 2×1タイルで埋める場合の数を漸化式 dp[i]=dp[i-1]+dp[i-2] で解く方法を解説します。フィボナッチと同じ構造をアルゴノートの可視化で確認しましょう。
文字列から特定パターンを見つけるたびに除去する問題を、スタックでO(n)に解く方法を解説します。末尾だけを比較する核心アイデアを可視化で確認しましょう。
ソート済み数列で2数の和が目標に最も近いペアを探す問題を、デュエットの音程合わせの物語で解説します。全ペアを比較するO(n²)の代わりに、両端の二点探索でO(n)に終える核心アイデアをつかみましょう。全工程はAlgoNoteの可視化で確認できます。
デザート店の試食コーナー問題でパラメトリックサーチを身につけます。切る位置を直接選ぶ代わりに、刃の高さ(答え)を二分探索する発想を紹介します。全工程はAlgoNoteの可視化で。
双方向連結リストとは何か、単方向連結リストとの違い(逆方向走査・O(1)削除)を解説します。prev/next双方向ポインタを扱う核心アプローチをアルゴノートの可視化で確認しましょう。
「最近使ったアプリを数個だけメモリに残す」というおなじみのルールは、実はLRUキャッシュです。なぜ配列やハッシュマップ単独では足りないのか、そしてなぜハッシュマップ + 双方向連結リストの組み合わせが全動作をO(1)にするのか、その発想をつかみます。全工程はAlgoNoteの可視化で。
値が頻繁に変わる配列で「区間和」を高速に求めるセグメントツリーの核心アイデアをつかみます。なぜ累積和(prefix sum)では足りないのか、なぜ区間をツリーでまとめるのか、その発想を紹介します。全工程はAlgoNoteの可視化で。
[3, 30, 34, 5, 9] をつなげて作れる最大の数は? 数値の大きさ順では間違いです。鍵は「a+b vs b+a」のカスタム比較。なぜこう比べるのか、その approach までつかみます。全工程はAlgoNoteの可視化で。
「今日より暑い日は何日後に来るか?」を単調スタックでO(n)で解く核心アイデアをつかみます。なぜ二重ループ(O(n²))ではなくスタックなのか、その発想を紹介します。全工程はAlgoNoteの可視化で。
プリム法で最小全域木(MST)の核心アイデアをつかみます。1つのノードから出発し、優先度キューで最も安い辺を選んで木を育てる発想と、ダイクストラとの違いを紹介します。全工程はAlgoNoteの可視化で確認しましょう。
腕相撲大会で一部の試合結果のみが分かるとき、順位が確定する選手が何人かを求める問題で、フロイド-ワーシャルの新しい使い方を学びます。最短距離の代わりに「勝敗到達関係」を埋める発想を紹介します。全工程はAlgoNoteの可視化で。
オープン直後のカフェに客が一斉に来たとき、どの注文から作れば全員の待ち時間の合計が最小になる? ソート1行で終わる貪欲法の直感をつかみます。全工程はAlgoNoteの可視化で。
挿入ソートはなぜ遅くなることがある? シェルソートは離れた要素から整理する「間隔(gap)」の発想でその弱点を補います。なぜgapを使うのか、その approach までつかみます。全工程はAlgoNoteの可視化で。
高速道路の充電器配置問題で、パラメトリックサーチの核心アイデアをつかみます。位置を直接選ぶ代わりに、答え(最小距離)を二分探索する発想を紹介します。全工程はAlgoNoteの可視化で。
クイックソートの核心である分割(partition)の過程と、平均O(n log n)・最悪O(n²)になる理由を解説します。ピボット選択とその場整列の原理を可視化でステップごとに確認しましょう。
マージソートが配列を半分に分けて整列し、2つの整列済み部分を統合する原理と、常にO(n log n)を保証し安定ソートである理由を解説します。統合過程を可視化で確認しましょう。
KMPが失敗関数(部分一致テーブル)で既に比較した情報を再利用し、テキストポインタを戻さずO(n+m)でパターンを見つける原理を解説します。単純検索との違いを可視化で確認しましょう。
ヒープが完全二分木を配列で表現し、最小(または最大)をO(log n)で挿入・削除する原理を解説します。sift-up/downと優先度付きキューの活用を可視化で確認しましょう。
キューがFIFO(先入先出)で動く原理と、enqueue・dequeueをO(1)で処理する循環キュー実装を解説します。スタックとの違い、BFSの活用を可視化で確認しましょう。
Nクイーン問題を1行ずつ安全な列に置き、行き詰まると戻るバックトラッキングで解く原理と、列・対角線の使用で枝刈りする方法を解説します。戻る過程を可視化で確認しましょう。
ハッシュテーブルがハッシュ関数でキーをインデックスに変換し平均O(1)で保存・検索する原理と、衝突をチェイニング・開番地法で処理する方法を解説します。負荷率と再ハッシュを可視化で確認しましょう。
ユニオンファインドが要素のグループ(集合)を管理し、union・findをほぼO(1)で処理する原理を解説します。経路圧縮とランク統合の最適化を可視化で確認しましょう。
LISが数列で増加し続ける最長部分列の長さを求める問題であることを整理し、O(n²)のDPと二分探索ベースのO(n log n)解法(tails配列)を解説します。両者の違いを可視化で確認しましょう。
0/1ナップサック問題をdp[i][w]状態と入れる/入れない漸化式でO(nW)に解く原理を解説します。1次元配列最適化とよくあるミスを可視化で確認しましょう。
LCSが2つの列で順序を保った最長の共通部分列をdp[i][j]漸化式でO(mn)に見つける原理を解説します。部分文字列との違いと逆追跡復元を可視化で確認しましょう。
コイン交換でグリーディが失敗する理由と、dp[a]=金額aの最小コイン数の漸化式でO(金額×コイン数)に解く原理を解説します。到達不可の扱いとよくあるミスを可視化で確認しましょう。
スライディングウィンドウが連続区間を1つずつ滑らせ、入る値を足し出る値を引いて区間和・最大をO(n)で保つ原理を解説します。固定/可変ウィンドウの違いを可視化で確認しましょう。
尺取り法が整列配列で2つのインデックスを動かし、2数の和などをO(n)で解く原理と、単調性により答えを逃さない理由を解説します。可視化で確認しましょう。
エラトステネスの篩が素数の倍数を消しながらN以下の全素数をO(N log log N)で見つける原理を解説します。なぜp²から消すのか、√Nで止める理由を可視化で確認しましょう。
トポロジカルソートが有向グラフ(DAG)で全ての辺u→vについてuがvより前に来るよう頂点を並べる原理と、入次数を使うKahnアルゴリズムを解説します。サイクル検出を可視化で確認しましょう。
DFSが一方向に深く進み、行き詰まると戻る(バックトラッキング)グラフ走査の原理と、スタック・再帰での実装、BFSとの違いを解説します。訪問印の重要性を可視化で確認しましょう。
二分木の前順・中順・後順が「いつルートを訪れるか」の違いであること、中順がBSTで昇順になる理由、レベル順(BFS)を解説します。可視化で確認しましょう。
ユークリッドの互除法がgcd(a,b)=gcd(b, a mod b)で最大公約数をO(log)で求める原理となぜ成り立つか、そしてGCDからLCMを求める方法を解説します。剰余で縮む過程を可視化で確認しましょう。
ヒープソートが配列を最大ヒープにしてからルート(最大値)を末尾へ取り出して整列する原理を解説します。heapifyと常にO(n log n)・その場整列である理由を可視化で確認しましょう。
バブルソートからカウンティングソートまで、7つの主要ソートアルゴリズムの原理と時間計算量を比較します。各アルゴリズムを可視化で体験しましょう。
二分探索の原理、実装方法、時間計算量を解説します。ソート済み配列からO(log n)で値を見つける必須アルゴリズムを可視化で確認しましょう。
BFS(幅優先探索)の動作原理、キューを用いた実装、DFSとの違いを解説します。最短経路探索の基本となるグラフアルゴリズムを可視化で学びましょう。
ダイクストラ法の動作原理、優先度キューを用いた実装、時間計算量を解説します。重み付きグラフで最短経路を求める核心アルゴリズムを可視化で確認しましょう。
動的計画法(DP)の核心概念をフィボナッチ数列で簡単に理解します。メモ化とタビュレーションの違い、時間計算量の改善過程を可視化で確認しましょう。
スタックデータ構造の概念、LIFO原理、主要操作、コーディングテスト活用法を解説します。括弧検査、後置記法、ブラウザの戻るボタンなど実践例を可視化で確認しましょう。