ダイクストラ法は、グラフ上で単一の始点から他のすべての頂点までの最短経路を求めるアルゴリズムです。 Pythonで実装する際には、優先度付きキュー(通常はheapqモジュール)を使用して効率的に最短経路を探索します。 まず、各頂点の距離を無
続きを読む »クラスカル法は、グラフの最小全域木(MST)を求めるための貪欲法の一種です。 Pythonでクラスカル法を実装する際の手順は以下の通りです。 まず、グラフのすべての辺を重みの昇順にソートします。 次に、Union-Find(またはDisjo
続きを読む »クラスカル・ウォリス検定は、3つ以上の独立したサンプル群の中央値を比較するためのノンパラメトリック検定です。 Pythonでは、scipy.statsモジュールのkruskal関数を使用して実装できます。 この関数は、各サンプル群を引数とし
続きを読む »クイックソートは、分割統治法に基づく効率的なソートアルゴリズムです。 Pythonでクイックソートを実装するには、まず基準となる「ピボット」を選び、リストをピボットより小さい要素と大きい要素に分割します。 その後、再帰的にそれぞれの部分リス
続きを読む »トポロジカルソートは、有向非巡回グラフ(DAG: Directed Acyclic Graph)の頂点を、各辺の方向に従って並べる手法です。 DAGはサイクルを持たないため、トポロジカル順序が必ず存在します。 Pythonでは、深さ優先探索
続きを読む »テトロミノの箱詰めパズルをPythonで解くには、バックトラッキングや深さ優先探索(DFS)を用いるのが一般的です。 まず、テトロミノの形状を2Dリストやビットマップで表現し、回転や反転を考慮して全ての配置パターンを生成します。 次に、再帰
続きを読む »ナップザック問題は、重さと価値が異なる複数のアイテムから、重さの制限内で価値の合計が最大となるようにアイテムを選ぶ問題です。 Pythonで解くには、動的計画法(DP)を用いるのが一般的です。 DPテーブルを作成し、各アイテムを選ぶか選ばな
続きを読む »フィボナッチ数列は、各項がその前の2つの項の和で定義される数列です。 Pythonでは再帰関数を使って簡単に計算できます。 基本的な再帰関数の構造は、基底条件として最初の2つの項(0番目と1番目の項)を定義し、それ以降の項は再帰的に計算しま
続きを読む »ヒープソートは、ヒープデータ構造を利用して配列をソートするアルゴリズムです。 まず、配列を最大ヒープに変換し、次に最大要素(ルート)を末尾と交換してヒープサイズを縮小しながら再度ヒープ化を行います。 これを繰り返すことでソートが完了します。
続きを読む »バブルソートは隣接する要素を比較し、必要に応じて交換することでリストをソートするアルゴリズムです。 Pythonでバブルソートを実装するには、まずリストの長さを取得し、外側のループでリスト全体を繰り返し処理します。 内側のループで隣接する要
続きを読む »ハノイの塔の解を再帰関数で求める方法は、次のように考えます。 まず、3本の棒(A, B, C)とn枚の円盤があるとします。 目的は、すべての円盤をAからCに移動することです。 再帰的なアプローチでは、次のステップを繰り返します。 ハノイの塔
続きを読む »ポリトープ法(シンプレックス法)は、線形計画問題を解くためのアルゴリズムです。 Pythonでポリトープ法を実装するには、SciPyライブラリのscipy.optimize.linprog関数を使用するのが一般的です。 この関数は、目的関数
続きを読む »ベルマンフォード法は、重み付き有向グラフにおける単一始点最短経路問題を解くアルゴリズムです。 負の重みを持つ辺が存在する場合でも正しく動作しますが、負の閉路がある場合は検出可能です。 Pythonで実装する際は、各辺を反復して緩和操作を行い
続きを読む »ベータ分布は、確率変数が0から1の範囲にある場合に使用される連続確率分布です。 Pythonでは、scipy.statsモジュールのbetaクラスを使ってベータ分布を計算できます。 beta.pdf(x, a, b)で確率密度関数を計算し、
続きを読む »Pythonでベータ関数を実装するには、mathモジュールやscipyモジュールを使用するのが一般的です。 ベータ関数は、2つの引数 \(x\) と \(y\) に対して次の式で定義されます: \[B(x, y) = \int_0^1 t^
続きを読む »フリードマン検定は、複数の関連するグループ間での差を評価するためのノンパラメトリックな検定です。 Pythonでは、scipy.statsモジュールのfriedmanchisquare関数を使用して実装できます。 この関数は、各グループのデ
続きを読む »マージソートは「分割統治法」に基づくソートアルゴリズムです。 リストを再帰的に半分に分割し、各部分をソートしてからマージ(統合)します。 Pythonでの実装手順は以下の通りです。 マージソートとは マージソートは、効率的なソートアルゴリズ
続きを読む »ライフゲームは、セルの生死が隣接するセルの状態に基づいて決まるシミュレーションです。 Pythonで実装するには、まず2次元リストやNumPy配列を使ってグリッドを表現します。 各セルの状態(生: 1、死: 0)を初期化し、次に各セルの隣接
続きを読む »完全順列(derangement)は、元のリストの要素が一つも元の位置にない順列です。 Pythonで完全順列をランダムに生成するには、random.shuffle()を使ってランダムな順列を作成し、各要素が元の位置にないかを確認する必要が
続きを読む »