[表示 : 全て 最新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
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん mailto:sage [04/06/03 23:18]
どこにもない強固なスレにしたい

596 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:58:49 ]
シミュ板があるだろ?

597 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 01:08:53 ]
char[H][W] の行列を高速に転置させるアルゴリズムって無いかな。
float や double とかなら数学ライブラリであるんだけど、char だと
for(int y = 0; y < H; ++y)
for(int x = 0; x < W; ++x)
dst[x][y] = *(++src);
とか順番に入れていく方法しか思いつかない。

598 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 10:56:20 ]
dst[x][y] でアクセスしてた所を dst[y][x] でアクセスするようにすればいい。


599 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 11:35:28 ]
>>597
それって、アルゴリズムはいいとして、
*(++src) って src をインクリメントしたものを参照してるよね?
分かってるんならいいけど。

600 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 20:37:32 ]
*dst++ = *src++;
で一つのイディオムとして覚えてる。

601 名前:デフォルトの名無しさん [2010/08/12(木) 15:25:03 ]
上げ


602 名前:デフォルトの名無しさん mailto:sage [2010/09/03(金) 12:10:05 ]
数値計算の分野なんですが、c^(1/2/n)を求めるアルゴリズムはどういうのがあるのでしょうか。
いわゆるcの累乗根 c^(1/2n)(但しnは2の倍数)です。
ニュートン法で愚直に求める以外だと、power法ぐらいしか思い浮かびませんでした。
cは実数を考えてますが複素数のアルゴリズムでも構いません。

603 名前:デフォルトの名無しさん mailto:sage [2010/09/03(金) 19:01:09 ]
> c^(1/2n)(但しnは2の倍数)

つまりc^(1/m)(但しmは4の倍数)か。

604 名前:デフォルトの名無しさん mailto:sage [2010/09/03(金) 19:54:28 ]
こんな過疎スレで聞いたのが間違いだったようだな



605 名前:デフォルトの名無しさん mailto:sage [2010/09/03(金) 20:13:01 ]
m9

606 名前:デフォルトの名無しさん mailto:sage [2010/09/04(土) 08:19:34 ]
ニュートン法でいいんじゃないの?

607 名前:デフォルトの名無しさん mailto:sage [2010/09/04(土) 09:46:55 ]
>>602
2の倍数ではなくて c^(1/n)で n=2^kのまちがいでした。
つまり c^(1/2), c^(1/4), c^(1/8), c^(1/16)ですがこれは実装できました。
c^(1/6)などこの方法では別のアルゴリズムに切替えることになるので2の倍数は私が勘違いしてたようです。
もともとニュートン法は代数方程式の求根(しかも根は実数)で累乗根 c^(1/n)を求めるのに特化した算法ではありません。
実際に使うcは複素数なのでニュートン法以外で累乗根を求めるアルゴリズムを所望します。

608 名前:デフォルトの名無しさん mailto:sage [2010/09/04(土) 10:41:18 ]
ja.wikipedia.org/wiki/%E5%86%AA%E6%A0%B9

609 名前:デフォルトの名無しさん mailto:sage [2010/09/25(土) 18:32:00 ]
Introduction to algorithmsにあるamortized analysisがどんな訳になるのかと思って
「アルゴリズムイントロダクション」を見たら、ならし解析(だったっけ)と書いてあった。

amortizeってそんな意味があるの?

610 名前:デフォルトの名無しさん mailto:sage [2010/09/26(日) 18:43:11 ]
>>609
英辞郎引け馬鹿者が

611 名前:デフォルトの名無しさん mailto:sage [2010/09/26(日) 19:19:32 ]
英辞郎にはならし・分割の意味が出ていた。ありがとう。goo辞書で最初見ていたのだが、その様な意味が見当たらなかったのでね。


612 名前:デフォルトの名無しさん [2010/10/28(木) 20:47:40 ]
最大N文字で最大M個の文字列を1〜Mにマッピングするようなハッシュ関数を作りたいんですが
そんな都合のイイアルゴリズムって有りますか?

613 名前:デフォルトの名無しさん mailto:sage [2010/10/28(木) 20:54:26 ]
完全ハッシュ

614 名前:デフォルトの名無しさん [2010/10/29(金) 18:29:54 ]
問題投下/~

