atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
早稲田大学チームvivid_turtle 知見共有@ ウィキ
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • 早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • DPのメモリ節約方法

早稲田大学チームvivid_turtle 知見共有@ ウィキ

DPのメモリ節約方法

最終更新:2019年08月24日 17:11

vivid_turtle

- view
だれでも歓迎! 編集
動的計画法の問題で、時間計算量は問題ないのに、空間計算量が厳しい、というタイプはある。その時のいくつかの対策法をここに記す。

漸化式で定数個前までしかいらない場合


有名な例としてはフィボナッチ数列(2つ前しか見ない)やナップサック問題(1つ前しか見ない)だろう。

この時、「動的計画法の配列でよくある何個目まで見た」という添え字を消して、うまく配列を再利用すればメモリの次元を一つ落とせる。

特に、1つ前しか見ないタイプは次のテンプレを使うといい。

int dp[2][1000];
auto now = dp[0], nxt = dp[1];
 
for (int i = 1; i < n; i++){
	for(int j = 0; j < 1000; j++){
        //操作例を示す
        if(j - K > 0){
            nxt = min(now[j] + j, now[j - K] + j * j);
        }
    }
    //1つのiに関しての操作を終えたら、nowとnxtを交換することによって、配列の再利用をスマートに書ける。
    swap(now, nxt);
}
 

他の添え字の持つ情報に包含されてるもの


上記のような再利用以外での抜本的な改善法は、落としたい添え字の持つ情報はほかの添え字と同じ、もしくはそれから一定の値に定められるのならば、その添え字は消してよい。
この改善を行うことで、物によっては時間計算量もオーダーがが一つ落ちる場合がある。

具体的な例としては、

dp[i][j][k]で、よく考えたらj == kしかないときは、dp[i][j]として問題ない。

bitdp配列、dp[i][bit]でiは何個目まで見たか、bitがどれを使ったかなどで、iがbitのたってる個数と一致する場合、dp[bit]にして、毎ループごとに自分自身を更新するようにしても問題はない。

EDPC O Matching


https://atcoder.jp/contests/dp/tasks/dp_o

この問題では、少し考えるとbitdp配列
dp[i][bit] := i人目の男までマッチングを終えて、bitのような状態で女が残ってる。
と定めれば時間計算量的に更新が間に合う。しかし、メモリは厳しい。ここで、さきほどの具体例2つ目を考えると、iの添え字は不要。

タグ:

+ タグ編集
  • タグ:
タグの更新に失敗しました
エラーが発生しました。ページを更新してください。
ページを更新
「DPのメモリ節約方法」をウィキ内検索
LINE
シェア
Tweet
早稲田大学チームvivid_turtle 知見共有@ ウィキ
記事メニュー

メニュー

  • トップページ
  • プラグイン紹介
  • メニュー
  • 右メニュー
  • アルゴリズム別知見
  • 個別問題知見



リンク

  • @wiki
  • @wikiご利用ガイド




ここを編集
記事メニュー2

更新履歴

取得中です。


ここを編集
人気記事ランキング
  1. bitsetでの定数倍改善
  2. ダブリングの使い所さん
  3. アルゴリズム別知見
  4. しゃくとりの大原則
  5. 素数modの世界
  6. 中央値と二分探索
もっと見る
最近更新されたページ
  • 1545日前

    bitsetでの定数倍改善
  • 2159日前

    しゃくとりの大原則
  • 2159日前

    アルゴリズム別知見
  • 2162日前

    グリッド上の構築
  • 2163日前

    ARC096-D
  • 2163日前

    ARC092-D
  • 2163日前

    個別問題知見
  • 2167日前

    ダブリングの使い所さん
  • 2173日前

    文字列と動的計画法
  • 2173日前

    数え上げのDPのさまざま(知らなかったこと)
もっと見る
人気記事ランキング
  1. bitsetでの定数倍改善
  2. ダブリングの使い所さん
  3. アルゴリズム別知見
  4. しゃくとりの大原則
  5. 素数modの世界
  6. 中央値と二分探索
もっと見る
最近更新されたページ
  • 1545日前

    bitsetでの定数倍改善
  • 2159日前

    しゃくとりの大原則
  • 2159日前

    アルゴリズム別知見
  • 2162日前

    グリッド上の構築
  • 2163日前

    ARC096-D
  • 2163日前

    ARC092-D
  • 2163日前

    個別問題知見
  • 2167日前

    ダブリングの使い所さん
  • 2173日前

    文字列と動的計画法
  • 2173日前

    数え上げのDPのさまざま(知らなかったこと)
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  2. 発車メロディーwiki
  3. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  4. ジョジョの奇妙な冒険 7人目のスタンド使い攻略wiki
  5. ダイナマイト野球3D
  6. シュガードール情報まとめウィキ
  7. Rainbow Six:Siege WIKI
  8. オバマス検証@wiki
  9. ゆっくり虐め専用Wiki
  10. EDF4.1:地球防衛軍4.1 THE SHADOW OF NEW DESPAIR @Wiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 発車メロディーwiki
  9. オレカバトル アプリ版 @ ウィキ
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. まどドラ攻略wiki
  3. シュガードール情報まとめウィキ
  4. R.E.P.O. 日本語解説Wiki
  5. Dark War Survival攻略
  6. SurrounDead 攻略 (非公式wiki)
  7. ソードランページ @ 非公式wiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. カツドンチャンネル @ Wiki
  10. AviUtl2のWiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. サーバールール - ストグラ まとめ @ウィキ
  3. MOZU - ストグラ まとめ @ウィキ
  4. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  5. わたしが恋人になれるわけないじゃん、ムリムリ!(※ムリじゃなかった!?) - アニヲタWiki(仮)
  6. リリス(Fate) - アニヲタWiki(仮)
  7. 稼ぎ - 地球防衛軍6 @ ウィキ
  8. ミッション攻略 - 地球防衛軍6 @ ウィキ
  9. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  10. マカイーノ アッコパス - ストグラ まとめ @ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.