1 名前:デフォルトの名無しさん mailto:sage [04/06/03 23:18] どこにもない強固なスレにしたい
263 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:00:13 ] 素子の種類の条件を満たす真理値表を小さい方から総当たりだな。 ちなみに「条件を満たす回路が存在しない」ことの証明は 総当たりで調べても見つからなかったことを言う以外に方法はない。 典型的なNP問題。
264 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 19:51:44 ] >>263 総当りでしか証明できないならNPに入っていないじゃん。 探査空間Pで十分だからPSPACEには入っているけど。
265 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:25:03 ] >総当りでしか証明できないならNPに入っていないじゃん。 ?
266 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 18:10:31 ] >>265 NP=ある多項式長の補助入力が存在してPで解ける 総当り→補助入力は多項式長でないからダメ 補問題であるある場所にいけるかは 道順の例を補助入力として与えればこれは多項式長であり、明らかにPで検証可能。 したがって補問題はNP。 補問題がNPだから、PSPACEよりも狭いco-NPに入る。
267 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 03:59:35 ] むずかしいはなしはきらいです
268 名前:263 mailto:sage [2007/02/15(木) 06:14:34 ] 間違った。 等価な回路を探すアルゴリズムがNPで、存在しないことの証明はNPじゃない。
269 名前:259 mailto:sage [2007/02/15(木) 16:03:39 ] もしアレでしたらソースコードUPしますけど・・・
270 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 00:56:55 ] いらね
271 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:04:04 ] いる
272 名前:259 mailto:sage [2007/02/16(金) 04:34:16 ] 見たら吐くかも ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3659.c
273 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 07:39:57 ] #define NOTA まで読んだ。
274 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 07:40:39 ] なんだよ、ノタって。ふつーNOT_Aだろ。
275 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 16:31:13 ] 某板よりコピペ 多数のオブジェクトの衝突判定を並列化する方法 移動後の座標をボクセルに振り分ける。 1つのボクセル内に存在するキャラを総当たりで衝突判定。 処理の順序としては、移動、振り分け、衝突判定、衝突処理。 これで処理を並列化できる。 もう少し詳しく言えば、衝突判定をしやすくするために、 ボクセルに振り分ける時点で座標値などをボクセルごとの一時バッファに複製しておく。 これにより巨大なバッファをLSにロードする必要がなくなる。 衝突の連鎖については次フレームに回す。それで結果的には再帰処理になる。 普通は移動後に振り分けるというより ボクセル内のオブジェクトを管理するバッファを常設しておいて 移動でボクセル外に出たときだけバッファの更新をするでしょ。
276 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 01:19:29 ] 類似の手法は物理計算では常識。 ボクセルよりも適当な空間木を用いたほうがよいと思う。 オブジェクトの分布や座標空間にもよるが、計算量の 意味で速度が改善されることも珍しくない。
277 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 03:50:22 ] >>274 ふつーNOT_Aなのは分かる しかし、Shiftを押しながら「ろ」キーを押す手間が面倒なのも分かってしまうんだな 俺はどっちを応援すればいいんだ?
278 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 06:10:11 ] ふつーSHIFT+-
279 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 16:04:22 ] その点以外の感想が欲しい今日このごろ
280 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 07:38:32 ] C言語のソースは読むきしねぇ コメントぐらいかこうね
281 名前:デフォルトの名無しさん [2007/07/03(火) 15:59:46 ] 整数のリストを入力とし整数のリストを出力する関数nayose を、 Minimal を用いて次のように定義する。(ただしプログラム中、A or B はA とB のうち少 なくともどちらか一方がtrue のときtrue を返し、それ以外のときはfalse を返す論理演算 である。) 以下の問に答えよ。 fun member x lst = case lst of [] => false | hd::tl => hd=x or (member x tl) end; fun nayose lst = case lst of [] => [] | hd::tl => if (member hd tl) then (nayose tl) else hd::(nayose tl) end; (1) 関数nayose はどのような計算を行う関数か簡潔に答えよ。 (2) 長さがn のリストに関数nayose を適用したときの計算量をO(f(n)) の形で表せ。 (3) あらかじめ整列された整数のリスト(重複があってもよい)を入力とし、関数nayose と 同様の結果を出力する関数で、入力リストの長さがn のときの計算量がO(n) となるよ うな関数nayose2 を、Minimal プログラムで示せ。関数nayose2 がnayose と同様の結 果を出力する理由を簡単に説明すること。 (関数nayose2 は、整列されていない入力についてはnayose と異なる結果を返しても良 い。)
282 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 07:23:15 ] 宿題は宿題スレへ
283 名前:デフォルトの名無しさん [2007/09/08(土) 02:49:46 ] age
284 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:56:14 ] 反駁環境における生成器 % 何も生成しない生成器 repeat. repeat :- repeat. % 類型 リストからの生成 member(A,[A|_]). member(A,[_|R]) :- member(A,R). % 類型 リストの分解 append([],X,X). append([U|X],Y,[U|Z]) :- append(X,Y,Z).
285 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 03:52:19 ] % 生成器のつづき % 連続整数の生成器(昇順) for(N,N,E) :- N =< E. for(S,N,E) :- S =< E,S2 is S+1,for(S2,N,E).
286 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 09:39:58 ] 他所のHPの書きこみなんだけど > よく知られている問題ですが、一般に、N個のもののソーティング(順序付け)の > ための必要最少限の比較回数はlog2(N!) ≦ kを満たす最小の整数kです。 って本当? ていうか必要だけど充分じゃないっていう意味で言ってるんだろうか.
287 名前:アルゴリズム初心者 [2007/10/13(土) 20:48:56 ] ツリー構造(あるディレクトリ以下のファイル・フォルダ群)同士の差分を取得したいのですが、 そういったアルゴリズムの解説お願いします。 もしくはためになりそうなキーワードやウェブサイトを教えてください。 3年くらいプログラミングはしているのですが、画面を作るばかりで 頭を使うようなことは一切やったことが無いので詰まってしまいました。。。
288 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 21:04:06 ] アルゴリズムも何も、diff -rじゃダメなのか?
289 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 00:14:49 ] >>287 WinMergeをダウンロードしてくるといいよ
290 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 00:39:33 ] WinMergeはサブフォルダごと一気に比較すると、全部一画面で表示するから 見にくくてしょうがない。 DFみたいにフォルダごとに見れるようにしてくれよ。
291 名前:アルゴリズム初心者 [2007/10/14(日) 07:53:31 ] プログラムの中で使いたいのでこのすれにきています。そういうライブラリがあれば教えてください。
292 名前:アルゴリズム初心者 [2007/10/14(日) 07:59:15 ] ちなみにJavaです。
293 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 08:56:05 ] diff のソース読めばいいんじゃないか?
294 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 09:55:04 ] >287 さすがに手作業で同じ事はできるよな? じゃ、まずは簡単な例で手作業でやってみよう。 次に、どういう手順で行ったか書き下してみる。 で、人間なら分かるけど計算機には分からないといった about なところを詳細化する。 最後にコードに落としてやれば OK だ。 この程度で、アルゴリズムだとかライブラリだとか情報源とか探してるようだと いつまでたってもそのレベルから抜け出せないよ?
295 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 10:34:59 ] >>291 system("diff -r dir1 dir2")
296 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 10:39:33 ] ある範囲内のユニークな乱数列を作る方法を教えてください
297 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 12:55:17 ] >>296 どういう範囲内でユニーク? ユニークなことを確実に保障するのって難しいよ。
298 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 13:21:17 ] >>297 範囲というか、DBの正規化レコードのテストに使うので1〜1000万ぐらいで。 乱数をハッシュテーブルに登録してユニークな乱数列を作れないかと 思ったんですが、目的レコード件数分まわしても、重複で抜け番号が 出てくるので、一気に全部埋まる方法ないかなと。
299 名前:296 mailto:sage [2007/10/14(日) 13:24:14 ] 逆に、整列されたスカラ値の配列やリストを、 ランダムに混ぜる方法でもいいです。
300 名前:296 mailto:sage [2007/10/14(日) 13:28:03 ] あと、再現性が必要なのでシード値を取れる方法が好ましいです。
301 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 13:50:17 ] ユニークである必然性あるのかな? 全数チェックしたらw
302 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 16:24:11 ] >296 多分、ユニークな乱数列、の意味が人によって違っているような気がする。 「乱数列」がユニークであることを望んでいるのではなくて、乱数列中に表れる数値がユニーク(重複しない) ってことなんだよね? C++ で良ければ(アルゴリズムの説明にならないけど)、>299 で random_shuffle() 使うのが一番簡単かと。 あるいは、random(N) を 0〜N-1 の整数を発生する(シード値をとれる)疑似乱数生成関数として、a[0]〜a[N-1] にたいして、 for(i=0;i<N;++i) { idx = random(N); tmp = a[i]; a[i] = a[idx]; a[idx] = tmp; } で、いいんじゃない?
303 名前:296 mailto:sage [2007/10/14(日) 20:45:00 ] あー その通りです。 ありがとうございました。
304 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 20:49:40 ] >>302 そのコードだと均等に混ざらない(すなわち、全ての可能なケースが等確率で出ない)。 正しくはこんな感じ for(i=0;i<N;++i) { idx = random(N-i) + i; swap(a[i], a[idx]); }
305 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 01:55:34 ] URIの一致箇所検出に 最適なアルゴリズムってどれですかね?
306 名前:デフォルトの名無しさん [2007/11/20(火) 17:17:18 ] >>305 質問の意味がよくわからない 最長共通文字列? ところで、良いアルゴリズムというかロジックが思い浮かばないんだけど何か良いの無いかな。 配列をPivotとの大小関係で三つに区切る。 C++っぽい擬似コードで書くとこんな感じ under = partition( Begin End < Pivot ) partition( under End == Pivot ) これより計算量係数を下げたいんだけど。
307 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 08:28:25 ] >>306 係数を議論するなら計算モデルを出さないと普通不可能だし, その擬似コードの partition の実装もわからないからなんともいえない.
308 名前:デフォルトの名無しさん [2007/11/24(土) 19:00:09 ] 306 携帯からでカンマが改行になってしまいました。 >>307 具体的に計算する必要はありません。 何か他の実装が partitionの実装が分からなければSTLのソースでも見てください。
309 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 19:52:52 ] >>308 ちと文章が切れてるので何を言いたいか察しかねるが、 計算量係数ってことは O(n) で隠れてる定数部分を 評価したいんでしょ? そのためには、たとえば ・対象はどう表現されているか(リスト,配列 etc) ・n として何を数えるか(比較,イテレータの移動,スワップ etc) ・それぞれどれくらいの計算コストの差があるか なんか決まらないと、とても評価できない。 「実用上早い」ってのは知られてるけど、計算量の係数が 実際にどんくらい小さいかってのは不明。 あと、306 のコードは「C++ 風の擬似コード」じゃなかったの? それで「実装は STL を見ろ」というのではあなたの言うところの 擬似コードの意味がよくわからないんだけれど。 それに STL の partition はアルゴリズムは全く決めてないから 例えば「gcc のどのバージョンの STL の実装」とか言わないと。
310 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 23:27:09 ] 何がやりたいのかわからんので、 エスパーで問題を考えて回答しよう。 入力 *X;(1,2,4,4,4,5,6,7);//ソート済み配列,長さO(n) Pivot=4;//比較する値 Begin=0;//探索範囲? End==7;// 出力 (2,5);//(1,2),(4,4,4),(5,6,7)と分けたときの4と5のインデックス アルゴリズム B=Begin;E=End; while(E-B&g;1) if(X[(B+E)/2]>Pivot) E=(B+E)/2; else if(X[(B+E)/2]<Pivot) B=(B+E)/2; else { N=(B+E)/2; break; } 以降はBとN間、NとE間の境界を通常の二分探索で見つける。 比較回数の最悪は明らかに1回目の比較でbreakして全体の1/2のサイズの二分探索を二回行わなければならないときで、 1+2(logn-1)=2logn-1回
311 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 02:31:58 ] >>310 それはエスパー失敗 ソートされていない配列をピボットよりも 「小さい・同じ・大きい」に分ける」のが問題でしょう。
312 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:45:03 ] >>311 そんなの順番に見ていくブルートフォースアルゴリズムが自明で最速ではないか。古典では。
313 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:58:59 ] >>312 ブルートフォースという意味がよくわからないけれど、 先頭から順に見ていき、ピボットとの小中大によって 対応するリストにコピーする、というアルゴリズムのこと? もしそうであれば、普通の計算コストの設定では最速ではない。 なぜならば、そのアルゴリズムは、「要素のコピー」 が 必ず n 回発生するが、普通はコピーは比較より数倍重い。
314 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 21:55:16 ] >>313 そのアルゴリズムが最速ではないというなら最速なアルゴリズムを記述してくれ。 コピーが重いならコピーせずにポインタで参照すればいいのでは。 二段参照になるからリストの性能は落ちるだろうが。
315 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:09:04 ] >>314 「最速」かどうかは知らないが次の論文を参照。 Jon Bentley and Robert Sedgewick, "Fast Algorithms for Sorting and Searching Strings", Eighth Annual ACM-SIAM Symposium on Discrete Algorithms New Orleans, January 1997
316 名前:315 mailto:sage [2007/11/25(日) 22:12:19 ] 補足。 コピーが重いというのは、別にオブジェクトが重いとかそんなものではなく、 int の値のコピーと int の値の比較でもコピーのほうが数倍遅い。 本当に膨大なデータを処理しようと思ったときは、この定数倍が響くことがある。 (それに、上のアルゴリズムは余計な空間を使うのも痛い)
317 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:52:24 ] >>316 おk理解した。 swapで必要なところだけ入れ替えると。 swapでコピーが2重に発生するから 最悪上の単純なアルゴリズムの2倍かかってしまうが、 平均的には速いと。 クイックソートは最悪時間はバブルソートと同じになるが、 平均的にはマージソートよりも速いみたいなものと。
318 名前:315 mailto:sage [2007/11/25(日) 23:30:21 ] >>317 ちょっと理解できていないように見えるんだけどな。 計算コストをきちんと設定しないといけないと言っていて、例えば ・スワップはコピーを2回実行する ・どこへのコピーも同じ単位時間で行える みたいなモデルを考えればあなたの言ってることはほぼ正しい (というか「平均的」(何の平均かわからんが)にも単純アルゴリズムが早くなる)。 しかし、現実の CPU ではそんなことは全然無くて、実際は ・値のスワップはコピー2回よりも若干高速に実行される ・同一作業領域中でのスワップは、別領域へのコピーよりもはるかに高速 ということになっているから、「2倍かかる」という算定は全く間違い。 x86 あたりを前提に算定すると「10倍以上早い」という結論でも不思議じゃない。 このあたりはオーダにしちゃうと完全に隠れる部分だから クイックソートを例に出すのは不適当だと思う。
319 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 23:54:19 ] 具体例を見せてくれないかな。
320 名前:315 mailto:sage [2007/11/26(月) 00:33:18 ] >>319 何の具体例だい?「10倍以上遅くなる」ような実装の具体例? そんなのは、Bentley-Sedgewick の論文からコードを引っ張ってきて、 手元で適当にコードを書けば簡単に具体例になるよ。
321 名前:306 [2007/11/27(火) 15:19:23 ] >>309 だらだらコード書くよりSTL使った方がやりたいことが分かり易いかと。 ファンクタ書くのが億劫で擬似と言っただけです。 対象のデータ構造は特定しません。というかあわよくばデータ構造による差が分かれば尚良いです。…が面倒なのでランダムアクセスって事いいです。 STLは、書きながら思ったけど本当に突っ込まれるとは思いませんでした。一般に同じ様な実装だと思ってました。すみません。 確認したのはgcc3.4.4/4.2.2、VC8、bcc5.5、SGI3.3です。 >>311 補完ありがとうございます。 >>314 その最速が今揚げてる議題です。
322 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 23:05:25 ] >>321 で、コスト設定はどうするの? 少なくとも「イテレータの移動、比較、スワップ、スワップ」くらいのコスト比を 決めてくれないと、とても定数部分の違いは算定できないと思うんだけど。 現実のCPUみたいなキャッシュや分岐予測があるモデルだと、解析は さらに面倒なことになるけど、それはどれくらい考えないといけないの? あと、 Bentley-Sedgewick は読んでみた?
323 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 03:47:56 ] うざ
324 名前:デフォルトの名無しさん [2008/03/05(水) 01:18:02 ] みんなアルゴリズムをどんな風に知っていったの? ライブラリを主に使ってるから、ソート程度しか知らないんだけど、 今日、先輩プログラマにアルゴリズムも知らんのか?と言われた。
325 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 02:01:07 ] 書籍
326 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:39:34 ] アルゴリズムを知っているかどうかは使い捨てプログラマかどうかの目安の一つだな
327 名前:デフォルトの名無しさん [2008/03/06(木) 03:11:28 ] >>325 推奨書籍はありますか?
328 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 07:54:07 ] 問題が解決出来るかどうか であって、アルゴリズムを知ってるだけじゃ駄目だろ。 アルゴリズムを知ってるだけでは、Fizz-Buzz問題でさえ解けるのは半数なんだそうだ
329 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 07:55:37 ] 奥村さんのアルゴリズム辞典が定番かね。
330 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:19:28 ] Introduction to Algorithms(MIT Press)
331 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:35:24 ] >>327 [CLRS] T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms, Second Edition, MIT Press [KT] J. Kleinberg, E. Tardos, Algorithm Design, Addison Wesley [I] 石畑 清,アルゴリズムとデータ構造,岩波書店 [S] R. Sedgewick, Algorithms in C, Addison-Wesley [CLRS] はこの分野では定番で,標準的な教科書.和訳有. [KT] は最近出た本で,現代的な記述がされている. [I] は個人的にお勧めする本で,記述がやさしい.入門には適正. [S] は実装中心に書かれていて,理論より実装という人向け.和訳有. KT は最近和訳が進んでるって話もあるけど,きっとだいぶ先.
332 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:32:21 ] 日経ソフトウェア買えばええやん
333 名前:デフォルトの名無しさん [2008/03/07(金) 07:20:53 ] アルゴリズムCや珠玉のプログラミングはどう?
334 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 07:24:48 ] >>333 [S] R. Sedgewick, Algorithms in C, Addison-Wesley やん このあわてんぼさん。
335 名前:デフォルトの名無しさん [2008/03/07(金) 18:40:37 ] 「アルゴリズムC・新版」と「アルゴリズムC」って何が新版なの?
336 名前: ◆JvckrUgJWM mailto:sage [2008/03/07(金) 18:43:11 ] >>327 つ ttp://d.hatena.ne.jp/yaneurao/20050522
337 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:31:13 ] 任意の26までの数値nが与えられたときに、Aからn番目のアルファベットまでを使ったN文字 の順列をぜーんぶ列挙するのになにかよい方法ってありますか? つまりは任意の配列から総当りするためのネタ作りをしたい訳なのですが。。。
338 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:37:18 ] 順列?同じものの重複利用は禁止?
339 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 08:06:36 ] permutation でぐぐれ いっぱいサンプルプログラムが転がってる
340 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:33:12 ] >>338 はい。2が入力だったAB,BA見たいな感じのものが生成されるような。。。 >>339 ありがとうございます。見てみますね。
341 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 22:47:15 ] アルゴリズムスレで言うのもなんだけど C++ だったら STL にある next_permutation 使うと割と簡単に書けると思う。
342 名前:337 mailto:sage [2008/03/11(火) 23:54:54 ] まだ詳細は調べ切れていないのですが、こういうのって自分で手書きするなら・・・・ 並べ替えたいN個の要素のリストから一つ取っては、N-1人の自分にN-1個になったリストと自分の ポインタをそれぞれ丸投げし、N-k番目の子はk番目の要素を一つとってさらに子に・・・取るものが ラスト一個になったら、自分の親の取った要素をつなげて表示する。 みたいな実装イメージになるんでありましょうか。
343 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:07:29 ] 書き方なんていくらでもあるだろうが、俺だったらリストにせずに配列を使って再帰的には書くと思う。 っちゅーかそれこそ調べればいいんじゃないの?と言いつつ安易に書いてみる。 後、26! = 403291461126605635584000000 なんで全部回してるとやってられないと思う。 #include <iostream> int result[26]; void permutation_imp(int n, int m) { if(m == n) { for(int i=0;i<n;++i) for(int j=0;j<n;++j) if(result[j] == i) std::cout << ' ' << static_cast<char>('A' + j); std::cout << std::endl; } else { for(int i=0;i<n;++i) if(result[i] == -1) { result[i] = m; permutation_imp(n, m+1); result[i] = -1; } } } void permutation(int n) { for(int i=0;i<n;++i) result[i] = -1; permutation_imp(n, 0); } int main(void) { permutation(3); return 0; } 出力結果: A B C A C B B A C B C A C A B C B A
344 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 21:43:11 ] 参加してみた #include<stdio.h> #include<string.h> void swap(char *a, char *b){ char c; c=*a;*a=*b;*b=c; } void func_internal(char *buf, int bufsize, int left){ int i; if(left<=0) printf("%.*s\n", bufsize, &buf[-bufsize]); // 気持ち悪いかな? for(i=0;i<left;i++){ swap(&buf[0], &buf[i]); func_internal(buf+1, bufsize, left-1); swap(&buf[0], &buf[i]); } } void func(char *buf, int bufsize){ func_internal(buf, bufsize, bufsize); } int main(void){ char buf[]="abcde"; func(buf, strlen(buf)); return 0; }
345 名前:337 mailto:sage [2008/03/14(金) 03:01:52 ] >>333-334 これまた短いですね。。。なんでこんなのが思いつくのかが不思議です。 自分の思った方法でも無理ではないんだろうなとは思うのですが、擬似コードの段階で だらだらしたものになってますからね。。。 再帰ですらすら考えられる人ってあたまよさそうです。
346 名前:337 mailto:sage [2008/03/14(金) 03:02:36 ] >>345 アンカーミス。。。 >>343-34 でした。
347 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:00:14 ] 多くのアルゴリズムは定番とか定石がある。特に基礎的なものは。 このスレのタイトルの本もそういうものだわな
348 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:49:55 ] A/D変換データをソフト的な処理で安定させるやり方 として移動平均以外に何かありますか? 移動平均は平均回数をおおくとると、反応 が遅く(変化が鈍く)なるので、なるべくそうならな い方法を探しています。
349 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:10:48 ] >>348 A/D、D/A半導体 science6.2ch.net/test/read.cgi/denki/1120158621/
350 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:11:43 ] >>348 高次曲線近似とかベジェ曲線近似はどうかな?
351 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 09:17:19 ] 移動平均はFIRフィルタ LPFの一種だから係数をキチンと設計すれば応答性と安定性を両立出来る。 計算量の面では2次の IIRフィルタにすれば、応答性と安定性と計算量も両立出来る。
352 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 10:01:45 ] >>350 初めてききました。なんだかC言語で書くと難しそうですね。 >>351 係数って平均回数のことですよね?
353 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 11:45:53 ] 平均回数じゃなくて、 FIRフィルタでするという場合は、それぞれに重みを付けて計算するわけ だから、移動平均に比べて計算コストは非常に大きい 例えば、サンプリング間隔の1/5以上で変動するようなノイズを取りたいという時に 16個の移動平均をしても ノイズは1/16までしか減らないけど 0, 0.015270303 1, 0.048044002 2, 0.098545986 3, 0.151768713 4, 0.186370997 5, 0.186370997 6, 0.151768713 7, 0.098545986 8, 0.048044002 9, 0.015270303 と10個の係数かけて累積すれば、サンプリング間隔の1/5以上の成分は1/200以下に減る
354 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 15:30:03 ] 例えば 10、15、20、10 っていう4つのデータがある場合 10*0.4 + 15*0.2 + 20*0.2 + 10*0.2みたいに するっていうことですか? この重みの決め方がまた大変そうですね。 ちなみに353の例だとなんで1/200になるんですか? なんかアルゴリズムとは関係なさげな話になって 申し訳ないです。
355 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 20:34:43 ] たとえば、 sin(i*1.3)*100+200 みたいな信号が入力されたとする。 入力 移動平均 >>353 の方式それぞれの結果は 200.0 12.5 3.1 296.4 31.0 14.1 251.6 46.7 37.8 131.2 54.9 73.6 111.7 61.9 115.1 221.5 75.8 152.4 299.9 94.5 178.6 231.9 109.0 192.7 117.2 116.3 198.4 123.8 124.1 200.0 <-- 10個目から >>353 の方式はほぼ200に安定 242.0 139.2 200.0 298.7 157.9 200.1 210.8 171.0 200.0 107.1 177.7 199.9 139.5 186.4 200.0 260.6 202.7 200.1 <-- 移動平均は16個目以後でも±8程度変動する 292.9 208.5 200.0 189.1 201.8 200.0 101.3 192.4 199.9 ただしsin(i*w) のwの係数が 2*PI/5=1.25 以上の時に >>353 は効く 158.1 194.1 200.0 276.3 204.4 200.1
356 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:37:03 ] ちょっと考えてる問題があるので意見を聞かせてください。 例えば300個の積み木があるとして、これらは様々な重さ・大きさがあり、5種の色のいずれかが ついてたとします。 これらを山に積み上げて行くときに、なるべく重さのピークが高い山がたくさん欲しいけれど、以下 の条件を満たさないといけないとします。 1.大きいものほど下にある 2.一山は積み木は10個が限度だけど、赤い積み木が三つ含まれていたら8個が限度になる。 3.一山には2色しか存在してはいけないし、異なる色の境界は1箇所だけ(赤青赤はだめで、赤赤青は良いみたいな) ものすごく簡略化してしまいましたが、ナップザック問題に条件が加わったようなものになるのかと 思います。 細々とした条件・・・特に色の条件のせいで欲張り法が使えない気がするのですが、こういったものを常識的 時間で解く方法を調べたいので、キーワード程度でも教えてもらえませんか?厳密、近似は問いません。
357 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:31:07 ] >>356 「重さのピークが高い」って言葉の意味が分からない. あと,複数の山があったときにどう評価するかも分からない. 具体例をいくつか出してくれないかしら.
358 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:40:00 ] >>357 重さのピークについてですが、例えば価値=重さが 1 2 2 3 4 5 6 7 8 9 のような9個があったとして、ここから>>356 より少ないですが、2段まで積んでいいこととするならば 98 76 54 32 21 のような山できてほしくて、 19 82 27 36 45 のようにはできて欲しくないのです。 できた山の価値の標準偏差が一番でかい組み合わせになるんでしょうか・・・ 書いてて思いつきましたが、>>356 をさらにいうならば、300個から最大で10個(特例を除く)で構成される山 を例えば15個作るとき、最も15山の価値の合計が高くなる組み合わせ。 これだとまた全く別の問題になってしまうのでしょうか。
359 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:40:37 ] >のような9個があったとして 10個でした。
360 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:46:06 ] まず問題を誰にでもわかるように定義することからはじめようか。
361 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:53:53 ] >>357 問題を考えるときは,それを数式で書けるくらいまで整理しないと, アルゴリズムなんて出せるはずがない. きっとなんか解きたい問題があって,あなたはその要点のみを 取り出したつもりだと思うんだけど,取り出し方が悪くて全然分からないよ.
362 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:10:42 ] 解きたい問題は実は特になくて、この手の雑学の本を読みながら考えていたら、これは欲張り法で できるのかな?と思ったのです。 で、もうちょっと整理してみました。 ナップサックが10個、取れる品物は300個あるとしてこれらはランダムに5色のいずれかの色がついている 1.品物の価値が高いものを先に詰めねばならない 2.品物の色は、一袋には2色までしか混載できない 3.さらに一袋を詰め終わる過程で、色の切り替わる回数は一回のみ 4.ナップサック一つには10個まで入るが、赤い色の品物を3個入れていたら8個までになる 以上の満たして10個のナップサックをつくり、10袋の価値和を最大にする 2、3は、「赤赤赤赤青青青青青青」はいいが、「赤赤赤赤青青青青赤赤」だめ 4は「赤赤緑緑緑緑緑緑緑緑」で一袋、「赤赤赤緑緑緑緑緑」で一袋になるという感じ これですっきりしたよーに思いますがどうでしょう? 色がついているのと、4みたいな条件のせいで、欲張れないんじゃないかと思うのです。
363 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:10:52 ] Σ((山の重さ)^2) を最大化するの?
364 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:27:01 ] >>362 「袋の価値」は、中身の総和でいいのかな? あと、その問題は、前の問題とはかなり違うように見えるんだけど。 重さのピークってのは忘れていいのかな?
365 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:51:46 ] >>364 「袋の価値」=中身の価値の総和です。 ピークはですね。。。上手く表現できないので省いてしまってかまいません。 が、、、いいたかったことは 10袋の価値の総和が等しいケースが2ケースあった場合、満遍なく10個そろったやつよりも ばらついてる方を解としたいというような・・・・ 仮に100円なら、「10円のうまい棒10本」よりは「40円のよっちゃんイカ1つと4本のうまい棒と4円のナニカおかし5個」 の方を解としたいというような感じだったのです('A`)
366 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:11:48 ] とりあえず赤色がなければ、価値の高いものから順に100個取ってくればいいんだよね?
367 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 00:22:15 ] データをDRBDみたいな 再同期を含む同期を実行する種の アルゴリズムってどの分野に区分 されるの? 全然文献なくて困る
368 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 03:14:15 ] >>366 おそらくそうなると思います。 赤があるから制限が8個になるからって、8個でも10個詰めたときより価値が高くなることも あるし、それは調べてみないとわからないよなぁと思うのです。
369 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 06:58:34 ] suffix arrayで正規表現検索ってできるんすか? なんかsuffix trieにしないとできないみたいなんですが…
370 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:14:29 ] できる.理論上 suffix tree/trie で書けるアルゴリズムは suffix array を用いて全く同じ計算量で実行できる.
371 名前:デフォルトの名無しさん [2008/04/28(月) 22:01:30 ] なぁなぁ、教えてくれよ。 有向グラフっての? 巡回サラリーマンっての? ダイクストラ法っての? なんかそんなの。よくわからないけど。 平面上に有限の座標群がある。まぁA〜Zとしよう。 いくつかの座標間には経路がある。A-Bには経路があるが、B-Cには経路がないって感じ。 で、与えられた二点間を結ぶ全ての経路を算出するんだが、最短とか最長とかを考慮する必要はない。 とにかく、全ての経路を表示する。 座標情報はRDBに入力され、常に変動するので、計算するたびに違う結果になることもある。 乗り換え案内みたいなソフトウェアを作ろうと思ってるんだけど。 こういうのってどう考えればいいの?
372 名前:デフォルトの名無しさん [2008/04/28(月) 22:18:32 ] バルブソート の検索結果 約 693,000 件中 1 - 10 件目 多すぎだろ。
373 名前:デフォルトの名無しさん [2008/04/28(月) 22:20:53 ] バブルソート の検索結果 約 267,000 件中 1 - 10 件目 いったいどういうことだよ。 おれがおかしいのか?
374 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:38:38 ] >>371 東大かどっかの研究レポートがwebにのってたよ
375 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:26:12 ] >>373 ウェブ "バルブソート" に一致する日本語のページ 10 件中 1 - 10 件目 (0.14 秒) ダブルコーテーションで括らないと曖昧検索される
376 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 03:52:36 ] >>372 アホ。
377 名前:デフォルトの名無しさん [2008/04/29(火) 04:32:38 ] >>375 KY
378 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 12:42:32 ] >>371 条件の確認なんだけど,「二点間の経路」で列挙したいのは 同じ頂点を複数回通らないような経路でよい? あと,経路の数は半端なく多くなることがあるけど 出力順は問わないの?
379 名前:デフォルトの名無しさん [2008/04/30(水) 01:09:48 ] >>378 おー、レスサンクス! 例えば、下図のパターンで考えると、 ┌B─D┐ A| | F └C─E┘ ABDF、ACEF、ACBDF、ABCEF、ABCDEF、ACBDEF、ACDEF、ABDEFだっけ? 全体が重複してさえいなければ同じ頂点、同じパスを辿ってもかまわない。 今は、とりあえず経路の算出方法で頭をひねってる。 次の段階として、各パスにはコストを持たせ、出力する際には、パスが少ない順・多い順、総コストの多い順・少ない順、パスがnになる場合のみ出力、 ノードBが利用不能になった場合の代替経路は… とかってのを考えてるよ。
380 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 01:21:35 ] >>379 ということは ABDECBDF ABDECBDECBDF ABDECBDECBDECBDF ABDECBDECBDECBDECBDF ABDECBDECBDECBDECBDECBDF ABDECBDECBDECBDECBDECBDECBDF ABDECBDECBDECBDECBDECBDECBDECBDF ABDECBDECBDECBDECBDECBDECBDECBDECBDF ABDECBDECBDECBDECBDECBDECBDECBDECBDECBDF ABDECBDECBDECBDECBDECBDECBDECBDECBDECBDECBD........ECBDECBDECBDECBDECBDF でもOK?
381 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 09:37:50 ] >>379 重複アリだと >>380 みたいになって,経路が無限個になって「列挙」できなくなるのよ. この場合方針としては ・経路が無限個にならないように問題を変更する ・経路総数は無限個でもよいから、適当な順序で(上から有限個)出力する のどっちか.さあどうしよう? あと,そろそろ用語を正しておくと経路やパスってのは全体のことで, 隣り合ってるところは辺や枝と呼ぶのが普通ね.
382 名前:デフォルトの名無しさん [2008/04/30(水) 10:50:28 ] >>381 用語サンキュ。じゃ、座標を「節」、隣り合っている経路を「辺」、始点から終点を「経路」とすればいいかな。 それと、何となく頭の中に次みたいな考え方が頭にあったから380の指摘は頭になかったな〜。 1.まずAをピックアップ。Aには除外マークを付ける 2.Aに隣り合う節B、Cの中からまずBをピックアップしBに除外マーク。 3.Bに隣り合う節A、C、Dの内、除外マークがないC、DからまずCをピックアップ 4.Cに隣り合う節A、B、Eの内、除外マークがないEをピックアップしEに除外マーク 5.Eに隣り合う節D、Fのうち除外マークがないD、F、そのうちDをピックアップ 6.〜略〜で、除外マークがないFをピックアップし、Fは終点なのでABCDEFの経路が一つ完成 7.5でDに行かずFに至って、ABCDFが一つ完成 8.2でCをピックアップし、以下ループ ということは、378の指摘どおりだったのか。...スマソ。
383 名前:デフォルトの名無しさん [2008/04/30(水) 11:31:00 ] 各節間の距離がわかっているなら終点との距離と比較するだけでだいぶ正解に近づきそう。
384 名前:デフォルトの名無しさん [2008/04/30(水) 11:38:53 ] 乗換案内で同じ区間を2度とおる意味ってあまりなさそうなんだけど。
385 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 19:53:08 ] 赤黒木とはなんぞや。
386 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:29:01 ] 2-3-4木と等価な構造を持つ木を二分木で作るためのデータ構造。
387 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:34:47 ] 「動的計画法(dynamic programming)」で名前最悪だな。 変な名前のせいで、この手法のポイントが要するにどこにあるのか なかなか理解できなかった。 「部分問題解展開法」とかそんな名前にすれば良かったと思う。
388 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:35:36 ] ×「動的計画法(dynamic programming)」で名前最悪だな。 ○「動的計画法(dynamic programming)」って名前最悪だな。
389 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:47:58 ] "dynamic programming"はもはやFOLDOCには載ってない。 "programming"は「コンピューター・プログラミング」ではなく、「計画」のこと。 overlapping subproblems, optimal substructure, memoizationする手法のこと。
390 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 09:55:42 ] FOLDOCに載ってないことはあまり指標にはならないんじゃないかな。 たとえば "greedy algorithm" や "divide and conquer" も載ってないしね。 ネーミングの由来は、部分問題を解いて、それを元に新たな計画問題を作る感じが、 動的に計画問題を解いているっぽいから、だそうな。
391 名前:デフォルトの名無しさん [2008/05/10(土) 19:34:49 ] 挿入ソートの計算量ってどうやって求めるの? いろいろ調べてみたけど式にΣが出てきたからわけわからなくなった。 そんな馬鹿な俺でも理解できるようにだれか説明してくれないかな。
392 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 20:20:42 ] >>391 「挿入ソート」にもマイナーバージョンがいくつもあるので, もう少し詳しいアルゴリズムを述べてくれないと厳密には解析できない. まあ大雑把には,挿入ソートは ・空リストから初めて,要素を一つづつ "INSERT" する ・INSERT は,ソート済みのリストに要素を順序を壊さないように追加する というアルゴリズムなので,これを解析する. 計算量を要素の比較回数で評価することにする. 長さ m のリストに対して INSERT するときの比較の回数を T(m) と書くと, 全体での比較の回数は Σ[m=0..n-1] T(m) になる. T(m) は実装にもよるが,順番に比較していって挿入できる場所を探すと 最大 m 回の比較が発生しうる.つまり T(m) ≦ m. よって全体の比較回数は Σ[m=0,n-1] T(m) ≦ Σ[m=0,n-1] m = n(n-1)/2 = O(n^2) 多分上の説明だと分からないところがあると思うので,ここが分からんとか聞いとくれ.
393 名前:デフォルトの名無しさん [2008/05/11(日) 12:58:18 ] コメントありがとうございます。 参考にさせていただきました。 webやテキストの説明でもそれぞれ異なった説明の仕方をしていましたので多少混乱していたようです。 なんとか理解することができました。ありがとうございます。
394 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 16:30:27 ] コムソートってこれでOKだよね? void sort(int[] data) { for (int h = data.length * 10 / 13; h >= 1; h = h * 10 / 13) { for (int i = h; i < data.length; i++) if (data[i-h] < data[i]) { int w = data[i-h]; data[i-h] = data[i]; data[i] = w; } } } 普通にクイックソート並みに速いけど。どうなんでしょう? クイックソートと違って欠点が無いように思う。 クイックソートの方が速いって反論よろしく。
395 名前:デフォルトの名無しさん mailto:age [2008/05/30(金) 18:38:56 ] 反論ないなら最速ソートアルゴリズムの座を奪いますよ〜
396 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 19:02:59 ] 今、標準ライブラリと勝負したら負けたわ。 アルゴリズムはもちろん、クイックソート。ただし、工夫されているとのこと。 自作のクイックソートがダメなだけだった。 なので反論は遠慮しとく。
397 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 19:07:41 ] >>394 やってみたけどstd::sort()の1/2程度の速度しか出ないじゃん
398 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 22:02:40 ] >>394 速度以前に正しくないんでは? [1,6,3,4,3,1,6] → [6,4,6,3,3,1,1] となったけども。
399 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 11:16:46 ] クイックソートはきちんとチューニングしてきちんとコーディングしてこそのもの。 岩波ソフトウェア科学シリーズの『アルゴリズムとデータ構造』のクイックソート の項目は読むべき。
400 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:30:24 ] >>398 comb sortについてよく調べると、ギャップが1になったら普通にバブルソートにするようです。 しかも、その時に整列済みか確認しないといけないようです。 ギャップがある程度(16ぐらい)に小さくなったら、挿入ソートに切り替えってのを試したら、意外と速いです。 ただのシェルソートっていう突っ込みは(ry
401 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 09:25:07 ] >>400 > ギャップがある程度(16ぐらい)に小さくなったら、 > 挿入ソートに切り替えってのを試したら、意外と速いです。 これはquick sortもそう。 特にintとかチンケなものをsortしているときは。
402 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 11:13:39 ] >>401 いかにもオリジナル的な書き方になったのはすみませんが、それは知っていました。 ついでにちょっと改良したやつを。 コムソートの部分をシェーカーソート風にすると、より良いです。(オリジナルではないです) シェーカーソートはバブルソートを双方向から行います。 シンプルさが売りなのにちょっとゴチャついてるので、本当はシェーカーソートは外したいんですけどね。(つづく) void sort(int[] data) { for (int h = data.length * 10 / 13; h >= 17; h = h * 10 / 13) { for (int i = h; i < data.length; i++) if (data[i-h] < data[i]) swap(data, i-h, i); h = h * 10 / 13; if (h < 17) break; for (int i = data.length - 1; i >= h; i--) if (data[i-h] < data[i]) swap(data, i-h, i); } for (int i = 1; i < data.length; i++) { int w = data[i], j = i; for (j = i; j > 0 && data[j-1] < w; j--) data[j] = data[j-1]; data[j] = w; } } void swap(int[] a, int i, int j) { int w = a[i]; a[i] = a[j]; a[j] = w; }
403 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 11:21:56 ] 欠点は挿入ソートの欠点がそのままになっていて、データ数が多いときに少ないときに比べて遅くなります。 解決策として、2分挿入ソートが良さそうです。 ただ、さっきも書いたとおり、コムソート(バブルソートの改良)と挿入ソートの組み合わせという 単純なアルゴリズムで結構速し、特に欠点なしという所をアピールしたいので、まぁそのままで。 Javaの標準ライブラリとは同じぐらいの速さですが、興味があれば勝負させて見てください。でわ。
404 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 11:23:25 ] 「他の言語でも」が抜けてました。
405 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:01:44 ] 純粋なアルゴリズムの話じゃないけど、 今なら分散処理できるようなデータ構造やアルゴリズムの方が良いかもな。マルチコアだから。
406 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:41:48 ] >>403 たった1000000個くらいのランダムデータに対しても std::sort() の1/2未満の性能しか出ないよ。 ソーティングの世界では一瞬でも遅いのは大きな欠点。
407 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:11:39 ] >>406 その通りで。 あれから、VC++をダウンロードしてちょこっと試してみたんですが std::sort()の前にまずはCの標準のqsort()でやったところ qsort()の方が全然速かったです。qsort()の方がstd::sort()よりも速いのかもしれませんが 試す前にやめました。(C++をあまり知らないということもあって)
408 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:21:04 ] たいていはstd::sortの方が早いんだけどね。
409 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:23:30 ] STLPort使えよ
410 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:13:13 ] 比較処理がインライン化される可能性のある std::sort の方が 確実にインライン化されない qsort よりも一般に速い。
411 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 23:56:21 ] b+-treeに関する詳しい解説があまり見つからないんだけど、 要はb-treeとなにが違うの? 突然の話題で申し訳ない。
412 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 09:25:03 ] ttp://en.wikipedia.org/wiki/B%2B_tree
413 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:55:46 ] >>411 葉にデータを集めたり、葉同士をリンクリストで繋げるなど、積め方を 工夫して末端の葉へのアクセスを単純にできるようにしたのがB+木。 (B木でもイテレーションは再帰やスタックでできるが) B+木のノードの追加削除は複雑で、手間の割にうまく実装しても速度は 素のB-Treeに劣る。空間効率は良くなるので外部記憶で使うとか、 構造上範囲検索で有利に働くので、それを多用するなら意味がある。 B木でもキャッシュやファイルマッピングが使える状況だと空間効率を除き 差はほとんどない。
414 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 16:37:27 ] red-black-treeにおけるinsertやdeleteはいろいろなサイトに掲載されているのですが、 木の分割についてのアルゴリズムがどこを探しても見当たりません。 バランスを保ちながら木を2つに分割するアルゴリズムは存在しないのでしょうか?
415 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 07:19:15 ] insertやdeleteを組み合わせればできるんでは
416 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 22:53:42 ] て言うか分割って何?
417 名前:414 mailto:sage [2008/07/04(金) 23:48:17 ] >>415 ありがとうございます。一応insertとdeleteの組み合わせではできたのですが もっと早い方法が無いのかと思って書き込みました。 もう少し考えてみます。 >>416 木をある値を境にして二つの木に分けたい、という意味です。 一つ一つのノードを木からdeleteして新しい木にinsertしなおせばできるのですが、 もっと単純にやる方法がないかと探しています。
418 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:55:24 ] >>417 > 木をある値を境にして二つの木に分けたい 任意の値と言うこと? なんかいい方法ありそうなが気がするが、俺の頭では無理だ...。
419 名前:415 mailto:sage [2008/07/05(土) 13:40:03 ] 順序はできてるんだから、適当に並べ替えるだけかと。
420 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 14:48:09 ] その並べ替えるコストを問題にしてるんだが。
421 名前:414 mailto:sage [2008/07/06(日) 00:40:59 ] >>418 そうです、任意の値を境にして二つのred-black-treeに分割したい、という意味です。 >>419 なるべくo(logn)の係数を抑えてやりたいのです。。。 >>420 そうなんです>< いろいろ考えてみてはいるんですが。。。どうしてもバランスがとれなくて 困っています。
422 名前:415 mailto:sage [2008/07/06(日) 01:32:25 ] 平衡2分木は1 2 4 8 16・・と、2のべき乗でノードが増加するのが 判ってるから、分割した要素の総数から大雑把に見積もった 空のツリーを作成しておいて、データの穴埋めをしていけば 線形時間で済むでしょ。 例えば1から10までの要素で平衡木を作るなら1+2+4+8の 15に収まる4階層の平衡木が確定する。 あとは右端からトラバースして埋めていくだけ。 7 4 9 2 6 8 10 1 3 5
423 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 07:16:54 ] なんでわざわざ分割操作を赤黒木でやろうとしてるの? 探索木で分割自体が O(log n) でいくようなものもたくさんあるでしょや。
424 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 23:28:29 ] >>421 平衡木を適当にぶった切ったら、もうそれは平衡木ではない。 バランス取れなくて当前。 比較は必要ないが、結局双方の木でdeleteやinsert相当の 回転操作をやる必要がある。
425 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 14:46:34 ] ドラえもんがポケットから目的の物を見つける時、どんな探索アルゴリズムを使ってるんだろう。
426 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 18:47:51 ] O(1)が基本だろうが語彙が特定しない場合は自己組織化探索も入ってるな
427 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 19:08:03 ] 確かのび太がスペアポケットで、しらみつぶしに探してた気はするw
428 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 19:29:59 ] ソートキーは名前以外の可能性が高いな 価格か商品番号か購入順か オレは購入順を推しておこう
429 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 20:01:37 ] 緊急時に限っていらないものが出てくるから購入順ではなさそうだが。 物の名前の一部などであいまい検索で引っかかったのを片っ端から探るとか。 あわててるとクエリの生成が適当になる。
430 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 00:09:11 ] コミックスを見比べたわけじゃないが 緊急時に出る道具ってある程度固定されてる気がする。 夢確かめ機みたいなろくでもないのは毎回出てくるだろ? ポケットの中身はおそらく、ろくでもない順(=Fに愛されてる順)にソートされてる。
431 名前:425 mailto:sage [2008/07/25(金) 04:18:33 ] おまえらバカじゃねえの
432 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 09:26:30 ] 425さんの賢いところを見せてください
433 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 10:33:52 ] >>429 たしかドラポケットは「思ったものが出てくる」仕組みなので、慌ててる ときにいらんもんが出てくるのは、そもそもの探索キー(思考)がgdgdなん だと思われ。
434 名前:425 mailto:sage [2008/07/25(金) 13:31:18 ] >>431 お前誰だよw
435 名前:424 mailto:sage [2008/07/25(金) 15:24:52 ] >>434 オレオレ、オレだよ
436 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:41:23 ] 名無しだよ
437 名前:デフォルトの名無しさん [2008/08/08(金) 02:49:00 ] チャットプログラムを考え中なのですけど、軽く自信がないところがあるので質問させてください。 ブラウザで前回の更新時以降に追加されたログのみを受け取り、 ログ出力に反映させる。という部分を作っているのですが、 サーバのデータを受信する時の形式をどんなふうにしようか少し悩んでいます。 今のところは (受信成功確認用の文字)<>時間<>発言者<>発言<>文字色 ・・・・以降受信が必要な分だけ時間から文字色のデータをループで渡す。 のようなことを考えているのですが、 何となくデータに若干の抜けがあったら結果が変なことになりそうな気がしてるのですが、 問題は無いでしょうか?
438 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 05:37:58 ] go webprog
439 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 07:50:26 ] アルゴリズムではないな。
440 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 08:53:59 ] <> と発言したらどうなるか見てみたい
441 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 17:59:54 ] <>
442 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 08:06:54 ] >>441 やりはじめはその手の処理忘れるよな
443 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 05:02:14 ] うまい方法が思いつかないので知恵を分けてください。 一定の半径を持つ円の中に点(座標)をランダムに打ちたい。 条件は、中心から一定距離までは打たない、円周になるほど高頻度で打ちたい 使える物は、精度(分解能)のよくないSin(Cos)テーブル 高級ではない言語と低レベルな頭脳なので、できれば数学系ライブラリとかを使わずに 計算や乱数などで済ませたいです。 具体例ではなく考え方でも構いません。
444 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 06:28:21 ] >>443 こんな感じ? www.dotup.org/uploda/www.dotup.org0569.png
445 名前:443 mailto:sage [2008/08/29(金) 07:05:54 ] >>444 まさに理想形です。 可能な範囲で助言をいただけると嬉しいです。 今更かもしれませんが、補足 中心から方向Xに距離Rで配置すると中心の密度が上がってしまうので困ってます。
446 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 07:29:24 ] >>445 方向X、円周からの距離Rの片側正規分布で一定以上は切ればいい希ガス。
447 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 08:51:36 ] 偏角は一様分布で出して、 中心からの距離を、 一様分布に対して 1/r かけたもので作れば r に比例した分布になる。 1/r^2 とかかけとけば 442 みたいな分布になると思う。
448 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 10:02:34 ] >>443 x=乱数; y=乱数; if(x*x+y*y<r*r) 点を打つ;
449 名前:443 mailto:sage [2008/08/29(金) 11:38:57 ] みなさんありがとうございます。 乱数は一様乱数しか知らなかったので、正規乱数を使う事で解決しました。 ありがとうございました。
450 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 07:10:18 ] piece tableのサンプルコード等ありませんでしょうか
451 名前:デフォルトの名無しさん [2008/09/02(火) 14:25:43 ] データベース等に詳しい方教えてください。 B+木を実装する際に、ページに複数のエントリを入れる場合、 ページにできるだけたくさんエントリを入れようとすると、 空間効率は上がるが、木がバランスされなくなると思うのですが、 実際はどのような実装するのが普通なのでしょうか? ページに入れるエントリ数を固定するのでしょうか? (その場合は、エントリのサイズが小さい場合は、空間効率が悪くなるし、 大きい場合は、1ページに入らないといった問題がおきて、 実装がややこしくなりそうと思っています。)
452 名前:デフォルトの名無しさん [2008/09/02(火) 14:32:31 ] 451です。 一般的には、 次数を d としたとき、d <= m <= 2 d となるような m が各ノードのエントリ数となる ということは理解していますが、 エントリのサイズが可変の場合は、最大2d個のエントリをどう格納するのかが よくわかっていません。 * ページサイズを可変にする * ページサイズは固定で、入りきらない場合は複数のページを使う この辺があると思っています。
453 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 20:16:03 ] ページに入るエントリ数は固定。 バランスされなくなるって、ノードの兄弟を見ながら 2dに収まるように分割してくんだよ。 ほとんど理解できてないみたいだから より単純なB木から学んだ方がいい。
454 名前:デフォルトの名無しさん [2008/09/16(火) 18:38:15 ] 4つの都市A、B、C、Dのそれぞれの距離がわかっている状態で、 xy平面上に正しくA、B、C、Dを配置したいのですが考え方がわかりません。 アドバイスをいただけないでしょうか?
455 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 19:12:08 ] 回転どうすんだ
456 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 21:57:19 ] >>454 三角関数
457 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 22:07:09 ] >>454 回転が確定しなくていいなら、相対測位とかいうキーワードでぐぐれ。
458 名前:454 [2008/09/17(水) 16:07:09 ] 455様、456様、457様返信ありがとうございます。 余弦定理を用いて半径ACと半径BCの円の交点を考えC点を導いたのですが 次のD点を考えるときに半径AD・BD・CDの円が(当たり前かもしれませんが)1点で交わらないので求められませんでした。 455様と457様が言っている「回転」が必要だなと思い、 B点をA点のまわりで距離ABを保ちつつグルグル回るようにしたのですが、どうも違うみたいで困ってしまいました。 回転についての詳しい説明を教えていただけないでしょうか? 今は下のような状態になっています。 ttp://www.dotup.org/uploda/www.dotup.org0494.png 赤・青の円は半径AC・BCの円でC点(黄緑)を求めました。 薄い赤・青・緑の円は半径AD・BD・CDの円でとりあえず円AD・BDの交点から仮のD(紫)を導いたところです。 よろしくお願いします。
459 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 17:00:27 ] 4点が平面上にないだけじゃないの? 分かりやすい座標で1回やってみた方がよさげ。
460 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 22:38:41 ] 3点の位置が決まって距離もわかってて4点目が交わらないってあるのかな? 各点間の距離データはあってるんだよね??
461 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 00:59:48 ] 現実の都市間の距離だったりして・・・ とはいえその場合でも、対称を同一視すれば一意に求まるはず。
462 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 02:23:10 ] >>459 ,461 そ れ だ。 現実の都市間の距離で、球面上には矛盾無く配置できるけど平面上では矛盾無く配置できないとかな。 とりあえず454はそれぞれの距離を提示するべき。
463 名前:454 [2008/09/18(木) 14:11:16 ] 459様、460様、461様、462様返信ありがとうございます。 まず都市ABCDが現実に存在する都市かどうかですが、この世に存在しない都市を仮定しています。 そのため距離は毎回乱数で定まっています。 最初に断わっておくべきでした申し訳ないです。 4点が同一平面上にない場合があることは考えていませんでした。 今回の考え方を元に、単語同士の非関連度を距離に置き換えてそれぞれを配置するプログラムを作ろうかと思っていたのですが、 平面上のみで考えるのは無理があるのでしょうか。
464 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 14:40:44 ] 4点をa,b,c,d、それらの間の距離6つをab,ac,ad,bc,bd,cdと書くことにする。 距離を何の制約も無しに乱数で作ると、それは4点間の距離と言えないものもできてしまう。 a,b,cで三角形になるのだから、ab+bc>acなどの制約が必要。 a,b,c、a,b,d、a,c,d、b,c,dの各組が三角形になる制約を満たすなら、 4つの点a,b,c,dは4面体を作る。
465 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 17:25:13 ] 何点あっても、二点間の間での距離だけを定義すればうまくいくんじゃね? 完全ランダムでは無理条件ができるけど
466 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 20:06:30 ] >>465 > 二点間の間での距離だけを定義する という意味がわからないけれど, 『任意の二点間で三角不等式が成立するならば実現可能」 という主張なら,4点で反例が構成できる: d(12) = 1, d(13) = √5, d(14) = √2, d(23) = 2, d(24) = 1, d(34) = 1
467 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 20:25:51 ] これは非常に有名な問題(グラフ実現可能問題). 以下の事実が知られている. 定義: n×n 行列 D = (d_ij) が EDM であるとは, ある点 p_1, ..., p_n ∈ R^k が存在して, d_ij = |p_i - p_j|^2 が成立することをいう. k を D の埋め込み次元という. I を単位行列,J をすべての成分が 1 の行列とする. 定理(Schoenberg, Young-Householder): 対称かつ対角成分がゼロの非負行列 D が EDM であることと, G := -V D V / 2 が半正定値であることが同値. ただし V = I - J/n である. また,G = X X^T を コレスキー分解としたとき, X の列ベクトルは D の実現となる. なので,与えられたデータから行列 D を構成して G を計算してコレスキー分解すれば埋め込みが決定できる. もし rank G > 2 だったら平面には埋め込めない. 詳しくはEuclidean Distance Matrixなどで検索してくれ.
468 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 00:48:36 ] 質問させて頂きます。 XY平面上に、その座標データを保持するオブジェクトが複数個あり、 それらの座標はそれぞれランダムだったとします。 それぞれのオブジェクト間の距離が一定以下の場合は、 一定距離の間隔を置けるように引き離し、 さらにオブジェクトの距離の一番近いオブジェクトを探す というようなことをしたいのです。 この処理はリアルタイムループ内で実行するので、 引き離しは1距離だけ離れるだけで十分であるとします。 一応は下記のようなプログラムで実装は出来ているのですが、 オブジェクトの数が増えた場合に処理が急激に重くなります。 この処理の計算量がn^2であるので、 オブジェクトの数が100、200と増えていった場合には とてもリアルタイムループでは遅すぎる速度になってしまうのです。 何とかしてこの計算量を減らす方法はないものでしょうか?
469 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 00:50:56 ] >>468 簡略 #define n 200 struct Object { double x, y; int near; } op[n]; double dx, dy, dr, drmin; for(int i = 0; i < n; i++) { drmin = 1000000; //とりあえず大きい数 for(int j = 0; j < n; j++) { dx = op[i].x - op[j].x; dy = op[i].y - op[j].y; dr = sqrt(dx * dx + dy * dy); //一番近いオブジェクトを探す if (dr <= drmin) { op[i].near = j; drmin = dr; } //一定距離以内の場合は引き離す if (dr <= 400) { op[i].x += dx / dr; op[i].y += dy / dr; op[j].x -= dx / dr; op[j].y -= dy / dr; } } }
470 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 01:27:09 ] >>468 動的ボロノイ図を使えば,一反復が O(n + k log n) でできる. ただし k は引き離す必要のあるペアの数. ただ,これは実装が結構しんどいので,現実的には x 座標でソートしたリストを盛っておいて,x 座標の近い順に見て 枝刈りするのが有力だと思う (x 座標が一定距離を超えたら,距離が一定距離以下にはならない等) 計算量は最悪 O(n^2) だから変わってないけれど,現実的には改善されるはず. なお,ソートは最初の一回だけ行えば,あとは引き離したところだけ更新すると 多少の効率化ができる.
471 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:43:55 ] >>470 動的ボロノイ図は調べてみましたがサッパリ理解できませんでした(汗 なので後者のソートして近いところから探す方法を試してみたところ、 オブジェクト800個くらいまでは実用レベルの速度で動くようになりました。 但しやはり位置関係によっては重くなることもあり、 必ずしも安定しているとは言えませんが、 総当りに比べれば桁違いの速度になりました。 ありがとうございました。
472 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:01:01 ] 「一定距離」の間隔でマス目に区切って、マス目毎にデータをコレクションで持ち、 引き離し処理をするときには、データとその周囲の9マス分の範囲だけ調べるとか。 □□□□□ □■■■□ □■▲■□ ←▲のところが自分の属すマス □■■■□ □□□□□ データの散らばってる範囲が狭過ぎると密集して役に立たないし、 逆に広過ぎるとマス目の管理を工夫する必要があるけど。 あと、「一定距離」以上でも最も近い点を取得する必要があるなら、これじゃだめかも。
473 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:06:33 ] ヒューリスティックだけど、自己組織化で適当に動かしてみるとか。
474 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:26:32 ] すまん、図形描画アプリみたいなものを作ってるんだが・・・ 次のようなもので悩んでます。 1.複数の矩形があるときに同じところを再描画しないように無駄なく描画する矩形を計算するにはどうしたらいいか? 場合によっては複数矩形を包含する矩形で一度に描画した方がいい場合も含む。 総当たり以外でエレガントな方法というとどんなんざんしょ? 2.同じような話なのかもしれんが、矩形と線分(曲線含む)が混在してる場合で描画する矩形にかかる部分だけの線分を描画する効率のいい方法。 教えてエロイ人・・・
475 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 12:15:00 ] メモリが許せば、思い切って座標にオブジェクトを持たせるとか。
476 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 12:15:42 ] >>475 は>>468 にです。
477 名前:468 mailto:sage [2008/09/20(土) 18:05:06 ] お返事ありがとうございます。 >>472 空間分割とかいうやつですかね? しかしこれは「最も近い点を取得する」という場合に やはりお察しのように問題がありまして、 結局こちらの方法は諦めたのであります。 一応この最も近い点を探す距離も制限されてはいるのですが、 結構範囲が広いのでその表現は省かせていただきました。 >>475 これはその空間分割の究極ですね・・・ しかしこれはまた違う方向で膨大な判定量になりそうな気がします。
478 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:00:54 ] >>477 472の亜種だと思うけどX,Y軸上でソートして、各軸上の分布をクラスタとして扱うっていうのがGameProgrammingGEMに載っていた。
479 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 21:40:57 ] >>474 問題が明確じゃないのだけれど, (1) 『描画する』条件は,単に『別の矩形に包含されないこと』でよい? それとも,矩形間に上下関係(例: Windowsのウインドウ)がある? (2) 『描画する』条件は (1) と共通ということでよい? それと,曲線はどのような形で与えられる?(例:ベジエ曲線) 何にせよ平面走査型のアルゴリズムが有力に動くと思う.
480 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 11:23:34 ] ナップサック問題とは、価値と重量があるものを、入れられる重量に制限がある箱に 一番価値が高くなるように効率よくいれるにはどういれたらよいかの手順を考える問 題ですよね。 これに、価値が高くなることに加えて、入れる順番も重さがあるものから入れる、あるいは 軽い順に入れるなどの制限が加わった場合にどのようにすればよいかという解法は 存在しますか?
481 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 11:59:36 ] >>480 入れるものを決めた後で重量でソートすればいい
482 名前:474 mailto:sage [2008/09/21(日) 12:35:56 ] >>479 不明確ですいません・・・orz 1.矩形間に上下関係有りです。ただその辺含めてまとめて”無駄な矩形を省く”というかたちでまとめられないかと。 2.描画の段階ではパラメトリック曲線から計算された連続した直線になると仮定しています。 平面走査型ちょっくらぐぐってきます。
483 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 00:32:18 ] >>481 書くべき事がたりませんでした。。。 では更に、例えば前に入れたものよりn単位以上軽いものは配置してはいけない というような、ソート後にだめだという事がわかってしまう場合はどうでしょうか?
484 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 02:43:01 ] DP使うしかないんじゃない?
485 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 09:49:23 ] >>480 状態を (現在の重さ,最後に入れた重さ,現在の価値) という三つ組みで持つ. 重さが自然数であれば,品数を n,重さの最大値を W としたとき 普通の動的計画法に基づく O(n W) アルゴリズムを修正すれば O(n^2 W) のアルゴリズムが簡単に作れる. 重さが実数であれば,基本的には枝刈り探索しかないのだから, 上の三つ組みを持って適当に探索する. 本気を出すなら,品数や重さなどによって適切な探索法が変わるけど そこまでがんばるかい?
486 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 11:07:05 ] >>482 もうググって見つけたかもしれないけれど, 1 に関しては平面走査型アルゴリズム(plane sweeping)が考えられる: ・y 軸に平行な直線を考える(走査線と呼ぶ) ・走査線を x = -∞ → +∞ に移動させていく. ・走査線に新たな矩形が乗ったら走査線上の矩形とだけ描画判定を行う. 走査線は y 座標でソートされた二分探索木を用いると, 描画判定を行うべき矩形を O(log n + k) 程度で列挙できる. 二分探索木を管理するのが面倒ならリストで持ってもよいが, これだと列挙に O(n) かかる. (矩形がそれなりに散らばっていれば,現実的には相当改善する) こういうのは「線分交差列挙」などで調べると参考になると思う. ちなみに矩形が動的に増えたり減ったりするような状況設定なら, 空間分割木などの幾何データ構造を使うことになる. 2 に関しては,描画の段階でなくて,データの段階でどうなるかが問題. もしデータの段階で「連続した線分の集まり」と思ってよいなら, 1 の平面操作型アルゴリズムに走査線に線分が交わったら云々を追加するだけ. それがダメなら,扱う曲線のデータ構造が分からないと,どうしようもない. たとえば『曲線の方程式 (x(t), y(t)) が与えられる』くらいだと, 曲線と矩形の交差を全チェックするしかない.
487 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 01:27:20 ] ポリオミノ自動生成アルゴリズムって、起点を中心にどんどん成長させていって、 それぞれ検証する意外に、もっと早そうな根本から違うアルゴリズムって有るかな。
488 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 19:54:18 ] 自動生成って何? 指定したサイズのもの全てとか、小さい順とかで列挙すること? それとも、条件を満たすもののサンプリング?
489 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 21:02:22 ] nの数を与えて、その全パターンを出すアルゴリズムです。 n=7なら、108通り全部とか。
490 名前:デフォルトの名無しさん [2008/10/19(日) 01:32:31 ] あげ
491 名前:デフォルトの名無しさん [2009/01/18(日) 20:54:29 ] age
492 名前:デフォルトの名無しさん [2009/01/19(月) 19:28:43 ] 良スレの予感
493 名前:デフォルトの名無しさん [2009/01/19(月) 23:10:09 ] DBMについて興味があり、最近書籍やウェブなどをあたっていました。 B-Treeなどのアルゴリズムについてなんとなく理解したのですが、 それをどのように外部記憶上に保存するのかについてあまり見つかりませんでした。 C言語で実装されているソースの解説などどこかにあるでしょうか。 もう少し実力があればTokyoCabinetなどを解析すればよいのでしょうが、 ちょっと敷居が高いです。
494 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 01:02:00 ] いきなりF1に乗ろうとする奴っているよね。
495 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 06:57:31 ] >>493 >それをどのように外部記憶上に保存するのかについてあまり見つかりませんでした。 互換性が要らないならバイナリでダンプしてもいいし、サイズを優先してバイナリで writeしてもいい。互換性を重視するならテキストでwriteするといい。 速度を優先するならseekしたほうがいい。言語によってはシリアライズ機構がある。 よく分かっただろう?
496 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 08:09:55 ] >>493 自分で実装したC#のソースなら持ってるけど
497 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 18:34:35 ] そのseekってなんのこと?
498 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 06:32:12 ] 速いライブラリを自分で探せってこった。
499 名前:デフォルトの名無しさん [2009/03/20(金) 20:01:14 ] 499
500 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 20:56:21 ] 500
501 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:16:26 ] >>493 ISAM
502 名前:デフォルトの名無しさん [2009/03/20(金) 23:09:41 ] page4.auctions.yahoo.co.jp/jp/auction/d91264064
503 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 00:32:52 ] 多角形の頂点の座標が配列で与えられている時に その図形の重心を求めるアルゴリズムを教えてください。 頂点の数は3以上。 全ての辺について、他の辺と交差することは無い。 一つの角の大きさは0〜360度。
504 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 00:43:45 ] 三角形の場合なら公式かなんかあったんだっけ?重心って。 多角形の場合は、三角形に分割して、 それぞれの重心に対して、面積で重み付けして相加平均かな。
505 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 00:58:49 ] 504で十分だけど、以下も参考になるかもしれない。 oshiete1.goo.ne.jp/qa4821139.html
506 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 01:09:53 ] >>504-505 これで先に進めそうです。 ありがとうございました。
507 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 10:28:33 ] ははは
508 名前:デフォルトの名無しさん [2009/06/21(日) 20:30:51 ] 漏れはアルゴリズム考えてると頭痛がしてくるからブルートフォースでいいやと思ってたけど 百万個を20ステップでバイナリサーチするlog nの威力を前にしてあっさり宗旨替えしたw
509 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 21:06:10 ] バルバロイもそうやって教化されていくんだな
510 名前:(ナワバリ付き)グループ内問題なら処理を軽くする法 mailto:sage [2009/06/21(日) 21:48:11 ] >>468 見てとっさに「過密ストレス指標」と 「指標が高い奴は低い奴に八つ当たりOK」 っていう移動対象絞り込み方が浮かんだ… 特定対象ばかりが連続移動を避けたい時? 実際には、完全独立自由主義でなければ ご近所さんグループで扱う方がいいかな グループ内成員どうしが比較的接近してて 他のグループの成員とは離れている場合 「外」への移動を好ませればいいのかな 平面なら上が第一候補、ダメなら右など 優先でダメなら時計回りに選択肢変更 一通り計算後グループ内を一斉移動 明確なグループがなければ初期座標で分類 以降はそれに従う(大きな変動がなければ) 通信などによって掛かる時間が移動させる 対象の個数そのものならこんな感じかな? 均等に散らばってれば走査線が一番? 研究・ライブラリ等充実してるようだし (「MMORPGのアイテムやPCの移動じゃないんだから…w」 ※身内や同画面内の都合なら移動もガマンしてくれる等
511 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 23:33:24 ] そうは言うけど、ソートしとかないと駄目じゃん。 ソートのステップ数も入れて考えられた?
512 名前:デフォルトの名無しさん [2009/07/27(月) 18:33:04 ] あげ
513 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 21:07:38 ] COSS age。今年は東工大でやってるわけだが、参加してる人はいるかい。
514 名前:デフォルトの名無しさん [2009/07/29(水) 07:01:46 ] 素数をぷりぷり生成し続けるアルゴリズムを教えて下さい
515 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 07:07:20 ] つ[エラトステネスの篩]
516 名前:デフォルトの名無しさん [2009/07/29(水) 07:15:13 ] 2 3 5 7 9 11 13 ..ってプリプリ垂れるんですよ だとしてもエラトスに帰着されるのですか?
517 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 09:05:55 ] >>516 「ぷりぷり生成」の意味が曖昧。
518 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 09:17:27 ] www.nicovideo.jp/watch/sm7061127
519 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:23:11 ] 一般的に次の素数を求める方法、というのは存在しない。 したがって、(最初の2を別として)奇数を順に生成して、それを ふるいにかけるという方法しかない。
520 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:42:47 ] >>519 > 一般的に次の素数を求める方法、というのは存在しない。 マジ?詳しく教えて
521 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:25:07 ] >>517 2 からスタートして永遠に次に大きい素数を吐き出し続ける事とします
522 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 14:38:46 ] >>521 メモリは無限にあるとしてよいならば試し割りなり篩なりで十分。 高々有限ならば、不可能。
523 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 15:18:33 ] >>522 無理しなくていいよ たまには素直になろうね
524 名前:デフォルトの名無しさん [2009/07/29(水) 16:11:26 ] なに上のレス?おつむおかしい人? >>516 のように2,3,5,7,9,11,13とぷりぷりたれるだけなら、 a[0]=2,a[1]=3,a[n+1]=a[n]+2で十分だろ 9を素数だと思ってんだしさ このテの人はどうせめちゃくちゃ大きい素数なんて出力させないんだし、 試し割りでも採用してればいいだろw
525 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:19:43 ] これは酷い
526 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:39:48 ] 馬鹿にしないで下さい><
527 名前:デフォルトの名無しさん [2009/07/29(水) 17:28:28 ] long a[100000],al=0;for(long i=2;i<200;i++)for(long j=0;(j<al && a[j]*a[j]<=i)?i%a[j++]!=0:0==printf("%d : %d\n",al,a[al++]=i);); これで200個ぷりぷりでます これ以上圧縮してかけなかったw
528 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 18:34:01 ] ぐぐったもの。動作確認はしていない。 x[1<<15],w=1200,p,r;main(s){for(;++s<w;)for(x[p+=r==1]=r=s;s%--r;);}
529 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 19:31:03 ] 毎回エラトスするよりも 素数はメモライズしていった方が速いわけですね でもこのやり方はメモリも無尽蔵に使うということですかね
530 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 19:59:53 ] FOR N=1 TO 12251:PRINT PRM(N):NEXT
531 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 20:46:49 ] そういえば、一つ前の素数を返すアルゴリズムはみつかってたような気がするな 確かwikiで見たが、思い出せん
532 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 20:54:28 ] 一つ前の素数じゃなかったし、まだ証明されてなかった(フォーチュン予想) これとは別に、wikiに解が素数となる式が載ってるね 常人には理解不能だわ wz + h + j ? q = 0 (gk + 2g + k + 1)(h + j) + h ? z = 0 (16k + 1)3(k + 2)(n + 1)2 + 1 ? f2 = 0 2n + p + q + z ? e = 0 e3(e + 2)(a + 1)2 + 1 ? o2 = 0 (a2 ? 1)y2 + 1 ? x2 = 0 16r2y4(a2 ? 1) + 1 ? u2 = 0 n + l + v ? y = 0 (a2 ? 1)l2 + 1 ? m2 = 0 ai + k + 1 ? l ? i = 0 ((a + u2(u2 ? a))2 ? 1)(n + 4dy)2 + 1 ? (x + cu)2 = 0 p + l(a ? n ? 1) + b(2an + 2a ? n2 ? 2n ? 2) ? m = 0 q + y(a ? p ? 1) + s(2ap + 2p ? p2 ? 2p ? 2) ? x = 0 z + pl(a ? p) + t(2ap ? p2 ? 1) ? pm = 0
533 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 22:48:35 ] >>532 どこのwikiに載ってたの?
534 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 07:13:02 ] Wikipediaをwikiって略すなー、な所だな
535 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 12:13:47 ] ところでウィキペディアにフォーチュンの予想はない件
536 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 12:42:35 ] フォーチュンってどれくらい偉い人? 声優で喩えて
537 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 13:38:19 ] 石丸博也くらい
538 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 15:11:05 ] そんなに偉い人だったのか 僕もヌンデマス
539 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:33:34 ] >>535 google books で、ウェルズのプライムナンバーズの訳本が読めるぞ。 該当箇所は、P122だけど、ちょうどそこは読める範囲にある。 興味があればどうぞ。
540 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:19:19 ] フォーチュンってサモアのデマで有名なマーガレット・ミードの旦那かよ
541 名前: tor.rootkit.de mailto:age [2009/08/17(月) 17:57:46 ] 自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L 名言集 その1 『アパッチ砲はワシが作った』 jbbs.livedoor.jp/bbs/read.cgi/internet/134/1229674638/5062 自分の管理するしたらばで借りた掲示板にて > 5062 :自動保守 ◆AOIMAD.NZM [] :2009/08/16(日) 00:46:29 ID:nQYgq9jg0 > そもそも、アパッチ砲っていうのは、私が指揮官になった時代に私の先輩たちが導入して > 先輩たちが命名したもの、っていうかまぁ、そういう砲は今まで存在してないから > 名前つけなくちゃいけないしw > > ってことで、使っているうちに広まった名前なので、それが正式名称になるんじゃないかと。 > > www.paradisearmy.com/doujin/pasok_apache.htm (俺の先輩が命名) > www.paradisearmy.com/doujin/pasok_hping.htm (俺が命名?) ※注 「アパッチ砲」の正式名称は「Apache Jmeter」で、もちろん自動焼人の先輩が作ったものではありません ---------------------------------------------- この自動焼人 ★メールマガジンの配信停止をご希望される方は qb5.2ch.net/test/read.cgi/sec2chd/1250169591/ にて自動焼人 ★までご連絡ください
542 名前:デフォルトの名無しさん [2009/11/09(月) 05:02:04 ] 平方根を求めるアルゴリズム下さい 小数点演算を使用せず整数のまま演算し、 実数の平方根を超えない最大の整数を返すものとします
543 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 06:29:51 ] isqrt.c でググれ
544 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 08:42:18 ] つ 「ニュートン法」
545 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 12:09:28 ] 1から元の値の間で二分法が簡単かな
546 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 20:55:55 ] int sqr(int n){int i=0;for(;i*i<=n;i++);return i-1;}
547 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 09:09:02 ] f(x)=x^2-n f'(x)=2x 2a(x-a)+(a^2-n)=0 x=(n+a^2)/2a >>> def x(n, a): ... b = (n+a*a)/(2.0*a) ... if b - a > -0.000000001 and b - a < 0.000000001: ... print b ... else: ... x(n, b) ... >>> x(2, 1) 1.41421356237
548 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 09:43:10 ] 小数使うなって書かれた上に、>>546 がそれ用の答え書いてくれてるのに なんでニュートン方の実装例出してるの?
549 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 10:39:58 ] >>546 を「答え」とか
550 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 10:49:46 ] >>548 2の平方根が1とかって意味あんのか?
551 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 01:38:30 ] 以下のような多次元項の因数分解を近似的に行うプログラムを書きたいのですが…、 最小自乗などなら解けるかなと思ったのですが…、どなたかご教授願います。 問題: ΣCkX^k→Σ(AkXk-Bk)^k+e すべて実数スカラ値。kの範囲は0<k<n。eは誤差値。^kはk乗の意。 左辺が与えられた時に、eを最小にするAnとBnを求める。
552 名前:551 mailto:sage [2009/11/12(木) 01:58:02 ] 訂正です ΣCkX^k→Σ(AkXk-Bk)^k+e ではなくて Σ(CkX^k)→Π(AkXk-Bk)^k+e でした
553 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 12:50:07 ] Σ(CkX^k)→Π(AkX-Bk)^k+e でなく?
554 名前:551 mailto:sage [2009/11/12(木) 13:38:17 ] Σ(CkX^k)→Π(AkX-Bk)^k+e です
555 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:02:20 ] >>546 それバグってルし
556 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:28:15 ] 小数使うなって書かれた上に、>>546 がそれ用の答え書いてくれてるのに なんでニュートン方の実装例出してるの?
557 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:42:55 ] >>556 2の平方根が1とかって意味あんのか?
558 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:12:53 ] >>557 なんで無いと思うんだ?
559 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 09:52:32 ] >>558 >>548-550 >>556-557
560 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 10:20:04 ] >>557 いや、そういう仕様だし。 これを平方根だというから誤解が生じるんであって、 「(int)floor(sqrt(x)) の値を float 介さず求める関数を作れ」でしょ。
561 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 23:15:10 ] 単に開平法をさせたいだけじゃないの?
562 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 23:33:04 ] いやいや、ちゃんと >>542 読めよ。 「実数の平方根を超えない最大の整数を返すものとします」
563 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:52:09 ] 高速 sqrt 整数 でググったらおもしろいの見つけた 整数なら各ビット毎に収束させる事で必要ビット数の半分のループ(32bitなら16)で解がでるのね
564 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:02:43 ] >>563 事実上>>545 の亜種のような気がするが…
565 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:28:24 ] 亜種と言うかまんま
566 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:43:06 ] unsigned int isqrt(unsigned int x) { unsigned int s, t; if (x == 0) return 0; s = 1; t = x; while (s < t) { s <<= 1; t >>= 1; } do { t = s; s = (x / s + s) >> 1; } while (s < t); return t; }
567 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 05:43:19 ] 安定な内部ソートの中で最も高速なのは何ですか?ちなみに再帰型は不可で。 オレの中ではインサーションソートが一番なんだが、これよりもっと使いやすいのある?
568 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 07:48:39 ] 不安定なソートに副キーを付けてソートするんじゃないの? 高速に安定なソートをしたければ。 再帰が不可ってのはマージソートも不可?
569 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 08:01:42 ] そもそも使いやすいって何だ?
570 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 08:08:29 ] >>569 実装が容易(=コード量が少ない)とか、並列化が容易とか、オンラインとか、構造に依存しないとか。
571 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 08:27:51 ] 高速かつ使いやすい 矛盾は無いが、現実には・・・・・
572 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 09:02:29 ] ソートに限らずオンライン総括処理の構築手引書 欲しいな
573 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 09:07:10 ] アルゴリズムがオンラインってどういう意味?
574 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 09:25:22 ] >>573 ソートだったら、開始する時点で対象データが不完全(あとで増えるかもしれない)でもいいってこと。
575 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 09:38:09 ] ソート中にデータを追加しても破綻しない、っつーことだよな? 入力待ちしつつ、入力されたものを随時処理してソート済みデータに並べられるようなヤツね。 while (fgets(buf, sizeof(buf), stdin) != EOF) { add_with_sort(array, buf); } みたいな。
576 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 21:08:57 ] >>575 そういう言い方をするとアルゴリズムというより、パターンって気がしないか? 単にオンラインアルゴリズムと呼んだ場合は、入力の随時処理じゃなくて、 とあるアルゴリズムで入力データ列を取り扱う時、全体を捜査しなくても 実行できるアルゴリズムのことだろう。 もちろん途中で入力が行われてもアルゴリズム自体はそれに対して特別な 処理を行わず、入力された値は単にデータ列の最後に追加されるだけ。 それはともかく、プログレスバーの表示を、オンラインアルゴリズムで処理する うまい方法はないものだろうか。 もちろん完全な処理が無理なのは分かっているが…大量のファイルを取り扱うときに いつも悩んでしまう。
577 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 21:22:37 ] 一定時間または一定時間比ごとに 進捗状況の評価方法や表示方法を再検討して 適切なものに切り替えていく…とか?
578 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:20:33 ] >>567 In place mergeの亜種が現在最速かな。
579 名前:デフォルトの名無しさん [2010/04/18(日) 00:42:41 ] >>568 マージソートは再帰なしでも実装できるが
580 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 13:03:03 ] 好きなソートはマージソートでつ!!
581 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 16:42:26 ] 0.3|0.2| 0.1 ----------- 0.4 | 0.2| 0.2 ---------- 0.1 | 0.5| 0.3 みたいな3x3バッファがあって 座標をxとyであらわして ただxyは整数ではなく0.0〜1.0の微笑範囲で 示された座標の値を計算するにはどうすればいいんだろう 手法の名前でも分かれば検索出来るんだけど こういう計算って何て呼ぶのか分からない
582 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 16:46:28 ] 点反る
583 名前:581 mailto:sage [2010/04/25(日) 16:51:09 ] 欲しい値は直接的な中の数字じゃなくて 中の数字を広大な平面に広げた時になめらかに起伏した山と谷になるでしょ その広大な座標の中での実際の数字が知りたい
584 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 16:56:11 ] 補間したいってことだよね バイリニア補間やらスプライン補間やら好きなの使え
585 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 17:17:33 ] >>584 ああ そうか 補完と同じことか ありがとう助かった
586 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:07:08 ] HashTreeってどんなアルゴリズムなのですか?
587 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:44:33 ] en.wikipedia.org/wiki/Hash_tree
588 名前:デフォルトの名無しさん [2010/05/21(金) 19:32:09 ] オライリーのアルゴリズムクイックリファレンス の表紙がグロテスクで買うのに躊躇(>_<) www.amazon.co.jp/gp/product/images/4873114284/ref=dp_image_0?ie=UTF8&n=465392&s=books 何の虫? 一瞬、ゴキブリかと思ってしまった。
589 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 19:41:46 ] ゴキブリはこんな肢は持ってないだろw ザリガニか何かの一種?
590 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 20:05:29 ] オライリー、オライリー って健康器具の夢を見た
591 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 21:06:07 ] >>590 お前のレスのおかげで忘れかけてた何かを思い出した 真中で折れ曲がる簡易ベッドみたいなやつを思い出した 頭の中から離れなくなったぞ、どうしてくれる
592 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 06:19:10 ] >>589 ヤドカリだよ
593 名前:デフォルトの名無しさん [2010/05/22(土) 23:00:07 ] 円盤同士の衝突の物理演算についてお聞きします。 衝突した際の平面移動については実装できたのですが、 円盤の回転については、これといったアルゴリズムが見つかりません。 壁や円盤に衝突した円盤の角速度の求め方は、 どのようなものでしょうか?
594 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:25:43 ] たとえば、だけど、まずは円盤自身は回転していないとして、 接触した瞬間の微小時間における「こすれる速度」を求める。 速度vで45度で壁に衝突したなら、0.7v (√2 / 2)。 それに適当な摩擦係数で、円盤自身の回転も加味してやればいいんじゃないかな? ていうか物理板あたりにシミュレーションのスレが...ないなw
595 名前:デフォルトの名無しさん [2010/05/22(土) 23:29:43 ] ぶつかった点同士の直進速度?のやり取りと考えればいんじゃね? 角速度から円周での速度に置き換えてさ
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>クラスは自分もよく作る。 ただそれ以上の汎用的な物は作ったことがないな。 使うケースもそうないし。
697 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 23:15:12 ] AppKit にある NSRange だな。
698 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 23:41:07 ] ObjectiveCは読めないっす Javaで手抜きジェネリック版を書いてみたけど codepad、今落ちてます?アクセスできない
699 名前:デフォルトの名無しさん mailto:sage [2010/12/11(土) 23:46:43 ] >>697 というかNSIndexSetか
700 名前:デフォルトの名無しさん [2010/12/12(日) 02:33:59 ] これ大学のプログラム入門でやったわ 授業内容がif文とは〜とか5分ぐらい説明してでは後は皆さんで自習してくださいって感じの超手抜き なのにレポートがこれ実装できないと出来ないっぽい問題で唖然とした
701 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 03:13:15 ] 大学は教えてもらう場所じゃないよ池沼
702 名前:デフォルトの名無しさん [2010/12/12(日) 03:19:18 ] ひょっとして馬鹿ですか? 大学は教えてもらう場所でもありますよ
703 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 09:51:53 ] バカだろうな。 せっかくの授業料をドブに捨てて、独学しましたとか自慢するバカ。 よくいるよねw
704 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 10:07:00 ] 日本語でおか
705 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 14:31:40 ] >>702 その受け身な態度じゃ何も身につかないってw ほんとに「学び方」知らないのか?
706 名前:デフォルトの名無しさん [2010/12/12(日) 15:03:46 ] と知恵遅れが言っております
707 名前:デフォルトの名無しさん [2010/12/12(日) 15:13:22 ] 大学は教えてもらう場所ではない つまり講義形式の勉強は存在しないと主張するわけですか? ひょっとして頭おかしいんじゃないですか?もう一度よく確認してください 教えてもらう講義形式、参加型のゼミや実験、自習もなにもかもひっくるめて大学でしょう そもそも読書による独学も直接的な対話が無いだけで教えてもらっていることには違いは無いというのに すべてが独力で学べるものであり、学生は独力で勉強するものであると考えているなら一度脳を解剖して検査してもらったほうが良いですよ
708 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 15:14:33 ] ageるなカス
709 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 15:17:57 ] ageとかいまだに拘るやついるんだ 専ブラで見れば実際の順位なんてあってないようなもんなのに
710 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 15:21:35 ] >>707 教えてもらう場所じゃない、学びに行く場所だよ >>709 専ブラで見ないような奴が寄って来ないようにするためにsageるんだよ
711 名前:デフォルトの名無しさん [2010/12/12(日) 15:46:58 ] せんブラも知らんような情弱がこんな僻地にくるかねw もしかして業務でもカスみたいなオーバーヘッドで騒ぎ立てるタイプ?
712 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 15:56:09 ] たかが専ブラで偉ぶるバカってなんなの? ショーもない時代遅れのテクニックで得意になるタイプ?
713 名前:デフォルトの名無しさん [2010/12/12(日) 16:02:40 ] 偉ぶるwテクニックwww笑わせんなwwwww
714 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 16:28:47 ] 大学で教えて貰うのもありだよ。その時間を社会で揉まれつつ自ら学ぶのに使うことができる人間は少ないだろうからね。
715 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 16:48:07 ] もし大学が教育をする場所であるなら、 >>700 の講師の態度は教育者として良くないと思う。 でも、大学は学ぶ場所だから、レポートを提出しろと言われたら、 提出期限までにあらゆる手段を使って精一杯努力して学ぶのが本来の姿だよね。 その時間をしっかり取れるようにするのは大学側の責任だが、 そういう仕組みになっていない大学では、生徒は困惑するな。 >>700 の大学ではそうだったのかも知れんね。
716 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 16:55:10 ] たぶん知れんね。
717 名前:デフォルトの名無しさん [2010/12/12(日) 17:09:38 ] 範囲の扱い。和はいいけど積になると速い方法が見つからん
718 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 17:15:57 ] >>717 範囲の積ってどういう演算だっけ
719 名前:デフォルトの名無しさん [2010/12/12(日) 17:23:44 ] ベン図でいうと全部重なってるところ { [1,2), [4,5] } * { [1,4] } = { [1,2), [4,4] }
720 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 17:55:37 ] >>719 「速い文法」の意味が図りかねるが、 >>688 や >>693 と同じで昇順リストで持てばいいと思う。 補 ((補 A) 和 (補 B)) でよくない? この計算が遅いの?
721 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 00:16:06 ] >>719 開区間と閉区間の両方を許容させるの?
722 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 01:10:59 ] なるほどドモルガンつかって和を使い回すってのは数学的な発想だなー doubleみたいな型ならともかく、整数型とかなら離散値だから Complement({1,2})は{ [INT_MIN,0],[3,INT_MAX]}とすれば閉区間のみでいけるでしょ 補集合の計算は、実際は複数個範囲があるから-∞と∞を加えて(N-1)+2回ループでO(N) なので積もO(N)で計算出来るね
723 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 01:16:14 ] 実数はいらない子ですか
724 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 02:18:13 ] 標準化してBoostあたりに組み込んでくれんかな。
725 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 02:45:24 ] 高速な区間クラスの開発を外注してくれと言われたら俺は とりあえず株式会社ケイブに相談してみるw
726 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 07:49:01 ] >>686 範囲検索([12,15][14,18] に対して [13,16] と重複する範囲要素を見つけるみたいな)も したいならSkipListをベースに範囲拡張を仕込む手も
727 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 07:50:15 ] 時間があったら範囲扱う機能をまとめてライブラリにしてみたいよね
728 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 15:16:06 ] md5みたいなアルゴリズムのパラメーターって誰がどうやって決めてるんですか?
729 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 15:19:12 ] あれってsin関数かなんかじゃなかった?
730 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 17:09:03 ] わおわおわお
731 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 00:12:23 ] >>726 こんなデータ構造があるんですね、面白いです こういうわりと新しいデータ構造一覧みたいなの誰かどっかにまとめてくれないですかね あれからちょっと考えていたのがRange<T>自身も範囲を持てるようにして 範囲を二分木/多分木で表す方法です 例として現在所持している範囲の最小値/最大値が1と16の時 全体の範囲を[1,16]で表します 例えば[1,2]と[3,4]というデータは 全体範囲[1,16]の中に [1,8][9,16]があって [1,8]が[1,4][4,8]、[9,16]が[9,12][13,16]に細分されて [1,4]の中に[1,2]と[3,4]がある、といった具合 検索は上から順に範囲を狭めて行きます 検索範囲との包含関係でやると、[4,5]みたいな二分木を横断するパターンの扱いが面倒なので 範囲の開始時間と幅をキーにて絞り、その各要素について終了時間をチェックします 詳細は詰めてないですが、O(log2(N)*絞った要素数)、ぐらいで動きそうなので シンプルな実装よりは早くなるんじゃないかと思います
732 名前:デフォルトの名無しさん [2010/12/14(火) 00:23:46 ] ぴっちり半分じゃなくても [a,b),[c,d),[e,f) a<b<c<d<e<fになるってだけ守れば A=[a,b) B=[c,d) C=[e,f) の間にA<B<Cというような単純な比較が定義できるから二分木で扱えるね これで検索とpoppushはlogNでいける BとCを横断するような[x,y)を挿入するなら検索で前後を探してpopして[c,f)をpushみたいな
733 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 01:20:46 ] >>731 ユニマガでも解説されていたな。
734 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 03:14:50 ] 90年くらいに発明されたデータ構造だっけ。稀によく使う。
735 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 03:24:06 ] 稀によく?
736 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 03:29:46 ] ブロントさん何してるんですか
737 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 09:57:56 ] ロックフリーの実装が、The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで、に 載っていたな。
738 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 10:37:51 ] >>731 うろ覚えだけどそれってR木じゃない?
739 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 10:50:49 ] SkipListを分散環境に拡張したら SkipGraph さらに複数キー対応したら Multikey SkipGraph 検索を効率化した Skip B-trees 範囲キー対応した Rangekey SkipGraph 範囲内の最大値最小値平均値を高速に求められる 集約Skip Graph 多次元をあつかう SkipIndexやZnet とかSkip系列は最近派生種が増えております
740 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 11:06:37 ] へええ。 こういうの放送大学とかでやってくれんかな。
741 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 11:08:25 ] 放送大学では英語を勉強して。それで英語の文献読んで。
742 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 11:54:25 ] Multikey SkipGraph, Rangekey SkipGraph, 集約Skip Graph は日本語よ。 分散系だけどやってることの実現方法とか考え方はSkipListとかのデータ 構造に反映できると思う。
743 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 14:01:15 ] SkipListは単純なアイデアで実現されているから、応用、変種が幅広いのかね。
744 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 18:55:07 ] 表現方法が違うだけで結局多分木と同値のような気がする>SkipList
745 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 19:21:47 ] 多分木に乱数でスキャッタする要素があるものってあったっけ?
746 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 19:34:26 ] は、まさかビットマップ表現にしたのを圧縮したかったとか?>>669
747 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 20:34:28 ] >>738-739 そのあたりをタグに調べたら色々と見つかりました。 古典的には 1984 R木 1985あたり box tree 1989 skipList もっと前? interval treeとsegment tree 最近だと 2001 DHT(Distributed Hash Tree) 2004 Priority r tree 2006 DST(Distributed Segment Tree) 2007 DAST(Distributed Arbitrary Segment Tree) 2009ぐらい? rangekey skipList 今年の4月7日 BoostにITLライブラリが正式に導入←もうBoostに入ってた この種のデータ構造は最近ではP2Pへの応用が多いみたいですね ジェネリックな実装も落ちてたので カレンダーにはPriority R Treeを使ってみようと思います アルゴリズムとしては空間充填曲線を使うR木の実装が面白かったです
748 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 23:11:33 ] >>744 なわけない。
749 名前:デフォルトの名無しさん [2010/12/15(水) 06:35:00 ] ここは質問スレじゃねーんだよ
750 名前:デフォルトの名無しさん [2010/12/17(金) 00:45:10 ] 「Nクイーン問題を遺伝的アルゴリズムで解く」というとき、 ・(例えばN=8なら)11387653みたいなクイーンの座標列を1遺伝子として 複数の遺伝子をつくり、交叉や突然変異で世代を進めていく ・83541267のように縦横にクイーンが重複しない遺伝子の組み合わせをつくり、 遺伝子内の座標の入れ替えで縦横の重複がない状態を保持しながら世代を進め、 斜めの重複を評価していく のどちらが標準的なんでしょうか?遺伝的アルゴリズムの説明を読むと 前者な気がするんですが、Nクイーン、遺伝的アルゴリズムで検索して はじめにヒットするpdfだと後者だと書いてあります。 単純に考えると前者は計算量が多くなり、後者は局所解に陥る(っていうんでしょうか) 可能性が高くなる気がしますが…
751 名前:デフォルトの名無しさん [2010/12/20(月) 17:23:02 ] INT_MAXより小さいユニークIDの最も効率のよい生成器は?
752 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 17:27:14 ] id = (id + 1) % INT_MAX
753 名前:デフォルトの名無しさん [2010/12/20(月) 17:30:16 ] 全然ユニークじゃない件
754 名前:デフォルトの名無しさん [2010/12/20(月) 17:56:19 ] idなんてdouble GetID() { static double x = 0.0; return x++; }で十分ですよね
755 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 18:03:37 ] 「ユニーク」を定義してください
756 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 18:33:50 ] 日本語としては「笑えるID」?
757 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 22:35:11 ] 変なID?
758 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 22:42:46 ] >>753 INT_MAXを超えた場合はそれ未満の自然数(と0)は全部使われてるわけで どっちみち一意にできっこない
759 名前:デフォルトの名無しさん [2010/12/20(月) 22:49:15 ] ・オブジェクトに一意なハンドルを与えたい ・オブジェクトは生成されたり破棄されたりする ・オブジェクトが生成されると同時にハンドルが与えられる ・オブジェクトが破棄されるとハンドルが再利用可能になる ・同時にINT_MAX個を超えるオブジェクトは存在しない ・再現性が必要なのでメモリアドレスをハンドルにすることはできない としたらどうですか?
760 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 22:53:06 ] >>759 過去レス読んでないけど、その処理は普通にやってる簡単だけど?
761 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 23:00:05 ] 無精をせずに>>751 から読み返してからどうぞ
762 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 23:05:08 ] 「最も効率のよい生成器は?」 が課題なのか? 単に、空きのIDを最速で検索する方法が答えではないのか?
763 名前:デフォルトの名無しさん [2010/12/20(月) 23:06:16 ] 未使用or使用済みのマーク付きの範囲オブジェクトでツリーを構成して云々カンヌンする
764 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 23:09:37 ] いやいや、空きIDを単純連結リストにして、解放時後ろに足し。GET時前からとるだけでは? MAXが多い場合最速だろ。リストが空ならMAX使用中。
765 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 23:15:26 ] >>759 ・再現性が必要なのでメモリアドレスをハンドルにすることはできない これが気になるな 何の情報を基に何を再現したいの?
766 名前:デフォルトの名無しさん [2010/12/20(月) 23:35:22 ] >>764 それってメモリ効率悪くね?
767 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 23:36:43 ] スピードとメモリー効率は殆どの場合反比例です。
768 名前:764じゃないけど mailto:sage [2010/12/21(火) 04:08:06 ] >>766 単純連結リストがどんなものを想定しているのかしらんけど 配列ベースの循環キューにしとけばデータ分の配列+頭と尻の位置ぐらいで済ませられる
769 名前:デフォルトの名無しさん [2010/12/21(火) 08:40:22 ] INT_MAX個の要素持たせるの?
770 名前:デフォルトの名無しさん mailto:sage [2010/12/21(火) 09:13:15 ] そこで>686ですよ
771 名前:デフォルトの名無しさん [2010/12/21(火) 09:50:51 ] 可変長整数をインクリメントしながら割り振って適度なタイミングでハンドルの再配置をすればいい
772 名前:デフォルトの名無しさん mailto:sage [2010/12/21(火) 19:33:40 ] 結局、範囲を効率よく所持する方法に帰着するのか
773 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 08:38:54 ] どこに処理限界を置くかに帰着するんじゃないかな
774 名前:デフォルトの名無しさん [2010/12/27(月) 15:16:14 ] ここは質問スレじゃねーんだよ
775 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 18:45:28 ] >>774 >>691 まー漏れも質問ばっかりになるのはどうかと思うけど
776 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 23:48:55 ] 質問スレじゃないとしたら、強固な雑談スレでも目指すの?
777 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 22:23:23 ] うん
778 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 20:41:44 ] R-TreeやPR-Treeについて詳しく載ってる和書ない?
779 名前:デフォルトの名無しさん mailto:sage [2011/02/24(木) 22:05:05.77 ] >>731 今回加わった boost::icl、特に interval_set がそれ。 custom interval も喰える凄い奴。
780 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 22:01:40.30 ] 無秩序な二分木をファイルに格納するときに 0〜節(葉も含む)の数通し番号を振って 通し番号順に値左右の子の番号を配列に格納してwrite これより効率いい方法ありますか?
781 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 23:11:43.20 ] >>780 要素ごとに2bitあればいけそう 1 /\ 2 5 \ 3 / 4 の場合、 1:2,5 2:0,3 3:4,0 4:0,0 5:0,0 とする代わりに 1,1 (node 1の左右の有無の示す) 0,1 (node 2の以下同様) 1,0 0,0 0,0 のようにノードごとに2ビットの情報があれば再構成できそう あとはこのビット情報をまとめてファイルに書き込めば いいんじゃないかと
782 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 23:43:58.26 ] なるほど ちょっとなんで?と悩みましたが良さそうですね どうもありがとう!
783 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 23:45:27.73 ] 空間効率、時間効率、左右の区別…それによって異なりそう
784 名前:デフォルトの名無しさん [2011/03/30(水) 01:46:58.51 ] 旺文社マルチ辞典 www.youtube.com/watch?v=kz1pPoTRhq4
785 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 18:56:53.74 ] 32bit変数2つのそれぞれの1bitが 割り込みフラグ、割り込みマスクの意味を持っていて、 フラグが1 かつ マスクが0 のビットのみに処理をしていきたい 現状こんなんなんだけど、ここから速度改善できるのだろうか? maskが0であるほど処理時間が長くなるのがきになっている flagは実際メモリマップドのレジスタで、リードに時間がかかるからそこを何とかしたいが 即時性?がいるのでラッチはしておけない flag = フラグ; mask = マスク; bitmask = 1; for(i=0;i<32;i++){ if(mask&bitmask==0 && flag&bitmask==1){ iを使った処理; } bitmask <<= 1; }
786 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 19:11:35.76 ] x = flag & not(mask) if(x&1) x>>=1
787 名前:デフォルトの名無しさん mailto:sage [2011/04/07(木) 14:18:17.60 ] >>784 つまりどういうことです?
788 名前:デフォルトの名無しさん mailto:sage [2011/04/26(火) 21:54:46.08 ] 敵のモンスターが徘徊するようなプログラムはどのようなアルゴリズムで書いたら良いのでしょうか 単純に毎回ランダムな方向に進むんだったら酔歩になっちゃいますよね ある方向にしばらく進む→しばらく止まる→またある方向に進む→ ようなかんじにしたいです。 参考になるサイト等ありますでしょうか よろしくお願いします
789 名前:デフォルトの名無しさん mailto:sage [2011/04/26(火) 23:29:18.80 ] > 単純に毎回ランダムな方向に進むんだったら と > ある方向にしばらく進む→しばらく止まる→またある方向に進む→ の違いが分からん
790 名前:デフォルトの名無しさん mailto:sage [2011/04/26(火) 23:48:58.19 ] >>789 ごめんさない 『進む』行為を1ステップごとに行うとして 毎ステップランダムな方向だとかんたんに実装できるけど酔歩で不自然な動きになりますよね ある程度同じ方向に進んでから向きをランダムに変えてまたある程度同じ方向に進むような感じにしたいのです よくゲームの敵キャラがそんな風に動いている気がするのですが、どのようなアルゴリズムなのかな、と
791 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 00:04:27.00 ] 歩く と 止まる(じっとしてる) を交互にやればいいじゃん
792 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 00:04:28.45 ] 超簡単なロジックなら、 3歩先なり5歩先の座標を計算して 3あるいは5歩分は計算した座標まで均等にまっすぐ進む 計算座標まで到達したらランダムに方向を決めて再計算するとか 20年くらい前のレトロゲームならこんなものだと思う
793 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 11:29:31.10 ] >>792 元祖ローグでは基本ランダム。 プレイヤーがとある範囲に入ったとき、 ・近づく ・逃げる ・興味を示さない などを行う。 ここら辺は敵の特性だったり、また状態(体力)などにより変る。 敵対なら範囲に入ってきたら近づいて攻撃したり、 プレイヤーに攻撃されて瀕死になった場合は遠ざかるなど。 ここが一般的にはAIとよばれています。 初代では行われていないけれど、もう少し世代が進むと経路探索を利用して、 ダンジョンのカベに引っかからずに目標のポイントに進むことも出来るようになっいます。
794 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 11:33:21.38 ] ↑ >>788 あてだったのにアンカー間違えた。
795 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 12:32:13.56 ] いっそのことダンジョンやモンスターに獣道情報を付加しちゃうとか 頻繁に立ち止まったり ときどきルートを少し外れながら帰り道をスタックするとそれっぽいかもしれないなあ
796 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 12:45:07.20 ] ゲームシステムじゃなくアルゴリズムを訊いてるんだよな?
797 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 13:15:39.01 ] A*使えでおわるんじゃないかな? まあお絵かきツールの塗りつぶしアルゴリズムに距離をついかししやれば 簡単な経路探索アルゴリズムが出来ますよ。
798 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 19:10:45.17 ] >>788 の質問は経路探索じゃなくて、 人間が何かふらふらと見回りしているかのような徘徊だと思うが 実際のゲームは知らんが、>>790 の言う通りにするのなら、 まず進む向き d ベクトルと歩数 n をランダムに決める それから、d 方向にランダムに k (<n) 歩歩いたら、少し止まって、 d 方向を平均として適当な分散の正規分布に従って、 ランダムに d' 方向を決める(要するに d' は d に近い値) d' 方向にランダムに k' (<n-k) 歩歩いたら、また少し止まって、 先ほどと同じように d'' と k'' を決めてまた歩く 歩数 n 歩に到達したら、最初の進む向き d ベクトルと 歩数 n をランダムに決める事からまたやり始める
799 名前:788 mailto:sage [2011/04/27(水) 21:10:29.90 ] 皆さんありがとうございます やってみます
800 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 08:57:26.19 ] アルゴリズムちゅーかストラテジだな
801 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 12:02:14.96 ] >>798 経路探索いれて、目的地をランダムで決定すればよいとおもったんだけどな。
802 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 12:45:05.74 ] 経路探索ってなにん? 壁とかあるかんじ?
803 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 13:24:34.55 ] 障害物の在るマップで、とある地点を指定するだけでそこまでの経路を計算してくれるアルゴリズムだよ。 ターン制のシミュとかでも応用で移動コスト計算付で移動可能範囲を計算したり、 そこまでの移動経路を計算できたりするよ。
804 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 15:08:28.56 ] 多少力入れるならAIを有限状態機械にする。 AIは「モード」を持っていて、クロックごとにそのモードに従って行動する。 例えば「何もしない」「地点(X,Y)に速度Zで移動」「敵が視界内にいたらその位置に移動」とか。
805 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 15:22:20.64 ] スクリプトなり、関数ポインタなり、デリゲートなリでステートマシンの評価部分を入れ替えられれば色んな敵のアルゴリズムを切り替えられていいよな。
806 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 16:09:07.69 ] PSゲームの天誅のようなのがわかりやすくていいとおもうな
807 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 18:02:10.24 ] >>806 たぶん 主人公から遠い…非表示 主人公から近い…キョロキョロ>>788 キョロキョロ中に主人公が視界にはいる…発見 発見中…主人公追いかける、経路探索? 発見中に主人公を見失う…警戒 警戒中…はげしくキョロキョロ 警戒後一定時間経過…キョロキョロ こんなんだったよな 実装めんどくさそう
808 名前:デフォルトの名無しさん mailto:sage [2011/04/28(木) 18:50:18.99 ] ステートマシンの実装法か いろいろ難しいからなぁ
809 名前:デフォルトの名無しさん mailto:sage [2011/04/29(金) 17:01:04.41 ] アルゴリズムとデータ構造のオンライン事典 xlinux.nist.gov/dads/
810 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 21:34:56.01 ] バイナリ値を持つ2次元平面の、すべての1である部分を覆うような 長方形領域の集合を求めたいです。 全領域サイズの長方形をもってくればひとつの長方形でおおえますし、 大きさ一の長方形で覆うと考えれば最小の面積でおおえますが、 そのバランスのとれたかたち、なるべく少ない数の長方形の集合でそれなりに無駄なく覆う というようなものをどうやったら求められるかなあと考えています。 こういう問題を解くためにはどういったアルゴリズムを用いればよいでしょうか? また、こうした問題や、類似の問題で名前のついた問題ってありますかね?なにでぐぐってよいかわからなくて。
811 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 21:50:36.16 ] バックパッキングとは違うかな。
812 名前:810 mailto:sage [2011/05/09(月) 22:17:59.82 ] >>810 文章がわかりにくかったです。 長方形領域の集合で、すべての1である部分を覆いたい、という問題です。 障子のあちこちに大きさ形まちまちの穴があいていて、 その穴をふさぐために使える障子の形を長方形に限定して どうすればいい感じに全ての穴を塞げるか、というイメージです。 >>811 バックパッキングというのは、ナップサック問題みたいなものでしょうか? どのように>>810 に還元出来るでしょうか?
813 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 22:23:52.05 ] 平面上の任意の座標 (x, y) の値が、0 か 1 、というわけ? つまりテーブルの上にコーヒーをこぼして、濡れてるところが 1 とかそんな。
814 名前:810 mailto:sage [2011/05/09(月) 22:31:18.40 ] >>813 そうです。
815 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 22:31:35.13 ] >>810 >>812 要するに、2次元平面上にある点群に対して、 ある程度近いもの同士でグループ分けしたいということでしょ (問題名、アルゴリズム名は忘れた) で、それぞれのグループを覆う長方形を考えれば、 まぁだいたいバランスは取れてる
816 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 23:01:54.69 ] >>810 領域分割でぐぐるとそれらしいのが引っかかってくる 提示の例だと codezine.jp/article/detail/167 とか
817 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 23:42:31.45 ] 難しそうだなあ □ □□□ □ が2つの長方形で重複はするが過不足なく覆えることは どう考えればいいのだろう
818 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 00:30:51.45 ] >>817 例えばパターンマッチにかけ、5個の長方形が十字型に並ぶパターンを見つけたら、 それらを融合させて2個の長方形へ最適化 しかし、例えば2個の長方形と、それをひとつにまとめた1個の長方形とで、 どちらが「少ない数の長方形の集合でそれなりに無駄なく覆う」ことになるのか その「評価関数」は >>810 の中ではどうなってるんだろう
819 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 00:42:50.44 ] 大きい長方形の中を幾つかの長方形に分けて、さらにその長方形の中を幾つかの。。。 ってのじゃ駄目かい? 全部1か0の場所は分割しないっていう感じで 大きさ1の長方形が定義されてるなら、関数を停止させる事も出来るだろうし いや、よく分からんのだけど
820 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 07:55:25.52 ] いい案があるわけではないんだけど、確認。 > 障子のあちこちに大きさ形まちまちの穴があいていて、 穴の位置が {(3.8, 2.6), (1.4, 1.4), (2.1, 3.5)} みたいにして与えられると思えばいい? > その穴をふさぐために使える障子の形を長方形に限定して 辺は x, y 軸と平行? どんな向きでもあり?
821 名前:810 mailto:sage [2011/05/10(火) 09:53:10.32 ] 領域分割それっぽいですね。googleとと相談してみます。 ありがとうございます。 >>818 評価関数もふくめ方向性を考えてます 開いている穴のうちふさがれている割合 1.0 を必要条件として 長方形領域の集合のうち、穴を塞いでいる部分の割合をP 用いる長方形の個数をnとすると、 Pとnの多項式で定式化出来ると思いますが、具体的にどうとは考えてないです >>820 今回私が解こうとしている問題に関しては BOOL area[][];のようなかたちで入力は与えられますが、 おおむねそういう感じです。 長方形の辺は軸に平行で考えています。
822 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 14:22:27.31 ] TかFかが与えられる点は格子点で、斜めに置いたりはしないと。 >>817 にあるように、うまく部分問題に分割できないのが難しいねぇ。 理屈の上では組合わせは有限なので順番に評価関数に食わせて一番評価の高いのを 選べばいいわけだけど、現実には組み合わせ爆発で無理だから、よさげなのを探索 するしかないかな。 戦略としてはトップダウンとボトムアップの2通りがあると思うんだけど、トップダウンのほうは、 まず1個の矩形からはじめて、矩形の数が増えてもいいから、塞いでる割合が増えるパターンを、 探索していく。この時最初の矩形より外に広がることはない。(>>817 のように途中のプロセス ではそうでない場合もあるのが難しいところ) 逆にボトムアップは、穴の1個1個をそれぞれ小さな矩形でふさいで、それをだんだん大きい 矩形の集まりにしてゆくというもの。これもやっぱり一本道というわけにいかないのが難しい。
823 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 22:59:01.22 ] 使えねぇやつらだな。アルゴリズムスレなんだからそれらしいレスしろよ。 Graham走査だろ? あとはググれ。
824 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 23:12:57.91 ] 多角形の凸包が作れて、この問題的にどこがうれしいわけ? おまえは使える奴なんだから、凸包の多角形から、どういうアルゴリズムで、 いい感じの長方形の集合を作るのか、ちゃんと説明しろよな。
825 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 23:51:27.60 ] Graham走査ググったら関係ないふいた
826 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 23:58:02.30 ] bitonic sortでクグれよ
827 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 10:02:48.66 ] 一種のマージソート?
828 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 12:00:00.47 ] >>823 が言いたいことはGraham捜査で全ての点を包含する凸包の点を取得し、 その集合からXYそれぞれについての最上、最下の座標を探せば言いよってことなんじゃねえかと。 まあ全ピクセルを捜査してXYの各座標について最小、最大を 見つけるたびに書き換えてあげれば目的の長方形の見つかると思う。 ただし重いw もしデータを書き込むところから制御できるなら、書き込むたびに XYについて最小値、最大値を書き換えてあげば簡単に見つかると思う。
829 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 12:35:11.13 ] >>828 もし >>823 の意図がそれなら、彼は必ず一つの長方形で覆うものと勘違いしてないか? 点群が1ヶ所に固まっていれば長方形一つが最も無駄が無いだろうが、 まばらに分散していれば複数の長方形で覆った方が無駄が無い場合の方が多い
830 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 13:18:57.72 ] >>810 の問題だと一つ以上の長方形の集合を求めるだっけか。 前提として点を2つ以上含めた物を長方形とするって決まりが暗黙的に適用されるのかな。 長方形同士ってかさなってはいけないとかもあるのかな??
831 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 15:06:17.79 ] 微妙に問題が曖昧なんだな。 とりあえず、ある程度の塊に点群を分類してからやりたいなら、空間(ここでは平面か)分割してクラスタリング。 クラスタ重心を計算しながら分割領域を調整。調整が終わったらグラハムさんの出番。 …で、できそうな気がするけど、適当思考なので上手く分割できるかちょっと自信ない。 これだと、矩形の重なりは発生する可能性が残ってるし。
832 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 15:17:43.65 ] 危険点をカバーするように検査エリアを設定したいのかな。 だとすると、水平方向はある程度無駄が在ってもいいけど垂直方向はできるだけ無駄がない方がいいとか、 矩形同士が重ならないだけでなく水平方向に違う高さを持つ矩形が存在したら拙いとかw
833 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 15:25:36.60 ] >>810 応答せよw
834 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 15:47:16.41 ] 何を求めるのか、それが曖昧だ。 面積を最小にするのか、矩形の数を最小にするのか。 n個の点に対して、面積の最小値はnだし、矩形の最小値は1。 なので、求めるモノを定義しないと、「だいたいこんな感じ」の解しかでてこない。
835 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 18:06:34.87 ] >>834 だから >>818 で評価関数はどうすんのと訊いたら、 >>821 でまだ考えていないと
836 名前:デフォルトの名無しさん mailto:sage [2011/05/12(木) 00:17:47.50 ] 求めたものを結局何に使うのかがわかればもっと適した方法が絞れるんだろうけどな
837 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 19:43:52.24 ] ループと動的確保なしで数値範囲の和と積を扱う手法は有りますか?
838 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 20:55:05.61 ] >>837 悪いが意味が分からん 具体的に、何か例を示してくれ こういう入力に対して、こんな計算をして、こういう出力を得たい、とか
839 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 20:55:53.56 ] >>837 なぜにそんな限定を?
840 名前:837 mailto:sage [2011/05/16(月) 22:13:20.11 ] YesNoで答えられる質問一つで数値の範囲が決まる Yesなら[a,b)、Noなら[-inf,a)or[b,+inf) で可変個の質問にユーザーに答えさせて範囲をand結合して絞りこむ で、最後に絞り込んだ範囲を表示 という課題がでたんです でもその講義でまだ入出力とifとgotoしかやってないんです配列もやってません どうも周りに聞いたところによるとその教授は講義範囲外のことをあまり使うといい顔をしないらしいんです ですので講義範囲内で処理したいんですが…という感じです
841 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 22:58:41.22 ] goto と if 使えるならループ作れるじゃん
842 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 23:32:25.49 ] >>840 宿題は自分でやれよ屑。 あと、おまえみたいなゴミは社会に出てくるな。 氏ね。
843 名前:デフォルトの名無しさん mailto:sage [2011/05/17(火) 01:34:33.75 ] いずれにしろこのスレで聞く事じゃないな
844 名前:デフォルトの名無しさん mailto:sage [2011/05/17(火) 03:16:59.99 ] >>840 講義範囲外のこと使っていい顔しない教授とかクソだから無視で。
845 名前:デフォルトの名無しさん mailto:sage [2011/05/17(火) 07:32:31.58 ] ざっとみて講義が目標とする力量に達していたら 「できるんだったら来週からこなくていいよ。単位だしとくから」 ってのが大学的
846 名前:デフォルトの名無しさん [2011/05/31(火) 21:25:56.80 ] 相異なる31個んもデータがある。この中に含まれる数をキーとして逐次探索 を行うデータが見つかるまで、それぞれ何回の判定が必要か、期待値を求めよ これの逐次ってどうやって求めるんですか?? 1/31+2*1/30+・・・・ みたいな感じでしょうか・ またキーが含まれない場合もおしえてくださいmm
847 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 21:39:11.09 ] 期待値は31/2回 キーが含まれない場合は31回
848 名前:デフォルトの名無しさん [2011/05/31(火) 21:53:04.17 ] ありがとうございます 含まれる場合の期待値の求め方をおしえてください キーが含まれない場合の2分木探索はどうやるんでしょうか??
849 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 23:00:07.25 ] どっから二分木でてきたんだ
850 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:20:16.63 ] Write-Ahead Loggingのアルゴリズムって 何があるのですか?
851 名前:デフォルトの名無しさん mailto:sage [2011/06/09(木) 15:23:27.24 ] Nこ(N<=256)の重さ付き要素から最小の2こを取り出して合計して1つにして戻す(N-1こになる)という操作をするときに @昇順ソート→index1,2を取り出して合計して戻す A一回操作して最小の2つのインデックスを記録→取り出して合計して戻す どっちが速いかな?オーダーだけ見ると@のような気がするけどswapコストとか考えるとAの方がいい?
852 名前:デフォルトの名無しさん mailto:sage [2011/06/09(木) 15:29:12.79 ] それこそ直ぐにプログラムかいてベンチとれってかんじじゃね?w
853 名前:デフォルトの名無しさん mailto:sage [2011/06/09(木) 16:00:31.18 ] 256個なら誤算の範囲。 N=100万とかなら、迷わず2じゃね? なんで、1のオーダーの方が小さいと思うの?
854 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 15:40:48.70 ] 各ピクセルが得られるビットマップ画像があります これをjpgエンコードしたほうがいいのかpnhエンコードしたほうがいいのか判別するにはどのような方法が考えられるでしょうか
855 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 15:42:51.03 ] 何を指標にして判断したいのかかけよな、エスパーでもさがしてんのかよ。
856 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 16:12:56.69 ] 俺はピクセルの取得できないビットマップ画像を教えて欲しい。
857 名前: 忍法帖【Lv=3,xxxP】 mailto:sage [2011/06/10(金) 16:31:42.49 ] そんなことよりも、私はpnhエンコードとやらを知りたい。
858 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 19:09:13.91 ] ピンフ形式だよ。言わせるな恥ずかしい。
859 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 20:40:53.31 ] アンコの方が好みです
860 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 21:44:37.61 ] 平和、すなわちパチンコ業界の手先だな
861 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 22:29:46.37 ] 麻雀の役を辞書にして圧縮するとかどうだろう。 グラデは順子が多いとか。
862 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 23:47:52.31 ] >>851 (3) 最初にヒープを作る→ヒープから最小値2個取り出し合計してヒープに戻す オーダー的にはこれがいいと思うよ
863 名前:デフォルトの名無しさん mailto:sage [2011/06/12(日) 18:55:05.37 ] アルゴリズム考える時ってキャッシュ効率とかアクセス効率とか最初から含めて作業始める? それとも論理的な計算量だけで考える?
864 名前:デフォルトの名無しさん mailto:sage [2011/06/12(日) 19:16:10.15 ] 私は数学屋じゃないから、先ずはシンプルかつ汎用性を考えるね。
865 名前:デフォルトの名無しさん mailto:sage [2011/06/14(火) 21:48:47.05 ] 非負の整数a, b(a <=b)があったときに a <= x <= bになる、「いい感じの整数x」を求める方法はないかね? クイックソートのピボット選択や、パーリンノイズやGAで使いたい。 一番簡単なのはx=(a+b)/2なのだが、面白味に欠ける。 x=rand(b-a)+aだと、オーバーヘッドが大きい気がする。 できればaとbが一意ならxも一意で決まって欲しい。 フィボナッチ分割はどーかなー。
866 名前:デフォルトの名無しさん mailto:sage [2011/06/14(火) 22:00:02.99 ] 黄金分割しろ。
867 名前:デフォルトの名無しさん mailto:sage [2011/06/14(火) 22:27:59.93 ] >>865 > x=rand(b-a)+aだと、オーバーヘッドが大きい気がする。 アルゴリズムスレなんだから、「気がする」で放っておくんじゃなくて、 本当に求めているパフォーマンスを達成できないほどのオーバーヘッドか確認しようよ あとアルゴリズムスレなんだから、何が「いい感じ」なのか できる限りハッキリさせようよ とりあえず、a と b の中間値が「いい感じではない」ことは分かった 擬似乱数はシードを決めれば入力値に対して一意に決まるが、 もしオーバーヘッドが気にならないほどであれば、擬似乱数でいいのか? 擬似乱数が「いい感じ」なのか? そして、アルゴリズムスレなんだから、「フィボナッチ分割はどーかなー」ではなく、 実際にフィボナッチ分割したらどんな a b に対してどんな値が出力されたのか示してくれ
868 名前:デフォルトの名無しさん mailto:sage [2011/06/14(火) 22:44:09.90 ] ゆとり乙
869 名前:デフォルトの名無しさん mailto:sage [2011/06/15(水) 10:53:51.44 ] 比率を一定にしたいなら、積の平方根とか。0が入ったら知らんが。 でも、ピボットに使うっていっても、分布しだいじゃね?
870 名前:デフォルトの名無しさん mailto:sage [2011/06/15(水) 16:07:33.88 ] たとえば func shikaku(left, top, right, bottom){ if (十分小さければ){ 塗りつぶす(left, top, right, bottom); } else { x = bunkatsu(left, right); y = bunkatsu(top, bottom); shikaku(left, top, x, y); shikaku(x, top, right, y); shikaku(left, y, x, bottom); shikaku(x, y, right, bottom); } } で、モヤモヤした感じが出したい。 ピボットはまあ、乱択っぽくて任意の分布でもいいかなと。
871 名前:デフォルトの名無しさん mailto:sage [2011/06/15(水) 16:15:47.19 ] どう見ても全部塗りつぶしてるようにしかみえないのだが。
872 名前:デフォルトの名無しさん mailto:sage [2011/06/15(水) 18:27:45.99 ] ああっ、色を指定するの忘れていた
873 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 00:42:57.61 ] 株に関するプログラムをしたいのですが、 ここで質問して良いですか? 株の専門用語の話とかじゃなくてグラフに関する事なんですが。
874 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 09:06:44.12 ] ロケット工学投資法を読破した俺が答えてしんぜよう
875 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 11:11:15.41 ] >>874 では、それで御願いします。 株のサイトでチャートの形によって、売買銘柄を 選択するサイトがあるのですが、その仕組みというか 考え方を教えて下さい。 一例として、上昇トレンドかどうか判断するには移動平均を 1日ずつ計算して前日より上がっているかどうかを比較して いけばいいかなと思ったのですが、実際には上がったり下がったりして、 単純な比較だと、実際は上昇トレンドなのに途中に下がった日があるので、 上昇トレンドと判定できない場合が出てきます。 期間を決めて、その期間内の最高値と最安値が何月何日か、 もしくは、本日が期間内の最安値より高いかで決めるにも、 それじゃ、期間を何日間にするのかと言った条件によって 変わってくるだろうし、どう判断条件を作ればいいか分からないのです。 チャートの形にも色々あるので、簡単には説明できないと思いますが、 上昇トレンドの判断の仕方だけでも教えてもらえれば、他にも応用できるかも しれないと思いますのでよろしくお願いします。 長文失礼しました。
876 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 11:52:34.06 ] そりゃスレチだな。
877 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 12:13:47.96 ] スレチですか。 失礼しました。
878 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 14:12:58.78 ] >>875 ロケット工学投資法にはトレンドラインの作り方が載ってる まああれを馬鹿正直に実装するより楽な方法もあるんだが…… タダでは教えられんw
879 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 14:14:23.21 ] >>875 追記。単に作画したパターンにマッチする銘柄を選択するだけなら、 それは「パターン認識」技術の世界だ。ぐぐれ。
880 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 15:01:28.43 ] >>878 ∧∧ コイヤァァァァ!! (д´* ) (⊃⌒*⌒⊂) /__ノωヽ__) >>879 パターン認識、オソロシス
881 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 18:17:06.36 ] この株のネタだと微分の話になるんじゃないのか?
882 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 18:19:46.59 ] >>875 チャートだけ見て判断とか馬鹿だろ。 帰納的に、現実に起こった事実と、チャートの微分を比較できなきゃ 予測がかすりさえしないだろ。
883 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 18:47:34.80 ] >>882 お前は質問スレで何言ってんだ? だったら、微分を調べろで良いだろ 馬鹿なのか?氏にやがれなのか?
884 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 21:10:40.43 ] ここ質問スレじゃないだろ・・・スレタイなんて書いてあ
885 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 21:15:05.39 ] あ、ホントだ ごめんよ
886 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 05:50:28.01 ] 木に一本だけ辺をつけ加えて最長となる閉路を探すアルゴリズムか グラフの中から最長となる閉路を探す方法を教えて下さい
887 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 14:11:58.10 ] >>886 前者の場合 元の木Tの最も深いノードをルートにした木T'において、 木T'のルートと最も深いノードの間に 一本だけ辺をつけ加えたのが最長閉路になるのでは?
888 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 11:34:06.03 ] 勉強で木構造とそれを巡回するイテレータをC++で作ってるんですが(STLのようなインターフェイスで) イテレータの内部にスタックorキューor到達済みノードのリストを動的に確保して保持することなく すべてのノードを巡回する方法はありますか? イテレーターなので再帰関数を使って一気にという事ができないので どうしても内部に状態を保持しないとダメかなとは思うんですがアロケートを駆使返すのは効率が気になって…
889 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 13:32:29.72 ] vectorかlistを包含したnodeクラス作って再帰で巡回させるのはだめなのかい?
890 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 20:48:32.37 ] 巡回する順番はどうでもいいんだったら すべてのノードを共通の動的配列上に確保しておけば?
891 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 21:27:39.01 ] Addしたら必ず1本の共通なリストにノードを追加するのはありだね!
892 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 22:06:08.91 ] オブジェクトプーリングするのもいいかも
893 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 22:27:53.42 ] 配列もリストも使わずに、状態保持もしないで全ノードを巡回するアルゴリズム ただし、木を破壊する [1]. ルートノードを巡回する [2]. ルートノードの子ノードから1つノードxを選び、 他の子ノードを全てxの子ノードにする [3]. xをルートノードと見なして [1] へ
894 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 22:32:36.91 ] 親へのポインタ持ってたら普通にできますた
895 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 14:44:27.48 ] バーローw
896 名前:デフォルトの名無しさん [2011/10/25(火) 21:39:34.27 ] 誰か教えてください。 アルゴリズム入門の授業なんですが ・性の小数部分を求めるサブルーチンDECのフローチャートを書け ・サブルーチンDECとサブルーチンINTを使って入力した正の実数の小数点以下を切り上げた 整数を表示するフローチャートを書け お願いします
897 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 22:24:50.90 ] まず浮動小数点数の規格を調べます
898 名前:デフォルトの名無しさん [2011/10/26(水) 02:34:55.29 ] 言語の持っている暗黙のキャスト機能が使ってよいなら簡単なんだが アルゴリズムの授業なんだから多分ダメなんだろうね。
899 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 04:55:27.33 ] まずは、整数値を求めればいい。元の値 - 整数値が小数部分だ。 切り上げは、小数部分が0かどうかで整数値か整数値+1かを返せばいい。 整数値は 1より小さくなるまで10で割るのを繰り返す。 その回数分10を掛けながら1〜9までの値と比較することで一桁づつ数字を確定していく… なかんじかな。ループ中に10を掛けている値から確定した数字を引いていくのと、 0に初期化してある変数に10を掛けながら足していくのを忘れずに。この変数が元の値の整数値になる。 浮動小数点数でやると、誤差が出るだろうけれど…
900 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 08:11:17.89 ] アルゴリズムをフローチャートで書かせるって、まだ一般的なんか?
901 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 09:02:43.69 ] いまどき信じられん教育のレベルだ
902 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 15:02:05.33 ] 高校の情報なんちゃらとかって科目じゃね?
903 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 15:14:01.81 ] てことは、日本の高校が信じられん教育レベルだって事実になってしまうわけだけども
904 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 15:17:13.30 ] www.johoka.net/flowchart.htm
905 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 15:17:20.20 ] 実際、「使える!Microsoft Office」って改名したらどうだ? って言いたくなるような 教科書が、高校の情報の教科書の中で一番人気だという話だ。
906 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 15:30:03.53 ] 大半の人にとって、Office の使い方が将来一番役立つ可能性が高いのは確かだけども。 日本のソフトウェア開発は育たないわね。
907 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 15:36:20.78 ] 小学校から徹底してopen officeを使うように指導すれば 日本全体でオフィスソフトに使われている莫大な金を節約できる
908 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 16:20:09.01 ] その考え方はまずい… 使う側からしたら無料なのはありがたいけど、作る側それこそ育たない。
909 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 17:41:00.78 ] その論理ではOpenOfficeはともかく、GCCとかはこの世に存在しないことになるね。
910 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 17:58:05.44 ] >>907 有料だと金が国外に流出してるだけだし かといって無料だと国内でも回らないし
911 名前:デフォルトの名無しさん [2011/11/07(月) 18:03:02.90 ] (ExcelVBAのスレから誘導されてきました) 末尾再帰の最適化について質問です。 FunctionA(n As Long) If n=0 then FunctionA=1 Else FunctionA=FunctionA(n-1)+FunctionB(n-1) End if End Function FunctionB(n As Long) If n=0 then FunctionB=2 Else FunctionB=FunctionA(n-1)+FunctionB(n-1) End if End Function このように末尾で2つの関数が再帰呼び出しされている場合、どのように最適化すればよいでしょうか。 nが大きいと2の累乗でスタックに詰まれていくから重くなるのだと思います。
912 名前:デフォルトの名無しさん [2011/11/07(月) 18:19:50.43 ] forをつかって普通にループをかいてください。 これで理解できなければあなたには無理です。
913 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 18:56:27.71 ] っていうか、FunctionA や FunctionB の演算って末尾なの?
914 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 19:25:14.40 ] どちらも、最後に自分に戻ってきて、2つの値を足して、それを戻す、という形になってるから、 末尾呼び出しになってない。
915 名前:デフォルトの名無しさん [2011/11/08(火) 00:20:34.51 ] うるさいな
916 名前:デフォルトの名無しさん [2011/11/08(火) 09:56:31.88 ] 足し算じゃなく1個ならforなりn--なりで終息させられるが2個なのが厄介だな
917 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 12:52:21.06 ] 例が悪いよ 2つの関数が再帰呼び出ししてるのは関数の末尾じゃないし、 FunctionA と FunctionB で異なるのは引数がゼロの場合の返値だけ おまけに、FunctionA(n-1)+FunctionB(n-1) は共に同じ n-1 に関数を適用してる だったらアルゴリズムのスレとしては、 相互再帰呼び出しの形自体を止めて一つの関数にまとめた方が効率が良い、 としか言いようがない そもそも、ここはアルゴリズム大辞典のスレなんだから、 何を実現したくてこのアルゴリズムを選択したのか言わないと議論にならん (何を入力して何を得るのか) これなら、ここじゃなくてExcelVBAの住人が答えるべきだと思うが
918 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 19:09:42.38 ] www.cc.kyoto-su.ac.jp/~yamada/ap/array_rep2sol.html このサイトの後半で紹介されている 最大公約数を使って配列を回転させるアルゴリズム 何か名称がついていたら教えてください。
919 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 19:38:54.10 ] >>918 もしかして、 p2.2ch.net/p2/read.php?host=hibari.2ch.net&bbs=tech&key=1086272325&rc=918#r917 ここの METHOD 3 と同じかな >>918 のページの方は配列の要素が遷移する様子が解説されていないから、 処理を追うのが面倒でざっとしか見てないが 「珠玉のプログラミング」という本にも METHOD 3 と同じ [お手玉の方法] として紹介されているらしいね
920 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 19:42:11.71 ] 開発者の ecommons.cornell.edu/handle/1813/6292 の中では Dolphin algorithm って書いてあるけど、 そんな名前で呼ばれてもだれもわからんだろうな
921 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 19:44:20.42 ] あと、ここも www.imminentweb.com/technologies/rotating-algorithms-programming-pearls-jon-bentley
922 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 19:58:54.92 ] >>919 , >>920 , >>921 ありがとうございます。 自分で図を書いて理解した後だと イルカが連なって飛び跳ねるイメージはしっくり来ますね。
923 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 20:02:34.39 ] 「珠玉のプログラミング」に載ってる、といって先日人から教えてもらったが、 名前が付いてるということは初めて見た気がする。
924 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 20:09:28.83 ] いや、俺も実際に「珠玉のプログラミング」を読んだわけじゃないんだ "gcd array rotate" でググったら、一番最初に >>919 のページがヒットして、 9件目にその本に載ってると書かれてたブログがヒットしたのを見ただけ
925 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 20:20:34.12 ] 本にも載ってるけど、大きい配列だとキャッシュが働かなくて結局遅いっぽいね
926 名前:918 [2011/11/08(火) 20:40:16.46 ] >>919 の URL では見えなかったですが www.geeksforgeeks.org/archives/2398 の事だったんですね。 キーワードが分かったのでたどり着けました。
927 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 21:08:53.87 ] どうしても速度を求めてるなら、テンポラリ使ったほうが速そう。 あるいは全体の位置が移動してもいいとか。エレガントな手法として悪くないと思うけど。
928 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 22:37:53.23 ] >>926 スマン、指摘されるまで全く気づかんかった 貼るURLを間違えてた
929 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 18:35:38.20 ] 上で紹介されている配列回転アルゴリズムはコピーにコストがかかるデータの場合に有利ですね。 テンポラリ配列や2回逆転方法の約半分のコピー回数で済むので 例えば、私の環境では以下のようになりました。 typedef struct { long id; long data[1000]; } data_t; こんなデータの配列 data_t arr[1000] を回転操作( 0〜999 ) $ gcc -O3 -o rotate_temporaly rotate_temporaly.c $ time ./rotate_temporaly rreal 0m3.172s user 0m3.158s sys 0m0.012s $ gcc -O3 -o rotate_reverse rotate_reverse.c $ time ./rotate_reverse real 0m1.915s user 0m1.910s sys 0m0.004s $ gcc -O3 -o rotate_dolphin rotate_dolphin.c $ time ./rotate_dolphin real 0m0.703s user 0m0.699s sys 0m0.003s おそらく細かい実装の違いではカバーしきれないほどの差が出ます。 まあ、この種のアルゴリズムが必要になる前にデータ構造の見直しをしたほうがいいとは思います。 リスト構造なら一部の配線付け替えで一瞬です
930 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 19:22:14.99 ] アルゴリズムの性能評価をするときに、コンパイラの最適化を有効にするのって無しでしょ?
931 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 20:04:05.29 ] >>930 確かにそうですね。 というわけで最適化無しでもやってみました。 $ time ./rotate_temporaly real 0m4.044s user 0m4.032s sys 0m0.011s $ time ./rotate_reverse real 0m10.280s user 0m10.274s sys 0m0.005s $ time ./rotate_dolphin real 0m3.495s user 0m3.490s sys 0m0.004s これで比べるとテンポラリ配列の方法もそれなりに健闘しています。 二回逆転の方法は、おい大丈夫か?レベルです。最適化ってすごいですね
932 名前:デフォルトの名無しさん [2011/11/09(水) 21:51:10.45 ] >>929 珠玉のデータはもっとでかい配列までとってたような気が。 > リスト構造なら一部の配線付け替えで一瞬です 目的の場所まで行くのに時間かかるから、結局O(n)だけどね。
933 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 21:53:47.81 ] >>930 > アルゴリズムの性能評価をするときに、コンパイラの最適化を有効にするのって無しでしょ? なんで?ありでしょ。 どれもO(n)だ、結局どれが速いのってときに、 最適化しなかったらコーディングの差を見てるだけになる。
934 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 22:12:51.33 ] コンパイラの最適化で比較するのは、本当に最後の最後 その前にもっとやっておくことがある 同じ O(n) でも n を何で測るかをちゃんと揃えないといけない 例えば一方のアルゴリズムはステップ数で測って、 他方のアルゴリズムはステップ数にメモリアクセスの数も含めて測る なんてやってはいけない その上でまだ同じ O(n) なら、今度はオーダーを計算する為に省いた係数を 低次元のものまでちゃんと補ってより細かく比較しないといけない コンパイラの最適化に頼って処理速度によるアルゴリズムの優劣を比較するのは 少なくともその後にすべきで、同じ O(n) だからといって安易にすべきではない それでも、その最適化による比較で分かるのはアルゴリズムの質的な優劣ではなく、 単にそのコンパイラや表現する言語と「相性が良いかどうか」でしかないと思う
935 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 22:17:14.40 ] node数が億単位(>=2^32)になるとlinked list実装の方がはるかに高速というハード(システム)も現実にある
936 名前:931 mailto:sage [2011/11/09(水) 22:30:20.09 ] ごめんなさい。単に興味を持ってやってみたらこうなったよ程度に受け取ってください。
937 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 22:34:33.71 ] キャッシュの有効利用でさえ、良いアルゴリズムの条件。 最適化なしに測定なんかできん。
938 名前:931 mailto:sage [2011/11/09(水) 22:35:58.31 ] >>932 なんか蒸し返してしまいますが >目的の場所まで行くのに時間かかるから、結局O(n)だけどね。 例にあげたようなノードオブジェクトが大きい場合 リンクを辿るのに要するコスト < ノードコピーに要するコスト になりますよね。 >>934 の言う オーダーを計算するための係数の違いという事になると思います。
939 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 22:41:21.64 ] >>937 そうであるなら、その比較検証に使用したマシンの キャッシュ性能や特性もちゃんと細かく公表しないとけないね (細かくと言うのは、処理速度の計測に影響が出る範囲でという意味) でなければ、追試や他環境との比較ができない
940 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 22:53:01.18 ] もちろん。最善のアルゴリズムなんて、マシン固有のもので、 だからこそatlasなんかビルド時にベンチマークしてチューンしまくる。
941 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 22:53:21.32 ] そこまでやらなないと優位性をアピール出来ないような代物はハードの性能向上によって数年で淘汰される
942 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 12:09:55.94 ] アホかwwww BLASが何年生き残ってると思ってるんだwwww 新しいハードウェアができたらそれに合わせてパラメータをチューニングするんだよ
943 名前:デフォルトの名無しさん [2011/11/10(木) 13:38:08.42 ] ソートのアルゴリズムの性能って、数学的にはデータを移動させる回数で評価するんだっけ?
944 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 14:43:19.12 ] 比較する回数じゃなかったっけ?
945 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 14:54:42.97 ] 比較して、結果によって一定割合で移動が発生するんで、どっちでも同じ
946 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 14:57:53.23 ] もしオーダーが違うなら当然大きい方な
947 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 17:56:42.11 ] 比較に時間がかかる場合、コピー(移動)するのも時間がかかるか? それは場合によるので一般的な基準はないでしょうね。
948 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 09:21:28.97 ] 無比較ソート
949 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 19:47:40.37 ] 比較にむちゃくちゃ時間がかかる場合は、一般的でない別の手法を使うこともある 移動については、ワードよりでかい物のソートの時はポインタ使うのが普通
950 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 22:49:55.98 ] そんなこんなでソートのアルゴリズムの優劣の比較には 値の大小判定の回数を使うのが普通
951 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 22:54:18.35 ] STLを馬鹿にするな
952 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 12:37:01.03 ] STLを馬鹿レスがどこにある?
953 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 21:14:05.30 ] 乱数におけるXORみたいに、処理が少なくてなおかつそれなりに良い感じにバラける、典型的なハッシュアルゴリズムってありますか? ちなみに入力はゼロ終端のASCII文字列で出力はintです
954 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 21:16:27.86 ] XORShiftのこと?
955 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 21:21:41.41 ] 俺の知る限りだとZobrist Hashingが使えるね 1文字ごとにあらかじめ用意したテーブルから文字に対応する乱数を持ってきてXORしていく そこそこ軽くてばらつきはいいよ
956 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 22:35:28.70 ] >>955 良い感じですね ありがとうございます
957 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 01:46:10.28 ] 重ならない矩形領域が沢山あって、 矩形領域内を差した時にどの矩形領域内を差したかを 効率よく判定する方法がありましたら教えてください
958 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 01:48:54.81 ] 個数は何桁くらい?
959 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 01:54:28.80 ] >>957 矩形をx方向にソートしてx方向で二分探索して候補を絞る 絞った候補をy方向にソートしてy方向で二分探索して確定
960 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 03:29:35.09 ] そんな単純にはいかない
961 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 03:51:15.50 ] 開き直って全数探索するのがマシだったりするけど まあ例えばいくつかの領域に区切り それぞれの領域と重なるオブジェクトを登録しておくとか…
962 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 04:22:36.90 ] 領域が重なるならR-Treeがいいけど、 重ならなくてもR-Treeでいいかも まぁ、簡単な >>959 を試してからでいいね
963 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 07:25:04.86 ] 二分探索が適用できる矩形のソートってどうやるの?
964 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 09:20:04.63 ] ヒットテストは 1つの点対無数の矩形なのか 無数の点対無数の矩形なのか 何回ぐらい判定するのか 複数回判定するとして矩形の座標は頻繁に更新されるのか固定なのか このへんの情報で変わってくるよね 点1つ、判定一回なら全探索が最速だし そうでないなら空間分割が速い
965 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 12:52:40.84 ] この辺り、「プログラミングのための線形代数」って本を読むと、 いろいろヒントが得られる
966 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 12:54:24.91 ] >>965 間違えちゃった 「コンピュータ・ジオメトリ―計算幾何学:アルゴリズムと応用」 でした
967 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 15:08:59.61 ] 二分木構造の外部イテレーターってスタック無し、巡回済マーク無しでも実装できる?
968 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 15:40:59.57 ] 巡回済マークの一種かもしれんが、Knuthがポインタ付け替え法というのを提案してる。 激しくおすすめできないが。
969 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 15:59:05.77 ] 望みのイテレート順はあるの?
970 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 17:28:00.43 ] >>968 すいませんググったけどわかりませんでした >>969 pre-orderを考えてます
971 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 09:59:11.16 ] あーごめん「ポインタ反転法」だわ
972 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 19:38:15.54 ] ノードは親ノードの参照を持ってるの? 持ってるのならそれほど難しい問題ではないけども・・・。
973 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 20:28:32.10 ] pre-orderって何?
974 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 09:01:44.93 ] 行きがけ順?
975 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 12:35:05.74 ] Wikipedia で「木構造」を調べてみろ 他の情報も合わせて詳しく載ってる
976 名前:デフォルトの名無しさん [2011/12/27(火) 17:38:21.78 ] 最大の色差を持つn階調の色テーブルを作るアルゴリズム教えて。 例えば10色欲しいとしたら、10個のテーブルで、各色の色差が最もあるテーブルを作りたい。 単色グラデーションなら簡単だけどRGB織り交ぜた最大の色差を出すのが難しい。
977 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 17:54:40.80 ] 特定の3次元空間の領域内で、 それぞれの距離の平均が最大となるn個の点の座標を求める問題と同じ? 特定の3次元空間の領域内というのがRGB色空間やHSV色空間になるわけだけど
978 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 02:14:38.09 ] 「最大の色差を持つ」がどういうことなのか定義しよう 色iと色jの距離をd(i,j)としたとき、次の(1),(2),(3)のどの定義を採用するかで (1) min_{i<j} d(i,j) が最大 (2) sum_{i<j} d(i,j) が最大 (3) sum_{i<j} d(i,j)^2 が最大 それぞれ違った答えが出てくる 次にこういった変数の個数の多い問題は手計算で答えを得ようとせず プログラムを書いて数値計算で求めてみよう step 1. 乱数でn個の色の初期値を決める step 2. 乱数でn色の中から1色をランダムに選び、その色だけを変えて他の色を変更せずに 「色差」が最大になるようにする. この操作を1000回ぐらい繰り返す 問題の性質が良ければ、適当な答えに収束するかも
979 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 07:20:57.68 ] 10個くらいなら、全ての点と点の間に自然長が色空間より遙か長いバネを入れて、 色空間の中心にぎゅっと押し込めてから緊張を解くことをシミュレートしてみるとか やったこと無いから、実際にどうなるかは知らんが
980 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 08:21:41.06 ] 大団円
981 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 19:20:40.87 ] 10色なら、真っ白と真っ黒と円周上の6色だよな?
982 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 19:25:49.87 ] >>981 証明しろよ
983 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 10:19:39.29 ] >>981 6角形の一辺の2色と、一つ飛びの2色との間にある色は 一辺の色差より大きい だめだ論破 8色だと、立方体の頂点でいいんだよな。たぶん。
984 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:20:05.95 ] RGBでもHSVでも空間距離が単純に見た目の色差と比例するわけではないよ 全ての点間で距離を最大化できても見づらい色同士が出てくる
985 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 21:05:13.74 ] n体の色相環を使うのはダメなの?
986 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 21:15:13.49 ] >>984 > 全ての点間で距離を最大化できても見づらい色同士が出てくる かどうかは、やってみなくちゃ分からんと思うが そもそも、距離を最大化する配置が分かってないのに言えんだろ