4つの相異なる3桁の整数があり、百の位は全て等しい
このうち3つの数は4つの数の和の約数になっている
このような4つの数の組を求めよ

(開智中2009入試問題)

1から8までの8つの数字を並べて、8桁の数を作る。その数の各位に、アイウエオカキクと名前をつける。
2桁の数「アイ」は2で割り切れ、3桁の数「アイウ」は3で割り切れる。
4桁の数「アイウエ」は4で割り切れ、5桁の数「アイウエオ」は5で割り切れる。
6桁の数「アイウエオカ」は6で割り切れ、7桁の数「アイウエオカキ」は7で割り切れ, 8桁の数「アイウエオカキク」は8で割り切れる。

8桁の数を答えよ。



615 名前:デフォルトの名無しさん mailto:sage [2010/10/30(土) 14:39:19 ]
>>614
def check(n, a, b, c, d)
a = 100 * n + a
b = 100 * n + b
c = 100 * n + c
d = 100 * n + d
sum = a + b + c + d
count = 0
count += 1 if sum % a == 0
count += 1 if sum % b == 0
count += 1 if sum % c == 0
count += 1 if sum % d == 0
return count == 3
end
(1..9).each {|n|
(0..99).each {|a|
(0..99).each {|b| next if b == a
(0..99).each {|c| next if c == a || c == b
(0..99).each {|d| next if d == a || d == b || d == c
print a, " ", b, " ", c, " ", d, " \n" if check(n, a, b, c, d)
}
}
}
}
}

すんげー遅い。アルゴリズムとはよべないw

616 名前:デフォルトの名無しさん mailto:sage [2010/10/30(土) 14:44:17 ]
rubyに実用的な「速度」を求めてはいけない。

617 名前:デフォルトの名無しさん [2010/10/30(土) 21:22:16 ]
>>615

codepad.org/CxbENTUj

618 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 01:11:19 ]
>>614
中学入試でそんな難しい問題が出るのかよw

619 名前:デフォルトの名無しさん [2010/10/31(日) 05:04:08 ]
>>617
下手なコードだなあ

620 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 05:38:32 ]
>>615
総当りしなくても求められそうだけど
codepad.org/U6V8vTuL

621 名前:620 mailto:sage [2010/10/31(日) 05:39:28 ]
>>617のアンカー参考にしたらずれてたorz
>>614だったか

622 名前:デフォルトの名無しさん [2010/10/31(日) 05:56:15 ]
>>620
うまいな

codepad.org/VofqW1k0

623 名前:デフォルトの名無しさん [2010/10/31(日) 07:29:41 ]
>>622
下手なコードだなあ

624 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 10:54:56 ]
>>614
ideone.com/v5yBW
こんなもんかな。



625 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 10:56:14 ]
>>616
同じ書き方なら、Cとかでやっても3秒くらいかかるね。
早くしたければ、動的計画法的なアルゴリズム使わなきゃダメだけど、ものすごい面倒。

626 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 11:44:22 ]
>>624
大げさすぎて吹いたw

>>617
ああ、やっぱそうやって b = a + 1方式で減らせるのか。

>>625
まぁほんとは、そういう何らかの気の利いたのを求めてるんだろうけど。

627 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 13:04:53 ]
>>624 に追加で: ideone.com/pWegj

>>626
問題文をそのまま書いたらそうなった。
問題文を手続きに翻訳とかしたくない。

628 名前:デフォルトの名無しさん [2010/10/31(日) 18:06:14 ]
カスばっか

629 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 18:26:08 ]
↑カスがまた一人

630 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 22:38:09 ]
>>614 後半
2桁の数「アイ」は2で割り切れ → イ = 2, 4, 6, 8
4桁の数「アイウエ」は4で割り切れ → エ = 2, 4, 6, 8
5桁の数「アイウエオ」は5で割り切れる → オ = 5
6桁の数「アイウエオカ」は6で割り切れ → カ = 2, 4, 6, 8
8桁の数「アイウエオカキク」は8で割り切れる → ク = 2, 4, 6, 8
イエカク で 2, 4, 6, 8 を使うから、アウキ は 1, 3, 7 (5 は オ)

ということで、こんなもんかな → codepad.org/OTEAlb7U

631 名前:デフォルトの名無しさん [2010/10/31(日) 22:40:13 ]
下手なコードだなあ

