[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/21 21:00 / Filesize : 241 KB / Number-of Response : 987
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

<集大成>アルゴリズム大辞典



693 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 21:54:30 ]
>>688 の言うように、素直に範囲のリストで考えた方が
和集合/差集合の演算が速くて楽だと思う。

範囲の先端のインデックスと、終端のインデックスの対をリストにして持つ。
[(先端0, 終端0), (先端1, 終端1), (先端2, 終端2), ...]
ただし、終端i < 先端j (i<j) として常に昇順に並べておく。

<和演算>
入力 :
  A [(as0, ae0), (as1, ae1), (as2, ae2), ...]
  B [(bs0, be0), (bs1, be1), (bs2, be2), ...]
  C [空]
結果 :
  C [(cs0, ce0), (cs1, ce1), (cs2, ce2), ...]

計算 :
<1> A と B の全要素を先端インデックスの昇順でひとつのリスト X に並べる
<2> X から先頭要素 (xsi, xei) を切り出して C の後尾要素の後ろに追加する
<3> X の先頭要素 (xsj, xej) を切り出し、C の後尾要素 (csi, cei) と比較する
    if cei < xsj then
          C の後尾要素の後ろに (xsj, xej) を追加する
    else
          (csi, cei) を (min (csi, xsi), max (cej, xej)) に変更する
<4> X の要素が残っていれば <3> へ


X を作りたくなければ、ループの各ステップにおいて A B の先頭要素の
先端インデックスが小さい方を選んで (xsj, xej) とすればいい。






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<241KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef