タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

AlgorithmとALgorithmとDPに関するagwのブックマーク (47)

  • Efficient data transfer through zero copy

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    Efficient data transfer through zero copy
  • ALGORITHM NOTE 最長増加部分列 Longest Increasing Subsequence

    東西に並んだ高さの異なるnの木があります。あるキコリがこれらの木を、西から東の方向へ木の高さが小さい順に並ぶように、いくつかの木を切り倒すことにしました。木の数を最大にするにはどの木を切れ(残せ)ばようでしょうか? このような単純な(くだらない)問題でも、考えられる組み合わせを全て調べようとすると、それは各木を選ぶか選ばないかの組み合わせになるので、計算量はO(2n)となってしまいます。 この問題は、与えられた数列の最長増加部分列 Longest Increasing Subsequence (LIS) を求めることに帰着します。 最長増加部分列とは、与えられた数列 S S = a1, a2 , , , an の増加部分列 ( すべてのi, j (i < j)について ai < aj を満たす部分列 ) の中で長さが最大のものをいいます。 例えば、 S = 4 1 6 2 8 5 7 3

  • Common Subsequence 解説

    問題名:Common Subsequence (PKU) 出典:Southeastern Europe 2003 難易度:☆☆☆ 問題の種類:DP 解法:LCS (Longest Common Subsequence) 解答ソースコード: 1458-deq.cpp アルゴリズムの概略 DPの四天王(?),LCS (Longest Common Subsequence) そのままの問題です。 アジア地区予選など,通常はこれをひねった問題が出てきます。 LCSとは,二つの値の列(この問題では文字列)が与えられて,最長の共通部分列を見つける問題です。 部分列は連続している必要はありませんが,順序は変更してはいけません。 例えば X = "abcfbc", Y = "abfcab" であればLCSは "abfc" や "abcb" になります。 LCSは一般的に複数ありえますが,この問題ではその長

    Common Subsequence 解説
  • 最長共通部分列問題 (Longest Common Subsequence) - naoyaのはてなダイアリー

    部分列 (Subsequence) は系列のいくつかの要素を取り出してできた系列のことです。二つの系列の共通の部分列を共通部分列 (Common Subsecuence)と言います。共通部分列のうち、もっとも長いものを最長共通部分列 (Longest Common Subsequence, LCS) と言います。 X = <A, B, C, B, D, A, B> Y = <B, D, C, A, B, A> という二つの系列から得られる LCS は <B, C, B, A> で、その長さは 4 です。長さ 2 の<B, D> の長さ 3 の <A, B, A> なども共通部分列ですが、最長ではないのでこれらは LCS ではありません。また、LCS は最長であれば位置はどこでも良いので、この場合 <B, D, A, B> も LCS です。 LCS は動的計画法 (Dynamic Prog

    最長共通部分列問題 (Longest Common Subsequence) - naoyaのはてなダイアリー
  • プログラミングコンテストでの動的計画法

    2. はじめに • 「動的計画法」は英語で 「Dynamic Programming」 と言います. • 略して「DP」とよく呼ばれます. • スライドでも以後使います. 4. ナップサック問題とは? • n 個の品物がある • 品物 i は重さ wi, 価値 vi • 重さの合計が U を超えないように選ぶ – 1 つの品物は 1 つまで • この時の価値の合計の最大値は? 品物 1 品物 2 品物 n 重さ w1 重さ w2 ・・・ 重さ wn 価値 v1 価値 v2 価値 vn 5. ナップサック問題の例 品物 1 品物 2 品物 3 品物 4 U=5 w1 = 2 w2 = 1 w3 = 3 w4 = 2 v1 = 3 v2 = 2 v3 = 4 v4 = 2 品物 1 品物 2 品物 3 品物 4 答え 7 w1 = 2 w2 = 1 w3 = 3 w4 = 2 v1 = 3 v

    プログラミングコンテストでの動的計画法
  • slidefinder.net

  • C++: 編集距離を求めるアルゴリズム

    編集距離(edit distance)とは二つの文字列がどの程度異なっているかを示す数値であり、レーベンシュタイン距離(Levenshtein distance)を指すことが多い。文字の挿入、削除、置換それぞれを一つの操作として必要な操作の最小数を求めるものだ。例えば、kittenとsittingの編集距離を求める場合、下記のように3回の操作でkittenをsittingに変更できるので編集距離は3となる。 1. sitten (k を s に置換) 2. sittin (e を i に置換) 3. sitting (g を挿入) そこで今回は編集距離を求める複数のアルゴリズムについてC++で実装してみた。 動的計画法 編集距離を求めるもっとも一般的なアルゴリズムは、動的計画法(dynamic programming)だろう。計算時間はO(mn)であり、手軽だ。C++で書いたコードを下に示