632 名前:デフォルトの名無しさん mailto:sage [2010/11/01(月) 13:30:12 ]
>>631みたいなレスにお手本が添えられたのを一度も見たことが無い。

633 名前:デフォルトの名無しさん mailto:sage [2010/11/01(月) 18:58:48 ]
NP問題のようなものだって、研究室の先輩が言ってた。

コードがへたくそか否かを示すことは多項式時間でできるが、
上手なコードを書くことはできない。

634 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 05:28:27 ]
アルゴリズムがエレガントかどうかを判定するアルゴリズムが存在したら、
エレガントなアルゴリズムを吐き続けるアルゴリズムが書けるぞ。



635 名前:620 ◆mNdSWHMiXkWr mailto:sage [2010/11/02(火) 06:36:30 ]
>>614
3つの数の選び方ってどの組み合わせでも成立しないとダメ?
codepad.org/D8bessOz

636 名前:デフォルトの名無しさん [2010/11/02(火) 06:48:52 ]
で結局どのやり方が美しいの?

637 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 17:06:30 ]
美しいかどうかを判定するアルゴr(ry

638 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 17:37:43 ]
>>634
それ、チャイティンがパラドックス指摘してただろ

639 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 20:06:47 ]
>>634
そうなるとまずエレガントなアルゴリズムの定義が必要になる

640 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 20:10:03 ]

/ ̄ ̄ ̄ ̄ ̄\
| ・ U      |
| |ι        |つ
U||  ̄ ̄ ||

ぼくエレガント


641 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 20:53:32 ]
福井県か

642 名前:デフォルトの名無しさん [2010/11/02(火) 20:57:16 ]
elegante void func(void);

643 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 05:38:31 ]
>>639
> エレガントなアルゴリズムの定義
「同機能のプログラムの中で、最小ビットのプログラム」.

しかしそれは、ベリーのパラドックスと同じように、容易に矛盾をきたす。

644 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 13:17:30 ]
説明の必要がないアルゴリズムは美しい、という観点もあるな
要求仕様とアルゴリズムがあまりにも乖離してると
保守性が悪くて難儀する



645 名前:デフォルトの名無しさん [2010/11/03(水) 16:18:50 ]
2^nの下3桁が888になるnを5つあげろ

下k桁で考える場合は?

646 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 16:20:35 ]
それエレファントや!

