計算アルゴリズム【U ..
236:デフォルトの名無しさん
05/12/18 03:23:45
当時ハ送リ仮名ガ片仮名デアッタタメ
外来語ヲ片仮名ニ割リ当テルトイウ
発想ハ無カッタンダロウナ
237:デフォルトの名無しさん
05/12/18 04:08:19
質問なのですが、例えば、
1、2、3、4、5、40、50、60、70 といった代表値である数字があるとします。
で、例えばXがその代表値のどれに一番近いかを求めるとき
すべてを探索すれば答えはわかると思いますが、できるだけ高速に
求めたいと考えたとき、代表地を木にすればいいのではと私は考えました、
例えばXが6だとするとまず、5が一番近いことがわかります
これをどうやって木にしたらいいのかがわかりません。
また1,2、3・・・・といっていましたが
(X,Y,Z)と三次元に増えた場合、一番近い点を見つけるにはどうしたらいいのでしょう?
一致するのを探すのではなく一番近いものを探すので苦労しています。
近さの判定としてはユークリッド距離を用います。
どうぞよろしくお願いいたします
238:デフォルトの名無しさん
05/12/18 04:13:08
代表値の数列が整列されている前提ならバイナリサーチでいいのでは?
239:デフォルトの名無しさん
05/12/18 04:32:56
>>238
ありがとうございます。
バイナリサーチですと完全に一致する場合は問題ありませんが
完全に一致せず一番近いものを選択するときに問題がおきます
237の例で6に一番近いものをバイナリサーチで探そうとすると
40になると思われます
240:デフォルトの名無しさん
05/12/18 04:46:58
バイナリサーチで最終的に 40 がヒットするわけだけど、
この 40 と X を比較することによって 5 < X < 40 という関係はすぐにわかる。
あとはどちらに近いかを計算するだけじゃないのかな。
241:デフォルトの名無しさん
05/12/18 04:54:28
>239
最終段でヒットしなかった時、left/rightどちらの方が近いかチェックしろ。
n次の場合は、a=f(X,Y,...)で、aの値でソート。
242:デフォルトの名無しさん
05/12/18 05:01:13
>>240
>>241
ありがとうございます。
n次の場合はうまくいかないように感じるのですが
できれば具体例を出していただけないでしょうか?
241さんのを自分なりに解釈すると、まずはXについてどれが一番近いか
しらべて次はY、Z・・・というふうなことだと感じているのですが
例えばXがかなり近くてもZ,Yがかなり遠いと総合的な距離は遠いわけで
Xが多少遠くてもY,Zが近ければ総合的な距離は近くなるので
あまりうまくいかなようなきがします。
間違っていたらすみません
243:241
05/12/18 05:37:33
>242
スマソ、完全に寝ぼけてた。
1次以上の距離で探したいのなら、総当りで検索するしかないんじゃね?
244:デフォルトの名無しさん
05/12/18 05:40:16
>>243
ありがとうございます。
総当りですか・・・それですと時間がかかるので
何かいい方法がないかなと思いまして
245:デフォルトの名無しさん
05/12/18 07:16:28
>>241
2次元(平面)ならボロノイ図・近傍で似たような問題がある
3次元以上だとできるかどうか知らない
総当りにしたら
246:245
05/12/18 07:17:31
>>245 の >>241 は >>237 の間違いです スマソ
247:デフォルトの名無しさん
05/12/18 07:55:24
>>245
ありがとうございます。
ボロノイ図については知っていまして、三次元でも可能のようです。
ですが、これをどう木にすればいいのかよくわからなかったもので
何かいい方法があればと思って相談してみました、。
248:デフォルトの名無しさん
05/12/18 09:03:12
>>237
空間データベースって分野のお話だね.
望んだ形でデータを持ってていいなら,k-d tree を使うのが手軽かな.
空間に一点が追加されるたびに,その一点を通る超平面を引き,その超平面のどちら側に
点があるかで二分木を作る.探索は木を手繰りながら範囲を絞り込んで,
その中で全探索をする.最悪 O(n) だけど,適当にばらけてれば O(log n).
ほかにも SR-tree とか SS-tree とか色々あるので,参考になりそうなのを挙げとく:
URLリンク(www.kecl.ntt.co.jp)
URLリンク(vision.unige.ch)
H. Samet, The Design and Analysis of Spatial Data Structures, Addison-Wesley
249:デフォルトの名無しさん
05/12/18 10:00:28
>>248
ありがとうございます
望んだ形でデータを持っていても大丈夫です。
K−d tree についてなのですが、これでは一番近い代表値に近似することはできないと
考えられます。
例えば
URLリンク(www.kecl.ntt.co.jp)
のk−d tree のところの図で説明しますと
代表地がPと考えると、P4とP5の線の中に点があるのですがP9に
一番近い点(一番近い代表地に近似したい点)があったとすると
これはP4かP5に近似されることになります。
実際はP9に一番近いのにこれには近似されないとおいうことです
木を作る際にP7からでなくP6からはじめたとしても同様の問題はおきると考えられます
しかしR−treeというのは使えそうな気がします
ちょっと読んでみますがいかんせん説明が少ないので理解できるかわかりませんが
なんとかがんばってみます
ありがとうございました
250:デフォルトの名無しさん
05/12/18 10:04:36
URLリンク(www.kecl.ntt.co.jp)
のR−treeを読んでみましたがこれでも正確に一番近い代表地に
近似されないように感じます。
うーんどうしよう
251:デフォルトの名無しさん
05/12/18 10:05:18
一番近い点は一回では求まらないだろう。
求めた点までの距離を半径とした点で総当りをその後ですればいいだろう。
たとえば2次元なら x 座標がその範囲にある条件、次にy座標がその範囲にあるという条件で絞りこんで
矩形で絞り込めばいいでしょ
252:デフォルトの名無しさん
05/12/18 10:07:59
あと、この問題は、最悪の場合は、全数検索が必要になる。
たとえば円周上に点が並んでいて、中心に近似しようとした場合など
253:デフォルトの名無しさん
05/12/18 10:17:52
>>251
>>252
ありがとうございます。
自分の中で何か新しいアイデアが浮かんできそうな気がします
が、もう少し具体的にお願いできませんか。何かわかりそうな木がするんです
どうかおねがいします
254:デフォルトの名無しさん
05/12/18 10:25:28
データ構造として、各母点に、母点を中心に、一番遠いボロノイ点までの距離半径の円内にある
母点までのリンクを距離順に並べて持たせておいて
最初に検索した母点までの距離内にあるリンクだけ全検索する
検索する過程で、それより近い点を見つけたら、母点を移して同じ事をする
255:デフォルトの名無しさん
05/12/18 10:35:34
>>254
ありがとうございます
私の理解力不足のためわからなかったです すいませんが
もう少し簡単な説明をしていただけないでしょうか どうかお願いします
256:248
05/12/18 10:53:05
>>249
二つ目に挙げたテクニカルレポートも読んでね.ちゃんとそっちに作った木から kNN を絞り込む方法について
コメントが入ってるから.参考文献にもそれっぽいのが沢山あるので子引き,孫引きしましょう.
257:デフォルトの名無しさん
05/12/19 09:08:38
長いですが、NP完全について質問です。
アルゴリズムの本に
「図のどれがP、NP、NP完全(NPCと呼びます)のクラスについての私たちの知識と矛盾しているか?
"=Which of the diagrams do not contradict the current state of our knowledge
about the complexity classes P, NP, and NPC (NP-complete problems)"」
という質問があってヒントに
「これらのうちの二つのみが現在の私たちの知識と矛盾している
"=Just two of them do not contradict the current state of our knowledge about the complexity classes."」とあります。
「私たちの知識」とはその本に載っている
「もしP≠NPなら、PでもNP完全でもないNP問題があるはずだ
"=It is known that if P≠NP, there must exist NP problems that neither are in P nor are NP-complete."」
っぽいです。
図は五つあって、そのうち
aはP=NP=NPCで、bはNPCがP=NPの部分集合になっており、dはPとNPCが重なった形でNPの部分集合になっており、
これらは明らかに矛盾しているので除外です。
eは↓のサイトにも載っている一般的に知られているベン図ですから矛盾していません。
URLリンク(www.jyi.org)
で問題のcなんですが、これは↑のサイトに載っている図のPとNPCが
NPを真っ二つにして占めており、まったく隙間がありません。(想像できますか?)
これも矛盾してますよね?PでもNP完全でもないNP問題がないといけないんですから。
そうだとしたらこの本の間違いなんですが…。
ここの賢い人、どうか答えてください。せめてヒントだけでも…。
258:257
05/12/19 09:19:37
あまりの必死さに図を描いてしまいます。m(__)m
c. NP
┌───┬───┐
│ │ │
│ P │ NPC │
│ │ │
└───┴───┘
てな感じです。
259:257
05/12/19 09:23:48
度々すみません。訳し間違えました。正しくは
「図のどれがP、NP、NP完全(NPCと呼びます)のクラスについての私たちの知識と矛盾して『いない』か?」
と
「これらのうちの二つのみが現在の私たちの知識と矛盾して『いない』」
です。もう後で逝ってくるつもりです。m(__)m
260:デフォルトの名無しさん
05/12/19 10:19:49
>>188
すみません
261:デフォルトの名無しさん
05/12/19 13:34:18
>>257
「PでもNP完全でもないNP問題がないといけない」はあくまで「P≠NPならば」
であって、「P≠NP」とは限らない。
262:257
05/12/20 12:17:51
>>261
ありがとうございます。
なるほど、「P≠NP」とは限りませんよね。
もしそうだとすれば選択肢は「P=NP」しかない訳で
その場合は「PでもNP完全でもないNP問題があろうがなかろうが関係ない」
と解釈してよいのでしょうか?
友達の一人は「『P=NP』は『現在の私たちの知識』に矛盾していないか?
図a, bはP=NPだから簡単に矛盾していると判断できたんじゃないか。
cがP=NPとするなら矛盾していると判断するべきだろう?」と問いかけてきました。うーむ。
すみません、自分、人より脳が少し足りないようです。
また説明お願いします。m(__)m
263:デフォルトの名無しさん
05/12/20 14:31:12
>>262
現在の多くの人たちの『考え』には矛盾しているが、それは『知識』ではない。
P=NPは、我々が馬鹿なだけですべてのNP問題は実は多項式時間で
とくことが出来ると言うこと。そんなことはないだろうと思うかもしれないが、
多項式時間で解くことの出来ない問題があることを証明できていない現在、
P=NPは矛盾しているとはいえない。
264:257
05/12/21 12:01:14
>>263
なるほど、ようやく分かりました。
すべてのNP問題が(近似解とかではなく)
多項式時間で解けるようになったら面白いでしょうね。
天寿を全うするまでに見たいものです。
ありがとうございました!
265:デフォルトの名無しさん
06/01/09 00:12:14
age
266:BASIC
06/01/09 16:12:52
N人分のデータ(氏名、体重、身長、年齢)がDATA文で入力されているプログラムが
ある。これを用いて次のプログラムをBASICで作成しなさい
体重が60kg以上で、身長が150cm未満の人の名前を表示する
267:デフォルトの名無しさん
06/01/09 17:34:00
宿題は自分でやれ
268:デフォルトの名無しさん
06/01/09 17:54:08
BASICなんて記憶の彼方だな
269:デフォルトの名無しさん
06/01/09 18:15:01
何ベーシックかは指定していないな。
VBとかでもいいとすれば随分アレだ
270:デフォルトの名無しさん
06/01/09 19:08:23
>>266
URLリンク(www.sagami.ne.jp)
271:デフォルトの名無しさん
06/01/11 03:29:11
ヤコビ行列の計算を効率良く行う工夫は何かあるでしょうか?
(n*m)回の微分演算という時間を喰う処理を少しでも短くしたいです
もしくは優れたJacobianMatrixクラスの例をご存じであれば是非!
272:デフォルトの名無しさん
06/01/11 06:49:10
Jacobian の成分が nm 個ある以上,本質的にそれよりオーダーが落ちることはありえない.
定数オーダーでの最適化は計算モデルに依存するので議論できん.そもそもおまいが微分をどう実装してるかもわからんし.
O(nm) すら許せないなら,問題に応じてアドホックに解決するっきゃ無いと思うがなあ.どんな問題解いてるんだ?
273:デフォルトの名無しさん
06/01/11 10:57:45
>271
LZのスライド辞書みたいに、演算した組み合わせを辞書に登録しておいて、
次回以降は演算を省くってのはどうだろう?
辞書の検索にかかる時間を何らかの方法(連想配列とか)で短縮する必要はあるだろうけど。
274:271
06/01/12 12:31:26
>>272-273
早いレスどうもです!
>>272
やはりO(nm)回は「本質的に」避けられないわけですよねー・・・
微分の差分近似をループでnm回やるつまらない実装なんで、
工夫できないかなと思った次第だったのですが。
ちなみに問題は非線形関数の最小値探査みたいな感じです
>>273
んー、いいアイディアなんですが今回は
適用できないような気がします、ゴメンナサイ
ただ、そのうち他の問題で使えそうな気がするんで、
そのネタはもらって覚えておきます! ありがとう!
275:デフォルトの名無しさん
06/01/14 00:48:34
>>274
最小化したい非線型関数になんか条件付けないと定数レベルの最適化もつらいような
276:デフォルトの名無しさん
06/01/31 17:55:55
最小二乗法のライブラリきぼんゅ。
277:デフォルトの名無しさん
06/02/01 03:14:47
>>276
ライブラリも何も、大した計算じゃないじゃん。
278:デフォルトの名無しさん
06/02/01 12:32:21
>>277
世の中に存在するアルゴリズムの中で複雑と言えるものがどれだけある?
279:276
06/02/01 12:44:24
最小二乗法おしえて欲しいぉ。
280:デフォルトの名無しさん
06/02/01 13:38:16
残差平方和が最小になるようにパラメータを決定するのです
このスレでも簡単な例がいくつか
>>178
>>182
>>196
非線形になってくるとちょっとめんどい
URLリンク(en.wikipedia.org)
URLリンク(en.wikipedia.org)
ここら辺を参考に
281:デフォルトの名無しさん
06/02/02 02:20:31
>>278
FFTになると、ライブラリが欲しい程度には複雑だと思う。
282:デフォルトの名無しさん
06/02/02 08:51:05
>>281
どれだけある?という問いにFFT1個かよ。
283:デフォルトの名無しさん
06/02/02 09:25:21
>>282
世の中に存在するアルゴリズムがどれくらいあるのか教えてくれたら答えてあげるよ。
284:デフォルトの名無しさん
06/02/02 13:43:21
行列計算もだいたい書く気がしないな.条件数が悪い場合とか考え出すと相当面倒くさい.
285:デフォルトの名無しさん
06/02/02 14:58:57
あとは圧縮&展開と多倍長演算あたりかね? 汎用的なのは。
各分野毎にはいろいろとあるだろうけど。
画像エフェクト、サウンドエフェクト、3D系演算とか。
286:デフォルトの名無しさん
06/02/02 15:52:22
>>281
難しくはないが複雑ではあるよな。
287:デフォルトの名無しさん
06/02/02 22:26:58
各種関数なんかは、大概簡単なことをやっていても、実装は面倒だなぁ。
288:デフォルトの名無しさん
06/02/05 09:27:32
最小二乗法は
円に適用するだけでも、厄介だし、
直線に適用しようとしたって、実はけっこう難しいよ。
たとえば、2次元画像から直線部を取りたいとしたら、学校でやるようなXとかYでの偏微分じゃ、それこそ偏る。
残差って何って所から取り掛からないとね。
そして、余程単純じゃないと、たいていは方程式1発で解けるという事にはならない。
数値解で求める事になるだろうな
289:デフォルトの名無しさん
06/02/06 07:09:38
>>288
ただの偏微分でしか説明しないのって,相当ひどい学校だと思う
290:276
06/02/06 10:04:37
>>288
じゃ、何を使うのさ?????
>>289
詳しく!!!!!
291:デフォルトの名無しさん
06/02/06 14:14:46
>>288
最小二乗法はロバストでないのでそのあたりは考慮しないと。
例えば、y=x上に完全に点が並んでいる状態で、
たった一点(1,10000)が入ってきただけでy=2xとかになると困るわけだ。
292:276
06/02/06 14:22:51
今回の開発では点の数に関しては、決めウチできます。
293:288
06/02/07 06:30:36
>>290
だから、最小2乗法を使うなら、何を最小にするのかって所が肝心って事さ
直線を求めるのにしたって、数表上と2次元データとは誤差の意味が違う
数表上なら結果の誤差を最小にしたいし
2次元なら直線からの誤差を最小にすると同時に回転変換で結果が変わらない必要がある
294:デフォルトの名無しさん
06/02/09 11:57:07
最小2乗法アゲ
295:sage
06/02/09 21:45:42
sage
296:デフォルトの名無しさん
06/02/11 17:31:27
n個の要素の2番目に小さい要素は最悪n+logn−2回の比較で求められることを証明しなさい。
順序統計量を使うのだと思うのですが、帰納法を使って証明するのかどうか分かりません。
どなかか説明してもらえないでしょうか?よろしくお願いします。
高校の時に教師が言っていたんだけど急に思い出して・・・・おねがいします。
297:デフォルトの名無しさん
06/02/11 18:07:41
/ ̄ ̄ ̄ ̄\
/ ● ●
|Y Y \
| | | ▼ | パクッ
| \/ ____人__|
| |∨∨∨∨∨ ←296
\ \∧∧ )
| | |\  ̄ ̄\\\
| | |  ̄ ̄ ̄ し し/
(__)_)
298:デフォルトの名無しさん
06/02/11 18:33:39
最悪 n - 1じゃないか? 何番目でも最悪 n - 1回でいけそうだ。
今適当に考えただけだから間違ってるかもしれないけど。
299:デフォルトの名無しさん
06/02/11 18:40:59
違った、最悪 n回か。
300:デフォルトの名無しさん
06/02/11 18:45:05
>>298
いや、漏れが覚えている限りでは違うと思われ。
MITだかどっかの教科書の奴に載ってた。二番目を求めるけども一番最小を求めてからだったはず
院試にでてたかも。
301:デフォルトの名無しさん
06/02/11 18:57:23
>>300
やっぱり違ってた。考え直したら、
nが偶数なら (3/2)*n - 2,
奇数なら (3/2)*n - 3/2 回だった。
302:デフォルトの名無しさん
06/02/11 20:58:20
>>296
ソートアルゴリズムのところとかかな?学部生の時に必死こいてやったけどもう忘れた・・・。
あの教科書は原書で読んだ方がいいかもしれんな。英語だからかなりめんどくさいが。半期でやるのを英語でやったら一年半かかったよ。
303:デフォルトの名無しさん
06/02/12 00:24:16
証明になってないw
304:デフォルトの名無しさん
06/02/12 03:01:20
>>296
完全二分木でトーナメントを考えよう。
一番小さい要素を見つけるのにn-1回の比較が必要。
二番目に小さい要素は一番小さい要素の対戦相手のどれか。
木の高さはceil(log n)で木の一番上には対戦相手はいないから、
二番目に小さい要素の候補たりえるものはceil(log n)-1個
この中から一番小さいものをみつけるのにceil(log n)-2回の比較が必要。
したがって比較回数は、
(n-1)+ceil(log n)-2<n+logn-2
ただし、ceil(x)はxの小数点以下切り上げの関数
305:デフォルトの名無しさん
06/02/13 00:39:26
>>304
なるほど。
それは比較は少ないけどコピーがメモリが多く必要になりそうなんだけど
どうなんだろう。
306:デフォルトの名無しさん
06/02/13 06:11:40
2分木にする必要性が感じられないってかなってないw
307:デフォルトの名無しさん
06/02/14 10:30:15
>>305
実装の話はしてないんだよね。実際にこの比較回数で動くプログラムを作るのは
結構困難な気がするし、普通の 2n 回比較に定数倍で負けそう。
308:デフォルトの名無しさん
06/02/27 09:33:06
32ビットの符号無整数型で32個のビットのうち
N個をランダムに選んで1にするアルゴリズム。
(残りの32−N個は0)
賢い人教えて。
309:デフォルトの名無しさん
06/02/27 11:33:45
>>308
そのサイズの乱数を一個生成するだけじゃいかんの? C なら rand() とかで。
それとも乱数生成のアルゴリズム自体を聞いてるの?
310:デフォルトの名無しさん
06/02/27 12:12:40
たぶん
1)組み合わせの数の計算方法が判らない
2)乱数と、その全部の組み合わせを対応させる方法が判らない
のだろうと思うんだけどね
311:デフォルトの名無しさん
06/02/27 12:28:33
1U << (rand() & 31)
とか、そういうことではないの?
312:デフォルトの名無しさん
06/02/27 12:35:07
>>311
rand って完全にランダムじゃなくて、
下位ビットほど短い周期性持ってるから、
rand() & 31 はあんまりよくない。
(rand() >> 16) & 31 とか、何ビットかシフトするの推奨。
313:デフォルトの名無しさん
06/02/27 12:38:20
分かってて書いてたつもりだけど…アルゴリズムの質問だし。
random()でもMTでも好きなの使えばいいんじゃない?
314:デフォルトの名無しさん
06/02/27 12:41:56
>>313
まあそうだけどね。
>>308 がそんな判断できると思えなかったんで、一応補足のつもり。
315:308
06/02/27 13:09:41
MTとかで生成された乱数の立っているビットの数は
16本を中心にした正規分布になってると思うんだけど、
必ずN本になるようにしたい。
3本とか30本とかってのはたまにしか発生しないし。
N回ループで一度使った数は記憶させとくとかっていう
愚直なのは思いついたんだけど遅そうなので聞いてみた。
316:デフォルトの名無しさん
06/02/27 15:31:21
32個の数字から N個取り出して順不同というのと 問題は同じでしょ
317:デフォルトの名無しさん
06/02/27 20:50:08
>>316
ですね。
1〜32の間で離散一様乱数発生させたものをa_0、
1〜31の間の乱数をa_1、1〜30の間をa_2として、
初期値は0で左からa_0番目のビットを1にする。
以降左からa_k番目の0のビットを1にする。
~~
318:308
06/02/28 09:54:13
>>317
今はそれでやってます。
みなさん聞いてくれてありがとう。
319:308
06/02/28 09:58:33
あ、ついでに言っとくとNが17以上の場合は32-N個のビットを立てて反転してる。
連投ごめん。
320:308
06/03/01 16:40:57
やっぱりもっと速いのないかな。
321:デフォルトの名無しさん
06/03/01 17:19:36
>>320
これ以上議論するなら,「速い」をきっちり定義してもらわないと.
特に乱数生成のコスト,各ビットを参照するコストなどが無いと,
どっちが速いかなんて比較できんよ.
322:デフォルトの名無しさん
06/03/02 11:59:32
もっと早い方法は、全部の組み合わせのテーブルを作っておいて
それの配列番号を乱数で選ぶ事だね
323:デフォルトの名無しさん
06/03/02 12:53:16
>>322
2^32 / 2 (0≤N≤16 だから半分) = 2G×4Byte = 8GB
何を使って動かすつもり?
324:デフォルトの名無しさん
06/03/02 16:39:38
>>317
それは、順番を考慮した場合のアルゴリズムだから違うようだけど
結果はN個のビットだから、どの組み合わせも等確率で発生するから問題ないのか
>>323
Nを固定すれば 最大の組合せ数は N=16の時で その1/4程度の容量だから最近のPCなら入るんじゃないの?
組み合わせの数ってどの程度だろ?
32!/N!/2^N では大きすぎるな
325:デフォルトの名無しさん
06/03/02 16:43:14
たとえば32個中3個が1の組み合わせを F(32,3) のように書くと
先頭ビットが0 なら 残りは F(31,3)
先頭ビットが1 なら 残りは F(31,2)
という事で
F(N,M)=F(N-1,M)+F(N-1,M-1)
326:デフォルトの名無しさん
06/03/02 17:23:15
>>324,325 高校数学の教科書読み直したら?
URLリンク(ja.wikibooks.org)
327:デフォルトの名無しさん
06/03/02 18:34:31
という事は 32 C 16
URLリンク(www.google.co.jp)(16!*16!)
601 080 390
って事か
Σ M C n =2^M って事になるんだな
328:デフォルトの名無しさん
06/03/02 18:39:51
で 32個中16個の組み合わせ は 32!/(16!*16!)
なのに >>317の方法は 順列 で 32!/16! という事で、16! の重複があるから、なんか重そうに見えるという事?
329:デフォルトの名無しさん
06/03/03 07:29:43
配列のソートではなく、上位2者と下位2者を高速にシークするアルゴリズムを教えて><
330:デフォルトの名無しさん
06/03/03 07:50:10
var max1,max2 min1,min2;
max1:=data[0];
max2:=data[1];
if max2> max1 then swap(max1,max2);
min2:=max1;
min1:=max2;
for i:=low(data)+2 to High(data) do begin
if data[i] > max2 then begin
if data[i] > max1 then max1:=data[i] else max2:=data[i];
end;
if data[i] < min2 then begin
if data[i] < min1 then min1:=data[i] else min2:=data[i];
end;
end;
こんな感じでは?
331:デフォルトの名無しさん
06/04/18 07:42:35
いわゆる○×。ただし、ちょっと特殊。
ban(0) ban(1) ban(2)
ban(3) ban(4) ban(5)
ban(6) ban(7) ban(8) //盤面 位置関係はこんな感じ
turn //ターン数 最初は1
プレイヤーAのターン開始
↓
Aが指定しかつその場所に当たる変数(真ん中ならban(4))が0であるならばそれに(turn×10)+プレイヤーの番号
(Aは1、Bは2とする。)を代入。
↓
turn>6ならば、次のことを行う。
banの中で下1桁がプレイヤーの番号と等しいもののなかで、一番小さいものに0を代入
↓
banに縦横斜めに自分の番号が並んでいるならば勝利
↓
turnに1を足し、Aのターンを終了、Bのターンになる。
で、できるだけ強いCOMのアルゴリズムを考えてほしいのです。
お願いします。
332:デフォルトの名無しさん
06/04/18 13:54:18
あぶらあげ
333:デフォルトの名無しさん
06/04/22 16:23:12
>>331
ゲーム木使って実際に解いてみたら。
EXPTIME完全か知らんが、3×3ぐらいなら解けるだろ。
終盤6個そろってからの場合の数は
9*8*7*6*5*4 = 60480
回転と対称で重なるものを除くと
60480/8 = 7560
リーチがかかってかつ自分の手番のような自明な場面を除けばもっと少なくなる。
自分の手番でダブルリーチをかけられる状態であれば勝ち。
双方最善を尽くしたとき、ループに陥れば引き分け。
334:デフォルトの名無しさん
06/04/22 17:08:22
消してから勝利判定だとダブルリーチにならないんじゃない?
335:デフォルトの名無しさん
06/05/22 17:26:54
楕円近似ライブラリなんてありまつか?
336:デフォルトの名無しさん
06/05/22 17:37:12
楕円近似というのは
1、点列を楕円の一部として近似する事
2、楕円の周長を近似計算する事
どっち?1はとても難しい 円ならまだ方法があるが
337:デフォルトの名無しさん
06/05/22 17:56:27
>1、点列を楕円の一部として近似する事
これをやりたいです。
338:デフォルトの名無しさん
06/05/22 18:20:03
円なら
URLリンク(www.tensyo.com)
ここの円弧推定が良い方法だと思える。
普通は、円との誤差を s=√{(x−x0)^2 +(y−y0)^2}−r と置くが
これだと非線形で解かなければならない。
(x−x0)^2 +(y−y0)^2−r^2 とすれば数値解が簡単に求まるというものだ。
楕円の場合は、検索すれば出ると思うが、円よりさらに厄介だ
339:AVL木
06/05/22 20:52:10
18,7,35,13,16,10,40,21,22,50,46,3,5 を
からっぽのAVL木に入れていくとどうなりますか?誰か教えてください。
340:デフォルトの名無しさん
06/05/22 21:41:44
教科書読め
341:デフォルトの名無しさん
06/05/25 18:54:44
繰り返し二乗法のプログラムをご教授お願い出来ますでしょうか?
342:デフォルトの名無しさん
06/05/25 20:20:09
デジタル回路の閾値関数を考えたのですが、既知ですか?
f:=x->cos(PI/2*x)^2
f(f(f(x))), x=-0.5..1.5
343:デフォルトの名無しさん
06/05/31 01:36:13
>>335
Direct least-squares fitting of ellipses
Andrew W. Fitzgibbon, Maurizio Pilu, and Robert B. Fisher
IEEE Transactions on Pattern Analysis and Machine Intelligence,
21(5), 476--480, May 1999
URLリンク(research.microsoft.com)
URLリンク(research.microsoft.com)
一応 Java 実装もあるけどコードがちょっと汚いかも。
344:デフォルトの名無しさん
06/07/28 23:01:36
fla板から来ました以下の解答お願いします。
プレーヤの歩いた軌跡が、あらかじめ引いてある直線にどれくらい近いかを数値化するにはどうしたらいいでしょうか?
(x,y)座標を取って計算をすればよいらしいっていうのはなんとなくわかるんですが
具体的にどういった計算をすればいいかご教授願います
ちなみに最小二乗法だと、
\
/
\
/
このように蛇行した場合も直線に近似されてしまうのでダメですよね・・・
345:デフォルトの名無しさん
06/07/28 23:26:48
>>344
軌跡が直線に近いってのは、どういうこと?
346:デフォルトの名無しさん
06/07/28 23:37:46
>>344
最小二乗法で相関係数みりゃいいだろ。
347:デフォルトの名無しさん
06/07/29 00:13:17
>344
数値を求めたいんだろう?
最後の行が意味不明だぞ
348:344
06/07/29 00:16:20
>>345
URLリンク(www.uploda.org)
この画像のように、どれだけ直線に近い動きをしたか、ということを
直線との接触時間などからではなく、座標から軌跡と直線との近さを計算したいのです。
>>346
相関係数ですか、調べてみます
ありがとうございます
349:デフォルトの名無しさん
06/07/29 15:15:39
もしかして、344は「軌跡から最小自乗法で直線を求めて、与えられている直線と比較する」とか考えているのだろうか。
「軌跡と与えられた直線の距離の自乗を最小にする」でいいんじゃないの?
350:デフォルトの名無しさん
06/08/10 08:08:24
あらかじめ引いてある直線が X 軸に合うように回転させて
Σ(Yi^2)/N とか
軌跡の2次モーメントとか
351:デフォルトの名無しさん
06/09/15 13:37:19
軌跡に沿って所与の直線との距離を積分すればいいじゃないの。
352:デフォルトの名無しさん
06/09/16 00:36:41
随分とまた遅い進行だな
353:デフォルトの名無しさん
06/10/18 22:34:05
ベクトルを正規化する式は
float x, y, z;//元のベクトル
float vx, vy, vz;//正規化したベクトル
float s;
s=sqrt(x*x+y*y+z*z);
vx=x/s;
vy=y/s;
vz=z/s;
で求まると思いますが、sqrtを使わずに正規化するにはどうすればいいのでしょうか?
どうしても速度が気になります。
自分でも考えてみましたが分かりませんでした。よろしく御願いします。
354:age
06/10/18 22:38:49
age
355:デフォルトの名無しさん
06/10/18 23:04:16
f(u0,v0)=
ΣΣf(uk,vl)C(uk-u0)C(vl-v0)
k l
ここで
C(x)= 1-2|x|^2+|x|^3 (0<|x|<1)
4-8|x|+5|x|^2-|x|^3 (1<|x|<2)
0 (2<|x|)
3次補間法の計算式なのですが,どのようにプログラムで書いたら良いのでしょうか?
356:デフォルトの名無しさん
06/10/19 00:02:01
>>353
>どうしても速度が気になります。
本当に気になる速度なのかどうか、まず実測してみたらどうでしょう。
sqrtを使わなければできないと思いますけど。
本当にsqrtが速度的にネックであれば、高速のsqrtを自前で作るとか。
ただし、精度を犠牲にしてのことですけど。
Newton法でのsqrtの近似の場合、ループは高々20回くらいです。(誤差1.0e-15で)
まずは実測です。
357:デフォルトの名無しさん
06/10/19 00:08:31
脳味噌ぶら〜んにでも行って速そうなの探してこいよ。
358:デフォルトの名無しさん
06/10/19 01:37:21
>353
まず環境晒そうや。
CPU、使用言語、必要精度、それらの情報も無しでアドバイスなんて出来ん。
359:デフォルトの名無しさん
06/10/19 10:20:45
>>356
精度にもよるけどせいぜい3−5回ぐらいじゃなかったか?
20回もまわすか。
360:デフォルトの名無しさん
06/10/19 10:52:10
double sqrt(double x) {
double a = 1.0;
double eps = 1.0E-10; /* 精度 */
while (abs(a * a - x) > 1.0E-10) {
a = 0.5 * (a + x / a);
}
return a;
}
361:デフォルトの名無しさん
06/10/19 10:56:57
>>353
URLリンク(www.google.co.jp)
362:デフォルトの名無しさん
06/10/19 12:32:48
>>360
そのコードで3−5回
1.0E-15で9回ってところ
確かに20回もありえるけど、極端な言いぐさは信用されないな。
363:デフォルトの名無しさん
06/10/19 13:16:19
>>360
Intel系ならニュートン法使うより、素直に浮動小数点命令を使った方が速いだろ。
SSE乗ってるならaddss/mulss/rsqrtps辺りでまとめて計算できるし。
364:デフォルトの名無しさん
06/10/19 13:44:45
>>355
その計算式のままだと思うけど…
アルゴリズムの入力と出力は理解できてる?
(入力は格子状の標本点における f の値 (二次元の double 配列) と補間すべき点の座標 (u0, v0) で、出力は (u0, v0) における補間値)
365:デフォルトの名無しさん
06/10/19 16:36:19
式は分かってるんですがプログラムにできないんです・・・
366:デフォルトの名無しさん
06/10/19 17:01:18
>>365
具体的なコードが欲しいなら
具体的な入力形式を指定した方がいいと思うよ。
(これは大学の宿題か何かですか?)
367:デフォルトの名無しさん
06/10/19 17:19:03
初心者なもですいません.大学のC言語の画像処理の宿題です.
#include <stdio.h>
#include <rasterfile.h>
#include <math.h>
#include "bitshift.h"
void Disp_Ras(struct rasterfile ras);
void cercle(struct rasterfile ras, unsigned char **r, unsigned char **g, unsigned char **b, int point[2]);
void tri(struct rasterfile ras, unsigned char **r, unsigned char **g, unsigned char **b, int point[2]);
void sq(struct rasterfile ras, unsigned char **r, unsigned char **g, unsigned char **b, int point[2]);
void satr(struct rasterfile ras, unsigned char **r, unsigned char **g, unsigned char **b, int point[2]);
int height;
int width;
int main(int argc,char *argv[]){
/*変数宣言*/
int i=0;
int j=0;
int point[2];
struct rasterfile ras;
unsigned char **R,**G,**B;
unsigned char **r,**g,**b;
FILE *fp1,*fp2;
int nt,nn;
double p,q;
double bai;
int tmp_nt,tump_nn;
368:デフォルトの名無しさん
06/10/19 17:22:41
続き
printf("倍率を入力");
scanf("%lf",&bai);
/* 入力画像 */
if((fp1 = fopen("hane256.ras","rb")) == NULL){
fprintf(stderr,"can't open file!!\none more check it!!\n");
exit(1);}
/* ヘッダ読み込み */
ras.ras_magic = readtoInt(fp1);
ras.ras_width = readtoInt(fp1);
ras.ras_height = readtoInt(fp1);
ras.ras_depth = readtoInt(fp1);
ras.ras_length = readtoInt(fp1);
ras.ras_type = readtoInt(fp1);
ras.ras_maptype = readtoInt(fp1);
ras.ras_maplength = readtoInt(fp1);
369:デフォルトの名無しさん
06/10/19 17:23:35
続き
height =bai*ras.ras_height;
width = bai*ras.ras_width;
height = height - height%4;
width = width - width%4;
/* 出力画像 */
fp2 = fopen("out.ras","wb");
/* ヘッダ書き込み */
writetoInt(fp2,ras.ras_magic);
writetoInt(fp2,width);
writetoInt(fp2,height);
writetoInt(fp2,ras.ras_depth);
writetoInt(fp2,ras.ras_length);
writetoInt(fp2,ras.ras_type);
writetoInt(fp2,ras.ras_maptype);
writetoInt(fp2,ras.ras_maplength);
370:デフォルトの名無しさん
06/10/19 17:24:06
続き
/* メモリ確保 */
R = (unsigned char**)calloc(ras.ras_height,sizeof(unsigned char *));
G = (unsigned char**)calloc(ras.ras_height,sizeof(unsigned char *));
B = (unsigned char**)calloc(ras.ras_height,sizeof(unsigned char *));
r = (unsigned char**)calloc(height,sizeof(unsigned char *));
g = (unsigned char**)calloc(height,sizeof(unsigned char *));
b = (unsigned char**)calloc(height,sizeof(unsigned char *));
for(i=0;i<ras.ras_height;i++){
R[i]=(unsigned char*)calloc(ras.ras_width,sizeof(unsigned char));
G[i]=(unsigned char*)calloc(ras.ras_width,sizeof(unsigned char));
B[i]=(unsigned char*)calloc(ras.ras_width,sizeof(unsigned char));
}
for(i=0;i<height;i++){
r[i]=(unsigned char*)calloc(width,sizeof(unsigned char));
g[i]=(unsigned char*)calloc(width,sizeof(unsigned char));
b[i]=(unsigned char*)calloc(width,sizeof(unsigned char));
}
371:デフォルトの名無しさん
06/10/19 17:24:59
/* 画素データ取り込み */
for(i=0;i<ras.ras_height;i++){
for(j=0;j<ras.ras_width;j++){
/* B → G → R(24bit) */
fread(&B[i][j],sizeof(unsigned char),1,fp1);
fread(&G[i][j],sizeof(unsigned char),1,fp1);
fread(&R[i][j],sizeof(unsigned char),1,fp1);
}
}
/*線形補間法*/
for(i=0;i<height;i++){
for(j=0;j<width;j++){
nt = floor(i/bai);
nn = floor(j/bai);
p = i/bai - nt;
q = j/bai - nn;
r[i][j] = R[(unsigned char)nt][(unsigned char)nn]*(1-p)*(1-q)+R[(unsigned char)(nt+1)][(unsigned char)nn]*p*(1-q)
+R[(unsigned char)nt][(unsigned char)(nn+1)]*(1-p)*q+R[(unsigned char)(nt+1)][(unsigned char)(nn+1)]*p*q;
g[i][j] = G[(unsigned char)nt][(unsigned char)nn]*(1-p)*(1-q)+G[(unsigned char)(nt+1)][(unsigned char)nn]*p*(1-q)
+G[(unsigned char)nt][(unsigned char)(nn+1)]*(1-p)*q+G[(unsigned char)(nt+1)][(unsigned char)(nn+1)]*p*q;
b[i][j] = B[(unsigned char)nt][(unsigned char)nn]*(1-p)*(1-q)+B[(unsigned char)(nt+1)][(unsigned char)nn]*p*(1-q)
+B[(unsigned char)nt][(unsigned char)(nn+1)]*(1-p)*q+B[(unsigned char)(nt+1)][(unsigned char)(nn+1)]*p*q;
}
}
372:デフォルトの名無しさん
06/10/19 17:27:39
この線形ほかんの部分を3次補間にしないといけないのですが・・・
373:デフォルトの名無しさん
06/10/19 17:50:33
宿題スレ池
374:デフォルトの名無しさん
06/10/19 21:39:46
>367-371
・宿題の趣旨を理解していないバカ
・「初心者」と書けばなにをしても許されると思ってるバカ
・構造化出来ないバカ
・ざっと見ただけでもコンパイルが通らないのが解るコードを晒すバカ
久々に悪寒が走るほど汚ぇコード見たわ。
375:デフォルトの名無しさん
06/10/19 22:12:12
初心者をバカにするやつに上級者はいない(^.^)
376:デフォルトの名無しさん
06/10/19 23:37:57
>>374
これ、たぶん宿題出した先生が書いたコードだと思うんだけど、
大学の先生 (特に年配の人) って結構こういうコード書くのよ。
漏れが習った人も FORTRAN が最初だったらしくてこんな感じだった。
理論とかに関してはすごく頭切れるんだけどね…。
377:デフォルトの名無しさん
06/10/20 01:36:50
・糞レスでageるやつは2ch初心者
・携帯のノリで顔文字使ってるやつは2ch初心者
378:デフォルトの名無しさん
06/10/20 10:59:23
>>371
>nt = floor(i/bai);
キャストしる。
>R[(unsigned char)nt][(unsigned char)nn]
このキャストは意味あるの?
元画像が縦横どちらか256pixel超えると破綻すると思うけど。
それとも、charが16bitか32bitの処理系?
マジで講師の書いたコードだとしたらヤバイな。
こんなの習った奴が卒業して、新人として入社してくるんか・・・orz
379:デフォルトの名無しさん
06/10/21 13:02:51
>>376
結構いるよね
原理が分かるんだからいいじゃん,
コード読みやすくするのは各自勝手にやってくれとか思ってそう
380:デフォルトの名無しさん
06/10/21 14:37:21
まあ、歳食うと新しいこと覚えられないからねぇ。
FORTRAN のパラダイムのままで C とか Java 書くのなんて当たり前。
381:デフォルトの名無しさん
06/10/21 15:04:24
つまり、年寄りってゴミっていうこと?
382:デフォルトの名無しさん
06/10/21 15:28:34
そこまでは言わんが・・・
383:デフォルトの名無しさん
06/10/21 15:58:18
でも実際この業界では、年寄りは廃棄処分にされるんだよね?
384:デフォルトの名無しさん
06/10/21 16:11:20
>>383
その当時、専門でなかった人材を無理矢理ソフトウェア開発に回した、という背景があるからじゃない?
そういう年寄り連中は基礎的な事を学ばずに、現場たたき上げで今までやってきたけど、そのツケが今に回ってきてる。
385:デフォルトの名無しさん
06/10/21 16:31:02
んじゃ、年寄りが新しいことを覚えられないというのは、基礎的なことを知らないから、新しいことに対処する能力が低いということ?
386:デフォルトの名無しさん
06/10/21 17:07:54
歳食うと新しいこと覚えられないってのは、人間なら誰でも。
普通は、新しいこと出来ないってのを今までの経験からくる勘とかで補うんだけど、
>>384 みたいな背景があるんじゃ、この業界じゃほんとにゴミになりかねんな、年寄り。
387:デフォルトの名無しさん
06/10/21 19:36:38
どの業界でも年取れば、現場から一歩引いて管理職になるが普通じゃないのか?
ただし、ITドカタじゃそれが特別速く押し寄せるってこと。
388:デフォルトの名無しさん
06/10/21 20:05:52
>>387
アメリカでは職種は変わらない。
389:デフォルトの名無しさん
06/10/21 20:48:27
お前はどこで仕事してる?
390:デフォルトの名無しさん
06/10/22 00:03:00
>>387
まあ、だってさ、管理職って多人数は必要ないわけじゃん。
全員が管理職にはなれないだろ。
って、話題がなんかマ板臭いな。
391:デフォルトの名無しさん
06/10/22 00:13:51
【】この業界では何故、年寄りは廃棄されるのか?【】
392:デフォルトの名無しさん
06/10/22 13:56:19
>>390
その話の最後は、「国が必要もない公共工事をいつまでも続けるのはなぜなのか」に落ち着くぞ。
393:デフォルトの名無しさん
06/10/22 22:12:32
オマイラ赤黒木ってしってる?
394:デフォルトの名無しさん
06/10/22 22:13:44
常識では
395:デフォルトの名無しさん
06/10/22 23:30:04
実装を知ってるのと聴いたことあるのとではまったく違う
396:デフォルトの名無しさん
06/10/22 23:53:11
どのくらい効率いいの?>red-black tree
小規模のDBなら偏っても問題無いし、大規模DBならいまどきツリー使ってないだろうし。
ターゲットはどこらなん?
397:デフォルトの名無しさん
06/10/23 00:33:08
FEMプログラムで使われてるのは見たことある。
398:デフォルトの名無しさん
06/10/23 00:43:13
>>国が必要も無い公共工事を続ける理由
三下土方に職を与える為
に落ち着くぞ
399:デフォルトの名無しさん
06/10/23 00:45:39
>>人口減ってるから、住宅作らなくてもいいんだよ。
どうせ大半は地震でぶっ壊れるし。
いやいやゼネコンの小遣い稼ぎでしょう。
400:デフォルトの名無しさん
06/10/23 02:05:37
>>393
日本語だと、2色木って言われることの方が多いような、red-black tree。
>>396
要素の挿入・削除時にちょっと処理が増えるけど、
要素の探索時にはペナルティなしで、
木の高さが必ず log n オーダーに抑えられる。
数百〜数万程度のデータ扱うときにはすごい効率いいと思うよ。
C++ の map とか C# の SortedDictionary は2色木使ってる。
Java の Hashtable も、名前に反して実装は2色木じゃなかったっけ?
401:デフォルトの名無しさん
06/10/23 16:39:56
2色木は初めて聞いた。俺は赤黒木派。
402:デフォルトの名無しさん
06/10/23 18:36:23
実測結果キボンヌ
403:デフォルトの名無しさん
06/11/17 17:26:34
平面上の凸とは限らないポリゴンを三角形分割したいのですが、どういったアルゴリズムがあるでしょうか?
また、そのポリゴンに穴が開いている場合も対処できるアルゴリズムはありますか?
1週間ほど調べているのですが埒があかなくて。。。
404:デフォルトの名無しさん
06/11/17 18:51:11
穴空きなら、外側とつなぐ。切れ込みを入れる感じで。
凹なら凹部と別の頂点で分割して凸にする。
405:デフォルトの名無しさん
06/11/18 03:15:54
どんな多角形だろうと、単調多角形への分割をした後に
単調多角形の三角形分割をして O(n) で解けることが知られている。
まともな計算幾何の本ならだいたい書いてあるとおもうが。
406:デフォルトの名無しさん
06/11/18 03:21:41
その単調って凸と同じ意味?
407:デフォルトの名無しさん
06/11/18 12:45:18
違う。端点のリストを一番下にある点から巡回したとき
y_1 < y_2 < ... < y_k, y_k > y_{k+1} > y_{k+2} ... > y_n となること。
つーか本嫁。
408:デフォルトの名無しさん
06/11/18 21:06:08
ここにでてくるShare Sortってなに?
ぐぐっても日本語の解説が見つからなかったよ。
とりあえず並列処理用のアルゴリズムらしいのは
わかったけど。
URLリンク(www.cs.rit.edu)
409:403
06/11/19 15:10:28
>>404-407
ありがとうございます。
なんとなくわかりました。
ただ、本屋に行ってみて計算幾何の本をいくつか見てみたのですが、どの本がよいかよくわからなくて...
もしお勧めがあれば教えていただけないでしょうか。すみません。
410:デフォルトの名無しさん
06/11/19 15:57:59
>>408
URLリンク(www.cs.mu.oz.au)
これじゃだめ?
・row columnにわける(row数,column数はプロセッサ数の定数倍に近いほうがよいだろう)
・奇数rowで昇順ソート偶数rowで降順ソートをする
・columnで昇順ソートをする
何回かやってるとできるはずなのでできたら取り出す
なんでrowのソートで逆にする必要があるのかな...
411:デフォルトの名無しさん
06/11/19 19:39:16
>>409
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
412:デフォルトの名無しさん
06/11/19 20:20:48
>>411
ありがとうございます!
早速買ってこようとおもいます。本当にありがとうございました。
413:デフォルトの名無しさん
06/11/19 20:44:17
shear sort実装してテストしてみたんだが、std::sortに比べて遅い・・・
int型で要素数2^16程度だと何回か繰り返してみたが25倍程度遅く、
2^32程度だと1回のテストで1000倍程度遅かった。
coreが1個だとオーダも悪いね。n個もcoreがあるなら、
quick sortでも順次分けていけるようなきがするし、
メモリを飛び飛びにアクセスして書き換えるから並列処理にも合ってない気がする。
414:デフォルトの名無しさん
06/11/19 21:06:23
O(n log n) を切れるソートって、かなり特殊な前提がないと使えないんじゃないの?
データの数と同じだけプロセッサがあるなら、
バブルソートでも O(n) でしょ、確か。
その Shear ソートも、そういう前提の下で O(√n) とかではないの?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4776日前に更新/251 KB
担当:undef