ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

アルゴリズム

Pythonでいもす法

いもす法とは いもす法(imos法)とは、長さNの1次元配列において、「ある連続する区間に、ある数vを足す」という操作をK回繰り返した結果を、計算量O(N+K)で高速に構築できる方法。 たとえば、「ある連続する区間に、1を足す」という操作を4回したい次の図の…

Pythonでダイクストラ法

編集履歴 (2021/02/21)ダイクストラのプライオリティキューが最短距離の小さい順に取り出されるようになっていなかったので、それを修正 ダイクストラ法とは ダイクストラ法とは、「重み付きグラフにおける単一始点最短路アルゴリズム」 つまり、「始点s か…

Pythonでベルマンフォード法

ベルマンフォード法とは 蟻本によれば、「重み付き有向グラフにおける単一始点最短路アルゴリズム」 つまり、「始点s から各頂点i までの最短コストを求める」アルゴリズムです。 以下の条件で使えます。 DAG(有向グラフで閉路を持たない)である 負のコス…

PythonでUnion-Find木

Union-Find木とは Union-FindまたはDisjoint Setとは、蟻本の言葉を借りると「グループ管理のためのデータ構造」。 ・要素aと要素bが同じグループかどうか ・aが属するグループと、bが属するグループを併合(unite)する ということをしたいときに使います。 U…