∧_∧∩))
( ・∀・)彡   パーン!
  ((⊂彡☆∩  _, ,_
   ⊂(⌒⌒(;`Д´)
      `ヽ_つ ⊂ノ ←>>640

647 名前:デフォルトの名無しさん [2010/11/03(水) 16:25:47 ]
僕のお兄さん、西暦wxyz年の生まれです。
1997年、僕のお兄さんの年齢は、w+x+y+zになりました。
僕のお兄さんは何歳になったでしょう?

648 名前:デフォルトの名無しさん [2010/11/03(水) 16:30:33 ]
a^4+b^4+c^4+d^4=e^4が成り立つような整数a,b,c,d,eの組を見いだせ

これはいける?

649 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 16:34:43 ]
1997 - 9*4 = 1961
w = 1, x = 9
1997 - (1+9+9+9) = 1969
1997 - (1+9+0+0) = 1987
よって、y = 7,8,9
1997 - (1900 + 10y + z) = 10 + y + z
2z = 87 - 11y ≧ 0
y = 7, z = 5

1975年生まれ。1997年で、22歳。



650 名前:デフォルトの名無しさん [2010/11/03(水) 16:36:51 ]
半径1の円に内接する正9角形がある。
この正9角形の周上にすべての頂点を持つ正多角形の
辺数n を5つ求めよ。
さらに各n に対し、そのような正n 角形の例を1つあげて1辺の長さを求めよ。

651 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 16:42:24 ]
(0..9).each {|w|
(0..9).each {|x|
(0..9).each {|y|
(0..9).each {|z|
print(w, x, y, z, " ", (w + x + y + z), "\n") if 1997 - (1000 * w + 100 * x + 10 * y + z) == w + x + y + z
}
}
}
}

652 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 16:55:37 ]
>>650
n = 3 の時、一辺の長さ無数にないか。

653 名前:デフォルトの名無しさん [2010/11/03(水) 17:00:09 ]
>>652
辺の長さについては一例でいいのでしょうね

654 名前:デフォルトの名無しさん [2010/11/03(水) 17:13:20 ]
よっこらせっくす



655 名前:デフォルトの名無しさん [2010/11/03(水) 17:23:20 ]
誤爆ごめんねー

656 名前:デフォルトの名無しさん [2010/11/09(火) 02:41:51 ]
特定の比率でランダムな値を返すアルゴリズムってないかな
例えば、3:2:2:1の比率でfunc[0],func[1],func[2],func[3]をランダムに取得したい
さらに言うと比率も項数も動的に変化する


657 名前:デフォルトの名無しさん mailto:sage [2010/11/09(火) 02:58:55 ]
r = 乱数 % (3+2+2+1)
if r < 3 then i = 0
else if r < 5 then i = 1
else if r < 7 then i = 2
else i = 3
func[i]
じゃダメ?

658 名前:デフォルトの名無しさん mailto:sage [2010/11/09(火) 03:39:41 ]
だめ

659 名前:デフォルトの名無しさん mailto:sage [2010/11/09(火) 05:27:55 ]
struct R{int fq[4];};
void init(R*x){int ad[]={3,2,2,1}; x->fq[0]=ad[0],x->fq[1]=ad[1],x->fq[2]=ad[2],x->fq[3]=ad[3];}
int rnd(R*x){
int r; if(x->fq[0]+x->fq[1]+x->fq[2]+x->fq[3]<=0)init(x);
do{r=rand()*4;}while(x->fq[r]<=0); x->fq[r]--; return r;}

R seed; init(&seed);
func[rnd(&seed)];

660 名前:デフォルトの名無しさん mailto:sage [2010/11/09(火) 10:15:32 ]
比率に合わせた境界値を持つ配列作ってそれで判定するってのは?

661 名前:デフォルトの名無しさん mailto:sage [2010/11/09(火) 10:26:11 ]
a = [] + ([func[0]] * 3) + ([func[1]] * 2) + ([func[2]] * 2) + ([func[3]] * 1)
f = a[乱数 % (3+2+2+1)]
f()

662 名前:デフォルトの名無しさん mailto:sage [2010/11/09(火) 17:58:11 ]
int a[]={3,2,2,1},x,y;
do{x=r()%size(a);y=r()%max(a);}while(a[x]<=y);
f[x]();

663 名前:デフォルトの名無しさん mailto:sage [2010/11/12(金) 23:27:03 ]
GAで、遺伝子プールの中から引っ張ってくるときにやってなかったっけ


664 名前:デフォルトの名無しさん mailto:sage [2010/11/19(金) 21:40:09 ]
純粋なヒープの使い道って、順序付きキューしか無い?



665 名前:デフォルトの名無しさん [2010/12/01(水) 15:36:00 ]
最小完全ハッシュの作り方がわかりません
ハッシュ関数のパラメーターをループでまわしながら見つかるまで耐えるんですか?

666 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 18:10:58 ]
>>664
純粋なヒープとヒープソートってどこが違うの?

667 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 18:57:15 ]
ヒープはデータ構造。
ヒープソートはヒープを使った整列アルゴリズム。

668 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 19:23:19 ]
>>665
gperfとか実装があるんだから、おそらくたいていの場合は実用になるような
アルゴリズムはあるんだろうと思われる。

669 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 09:48:22 ]
どんなビット列を与えても必ず幾らかは圧縮される圧縮アルゴリズムって有りますか?

670 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 09:56:27 ]
ない

671 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 09:57:29 ]
シャノン限界超えろと?

672 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 17:19:19 ]
数学的に考えたら、そんなものがありえないことはすぐにわかると思うよ。

673 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 20:58:33 ]
完全にランダムなビット列は圧縮不能A

674 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 21:13:43 ]
圧縮したものをまた圧縮して・・・最後は全部なくなっちゃいそうだなw



675 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 21:37:45 ]
別の所にデーターベースを居て、そのインデックス値が圧縮したデータ。
データーベースのレコードが少ないなら、INT数値で表現可能。

676 名前:デフォルトの名無しさん [2010/12/10(金) 21:47:24 ]
それではINTより小さいビット列が圧縮できない
つーか1ビットのデータを圧縮することが出来ないから完全に圧縮できるアルゴリズムは存在しない

677 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 21:48:19 ]
アルゴリズム(算術・算法)という感じではないな

