KMCの競技プログラミング練習会Advanced第3回を担当いたしました。 去年Normalでフローを行わなかったので, 基本からやっていきます.
しばらく忙しくて,更新が途絶えてしまいました. 少なくとも今年度中は,2週間に1回更新を続けていきたいです. 本題. 競技プログラミングで,ダイクストラアルゴリズムを実装する機会があったので,ソースコードを載せておきます. ダイクストラアルゴリズムとは? ダイクストラアルゴリズム(ダイクストラ法)とは,重み付きグラフの探索アルゴリズムの一種で,すべての辺の重みが非負なグラフの単一始点最短経路問題を解くためのアルゴリズムです. グラフの始点が与えられた時,そこから他の(すべての)頂点までの最短経路と,そこまでの重みの和(最短距離)を求めることができます. ダイクストラ法 - Wikipedia ナイーブなダイクストラアルゴリズムはO(|V|^2)ですが,プライオリティキュー(優先度付きキュー)と呼ばれるデータ構造を用いることで,O(|E|log|V|)程度で最短経路を求められます. 優先度つ
動的計画法とメモ化再帰 今回は、非常によく用いられるアルゴリズムである、「動的計画法」「メモ化再帰」について説明します。この2つはセットで覚えて、両方使えるようにしておくと便利です。 なお、メモ化再帰に関しては、第5・6回の連載の知識を踏まえた上で読んでいただけると、理解が深まります。まだお読みになっていない方は、この機会にぜひご覧ください。 中学受験などを経験された方であれば、こういった問題を一度は解いたことがあるのではないでしょうか。小学校の知識までで解こうとすれば、少し時間は掛かるかもしれませんが、それでもこれが解けないという方は少ないだろうと思います。 この問題をプログラムで解こうとすると、さまざまな解法が存在します。解き方によって計算時間や有効範囲が大きく変化しますので、それぞれのパターンについて考えます。 以下の説明では、縦h、横wとして表記し、プログラムの実行時間に関しては、
n × n のマス目のそれぞれに 1 または 0 が記してあり、その中から 1 だけから成る最大の長方形の面積を求めて下さい。 これは前に考えた正方形探索の応用で、今回は最大の長方形を探します。この問題も正方形探索で用いたアルゴリズムを応用して動的計画法で解くことができますが、正方形探索ほど単純な式では解決できません。左上角から右下角に向かって個々の要素を計算していく過程で、既に計算された左と上の要素を利用していきますが、長方形探索の場合、W[i][j] の値はそこから左上方向に向かってできる正方形の辺の長さではなく、そこから左上方向に向かってできる全ての長方形の情報を記録する必要があります。このアルゴリズムの詳しい解説が、プログラム・プロムナードに掲載されています。このアルゴリズムは、現在の要素を求めるために重複を避けながら左と上の要素をマージしたりと、プログラムがやや複雑になります。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く