それは本実装(リリースとか論文掲載とか)のときですよね。
実験や試験的に試行錯誤したりするときはやっぱりC/C++なんですか?
アルゴリズはほとんどがメモリ操作であって、ハードをいじったりハードにアクセスすることはないので、
C/C++じゃなくJavaやRuby,C#(他のでもいいんですけど)でいいかなと思うんですが。
>>950 アルゴリズムの種類にも、状況にも拠る。
行列が対象ならmatlabクローンのoctaveで確認してからってこともあるし、
数値解析関係ならmklが使えるc/c++からってこともあるし、
持ってお手軽にOpenOfficeCalcでちょちょいと試してからってこともある。
逆に寧ろ、C++を嫌う理由が判らん。
Cだとメモリ確保が面倒だってこともあるけれど、C++ならクラスも使えるしSTLもあるから融通が利くと思うが。
ちょっとしたパズル問題を解くときにはScheme使っている。
Mathematica でやる人もいるか。
さて順調に脱線してまいりました。
959 :
デフォルトの名無しさん:2009/01/18(日) 18:00:42
>>957 いやだから、何でわざわざ地雷を踏まないといけないのよ。
C++使うからといって必ず継承するような必要もないし、低レベルのメモリ管理をする必要もないんだけど。
例えばたまたま手元にあるデータをちょっと加工したいときはawkを使うことだってあるけど、
そんなときに処理速度なんか気にしないしね。
あんたがJavaやC#やRubyに精通していて、他はろくに知らんと言うのなら黙ってJavaやC#やRubyを使っていてくれ。
こっちは適材適所でやるから。
アルゴリズムの実装については速いかどうかしか評価されていないようですけど、
確実に停止するか(解が得られるか)が一番大事なことなんじゃないでしょうか?
それも、汎用的なアルゴリズムは既に50-70年代で出し尽くしてるので、
それ以上の技巧を凝らすのはナノ秒を競い合って職人技(論文)合戦しているだじゃないですか。
新しい分野たとえば動画の動き予測とかガベジコレクトとか資金が流れてるところはアルゴリズム研究もHOTななんですけどね・・
なので、解が得られるかどうかが一番大事なのにいつのまにか速度(O[n^2]とか)の問題になって、速度(速く解が得られるか)にこだわる意味が全く分からないんですが、どうしてですか?
そういう速い・実用ではないなどの問題はアルゴリズムじゃなくてハードの問題なんじゃないでしょうか?
計算アルゴリズムというよりは計算機アーキテクチャとか実践プログラミング(笑)の話題だな
アルゴリズムを語るときに、オーダーを無視する奴なんて論外だろ?
log n と n^2 を同列に扱えって主張はおかしい。
>>960 適材適所とかなによ?誰もあんたのプログラミングスタイルなんか聞いてないよw
> 確実に停止するか(解が得られるか)が一番大事なことなんじゃないでしょうか?
その通り。これを評価する仕組みがO記法によるオーダー。これは計算量であって速度そのものではない。
例えば、O(n)やO(n log n)くらいなら、ハードウェアの性能向上でなんとかなると言える。
逆にO(c^n)なら入力をちょっと増やすだけですぐに計算量がおそろしく増えるから、
ハードウェアの性能向上は待っていられないねという具合。
現在、1日で答えが欲しい問題を解くに1年かかるなら、それは答えが出ないのと同じこと。
ダメだこりゃ。
そりゃ速いに越したことないけど、実際は新しい分野で確実に答えが出るアルゴリズム(
なんて考えつく人は○○賞もらうレベルの人で滅多にないから。圧縮とかでも。
それをベースとして2,3度修正して速度調整する程度でアルゴリズム(ソフト)上の仕事は終わり。
例えば、O[n^2]だとしてもそのハードで40ナノ秒程度なら誰も気にしないよ。
かといってO[1]なのに、5秒掛かるなら問題あるなぁ。
例えばハイパリンク押した(定数)なのに、応答(ダウンロード)が5秒とか。
実践云々じゃなくて、そういうこと。
>>962 普通のアルゴリズム論の文脈では、停止しないものはアルゴリズムとは言わない。
あと、普通のアルゴリズム系の論文では実時間を競うようなことはしない。
実時間なんて実行環境によっていくらでも変わるから、オーダーで測る。
>>968 計算量=実実行時間なの?バカなの?死ぬの?
たとえが例えになってないので、ソーティングの話で例えてください (10点)
>>966 あの〜意味が全く分からないですが、O[c^n]のアルゴwをn=2Gのデータ量に適用した場合、nが600MB増減してまあまり関係ないと思うんですけど。
たとえばコーデックとかだと当たり前ですよ?w
製作時間(総レンダリング)が3年にも及ぶCGを駆使した映画とか昔はありましたけど?
その1年ですけど、O[c^n]のアルゴwで並列計算(PC100台とかGPU20枚のハード)でやったら30秒で答えが出たとき、あなたは考え方を変えますかね。
どうせあなたは教科書読んで勉強すら出来ない人なんでしょうけど、あなたは何を言いたいんですか?
974 :
デフォルトの名無しさん:2009/01/18(日) 19:11:22
並列計算って計算量的にどう変わるんだっけ。
>>973 かなり関係あると思うんですけどーwwwwwwwwwwwwwwwww
>>974 大まかには単純にコア数分の1にしかならない。
実際にはコア数分の1になるのは並列化効率100%の時だけで、
100%に満たない場合はいくらマシンを増やしても
あまり効率が上がらない限界が存在する。
アムダールの法則でググれ。
アルゴ君が、逆切れしてまいりました。そろそろ自演や荒しが始まります。
978 :
デフォルトの名無しさん:2009/01/18(日) 19:27:02
他の計算結果を利用しないなら、並列数だけ倍増だろ。
例えば、素数を割り切れるかどうかで判定しようとすれば
1 - 100 と 101 - 200は別々に処理できる。
オーダ数はアルゴリズムの性能を評価するためだけに導入されているだけですよ?
だから通常の利用で1秒以内に答えが欲しいなら、O[n]もO[n^2]も実質同じってことです。
実質同じなのに性能比較する必要はあまり実益があるとはいえません。
つまりハード(資源)が速く十分に使えるため、アルゴリズムが性能に及ぼす影響は全くないということです。
O[c^n]とかでも今のハード(例えば携帯とか)では n<2^64 までとか縛ればいいだけです。
なんか「理系が騙される統計のマジック!」とかと同列の議論ですね。w
それにも係わらずいつまでもオーダを気にするのはいかがなものかと。
アルゴと略さないと誰も釣れないぞ。
>>979 ここはアルゴリズムのスレなので、オーダを気にするところです。
つまり、自らスレ違いである理由を列挙しているということです。
各アルゴリズムの性能評価のオーダ量と、それを実際に適用・活用する(性能比較)のコスト(時間やバグ取りなど運用コスト)は分けてますか?
いくら早くてもあまりに実装が複雑なアルゴ、あまりに難解な論文はいらないかなって・・・
そのうち(3年程度で)ハードの方が速くなって、そういう運用のためのコストが高いアルゴリズムはどうでもよくなるんですけど、どうしてオーダでしか評価しないんですか?
アルゴと略さないと誰も釣れないぞ。
たしかにオーダ表記に騙されてたよな・・・
差分時間も3ミリ秒程度で実質同じなのに・・・
情報系が騙されるオーダ記法のマジック!w
そろそろ自演がはじまったようですから、気をつけてくださいね
実装が難しいなら、頭のいい人に任せるだけ。
クイックソートはqsortを呼び、PNGを作りたければlibpngをリンクする。
987 :
デフォルトの名無しさん:2009/01/18(日) 21:51:57
「ぼくが理解できないアルゴリズムは禁止」
>>986 自分たちの開発対称になってるドメイン固有の問題はどうすんの?
金さえちゃんと払えば頭のいい外注さんとというのもありだろ。
>>988 さあ?アルゴ本人に聞いてみたいところだ。
正直どっち使っていいか判らんから
1つでいいよ
じゃあ埋め
俺も一つでいい
アルゴ体操はじまるよー
は?
アルゴ探検隊の大冒険
アルゴ君体操!
.
1000ならジュースでも飲むか
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。