678 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 21:56:15 ]
>>675
URL短縮サービスなんかがまさにそれだよね。

679 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 22:06:51 ]
質問者は情報理論入門の教科書を買って嫁!

680 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 22:14:21 ]
命題論理式を線形時間でCNFにする方法はありますが,
DNFにする方法はないでしょうか?

あったら,命題論理式の充足可能性が線形時間で解ける,ということはないのかな?

681 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 23:05:29 ]
>>675
それって辞書方じゃない?

682 名前:デフォルトの名無しさん mailto:sage [2010/12/10(金) 23:22:09 ]
どちらかと云えばハッシュ出しの方かな

683 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 02:25:07 ]
>>675のような回答を期待していたとしたら>>669は質問の仕方がまずい

684 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 04:57:47 ]
つ[THcomp]



685 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 12:36:54 ]
THCompは1ビットだけしか違わないような
ファイルを作りまくったら、
あっという間に限界数に達するでしょ

110a000f Winodws10_Ult.iso
これ解凍してみて

686 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 19:09:59 ]
範囲を扱うのに適したデータ構造ってありますか
こんな感じ

和集合
 [1-4]と[2-5]を混ぜると[1-5]
 [1-2,5-6,8-10]と[3-4,11-13]を混ぜると[1-6,8-10,11-13]
差集合
 [1-10]から[3-4]を削除して[1-2,5-10]
検索
 [1-10,20-30]から15を探す

わりと利用価値はあると思うんですが
こういうのってないですかね?

687 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 19:30:23 ]
集合を扱うデータ構造を使って、扱う要素を自然数に特化して、
"[1-6,8-10,11-13]" みたいな出力をおこなうメソッドを追加する、とかする。私なら。

要素の数が何万とかになるんだったら考え直すけどね。

688 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 19:41:03 ]
範囲の中に空乏の範囲をリストで持つだけじゃん
struct X{int max,min;struct r{int MAX,MIN;,struct r*next;}*hole;};

689 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 19:43:44 ]
>>686
昔、十年位前に同じような発想で同じようなもの作ったことあるわ。
はっきり思い出せないけど。

690 名前:デフォルトの名無しさん [2010/12/11(土) 20:01:36 ]
変貌じゃなくて必然

691 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 20:37:19 ]
>>686
> わりと利用価値はあると思うんですが

具体的に、どういうシーンでどういう利用方法(需要)があるの?
いくつか挙げてみて

アルゴリズムとデータ構造というのは、
なにか問題を解決するために生まれるものだからね
その解決したい問題が具体的に無ければ、たいてい話は発展せず、
あやふやなまますぐに消えるよ

問題が具体的にあって、それがみんなの興味を惹けば、
データ構造から、それを使ったアルゴリズム、
計算量の話まで発展する場合もある

692 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 20:49:01 ]
>>691
自分が使おうと思ってるのは、繰り返し要素付のカレンダーの実装です
探索や追加削除の速度よりも、和集合/差集合が早いデータ構造だと嬉しいです

オレオレ実装なら自分でも多分作れますが
よく知られたデータ構造は無いんですかね?

コンテナの要素をRange<T>型にして
T型の大小の比較関数と、精度関数があれば
ジェネリックに出来ると思うんですよ
(比較関数だけだと
 1-3と3-4はくっつけられるが
 1-2と3-4はくっつけられない)

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) とすればいい。

694 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 22:30:42 ]
詳しく書いて頂いてありがとうございます
A,Bがソート済ならCもソート済になると思うので、
実質和集合を取る操作はO(A+B)=O(N)かな?
ソートは先端の昇順、終端の降順にして
<2>の追加時にある程度処理しておけば計算量的には同じだけど少しだけ速く出来そうです
和集合O(N),探索O(N),追加O(N)ですね

ちょっと実装してみます



695 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 22:37:01 ]
否定的な意見もあるが、私はこの範囲集合の問題は十分汎用性があると思う。
アルゴリズムとしてはそれほど難しいものにはならないだろうし、それほど深い議論には
発展しないだろうが、ジェネリックで実装された使いやすいクラスにでもまとまれば、
使用する機会もあるだろう。



696 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 23:05:39 ]
Range<T>クラスは自分もよく作る。
ただそれ以上の汎用的な物は作ったことがないな。
使うケースもそうないし。






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

前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