計算アルゴリズム【U】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2009/01/18(日) 17:30:26
それは本実装(リリースとか論文掲載とか)のときですよね。
実験や試験的に試行錯誤したりするときはやっぱりC/C++なんですか?
アルゴリズはほとんどがメモリ操作であって、ハードをいじったりハードにアクセスすることはないので、
C/C++じゃなくJavaやRuby,C#(他のでもいいんですけど)でいいかなと思うんですが。
953デフォルトの名無しさん:2009/01/18(日) 17:31:08
>>950
アルゴリズムの種類にも、状況にも拠る。
行列が対象ならmatlabクローンのoctaveで確認してからってこともあるし、
数値解析関係ならmklが使えるc/c++からってこともあるし、
持ってお手軽にOpenOfficeCalcでちょちょいと試してからってこともある。
954デフォルトの名無しさん:2009/01/18(日) 17:32:27
逆に寧ろ、C++を嫌う理由が判らん。
Cだとメモリ確保が面倒だってこともあるけれど、C++ならクラスも使えるしSTLもあるから融通が利くと思うが。
955デフォルトの名無しさん:2009/01/18(日) 17:32:59
ちょっとしたパズル問題を解くときにはScheme使っている。
956デフォルトの名無しさん:2009/01/18(日) 17:42:47
Mathematica でやる人もいるか。
957デフォルトの名無しさん:2009/01/18(日) 17:50:57
>>954
アルゴリズムの実装にクラス生成が必要ならその意見もわかるんですけど、そこまでC++に慣れちゃってるんですか?
べつにC/C++でも普通に使えるんでなんでもいいんですけど、Cはポインタに関係するバグ(というかコードミス)が多くて実装と関係なく、
C++はvtableがらみアライメントがらみでこれまた面倒が多いので、結局現代的なJavaとかになるんじゃないかなって。

Java,C#はGUI(アプレットとか)も簡単に作れるんで、グラフ化したり視覚的に速度比較するのも余裕なんですが。
The Sorting Algorithm Demo (1.1)
http://java.sun.com/applets/jdk/1.3/demo/applets/SortDemo/example1.html

英語はそんな苦じゃないので主にJava使ってますけど。
958デフォルトの名無しさん:2009/01/18(日) 17:57:09
さて順調に脱線してまいりました。
959デフォルトの名無しさん:2009/01/18(日) 18:00:42
初心者のためのプログラミング言語ガイド Part12
http://pc11.2ch.net/test/read.cgi/tech/1226761546/
960デフォルトの名無しさん:2009/01/18(日) 18:01:05
>>957
いやだから、何でわざわざ地雷を踏まないといけないのよ。
C++使うからといって必ず継承するような必要もないし、低レベルのメモリ管理をする必要もないんだけど。
例えばたまたま手元にあるデータをちょっと加工したいときはawkを使うことだってあるけど、
そんなときに処理速度なんか気にしないしね。

あんたがJavaやC#やRubyに精通していて、他はろくに知らんと言うのなら黙ってJavaやC#やRubyを使っていてくれ。
こっちは適材適所でやるから。
961デフォルトの名無しさん:2009/01/18(日) 18:01:07
>>957
とりあえずコテハンつけてくんない?
962デフォルトの名無しさん:2009/01/18(日) 18:18:37
アルゴリズムの実装については速いかどうかしか評価されていないようですけど、
確実に停止するか(解が得られるか)が一番大事なことなんじゃないでしょうか?

それも、汎用的なアルゴリズムは既に50-70年代で出し尽くしてるので、
それ以上の技巧を凝らすのはナノ秒を競い合って職人技(論文)合戦しているだじゃないですか。
新しい分野たとえば動画の動き予測とかガベジコレクトとか資金が流れてるところはアルゴリズム研究もHOTななんですけどね・・

なので、解が得られるかどうかが一番大事なのにいつのまにか速度(O[n^2]とか)の問題になって、速度(速く解が得られるか)にこだわる意味が全く分からないんですが、どうしてですか?
そういう速い・実用ではないなどの問題はアルゴリズムじゃなくてハードの問題なんじゃないでしょうか?
963デフォルトの名無しさん:2009/01/18(日) 18:20:46
計算アルゴリズムというよりは計算機アーキテクチャとか実践プログラミング(笑)の話題だな
964デフォルトの名無しさん:2009/01/18(日) 18:30:14
アルゴリズムを語るときに、オーダーを無視する奴なんて論外だろ?
log n と n^2 を同列に扱えって主張はおかしい。
965デフォルトの名無しさん:2009/01/18(日) 18:32:53
>>960
適材適所とかなによ?誰もあんたのプログラミングスタイルなんか聞いてないよw
966デフォルトの名無しさん:2009/01/18(日) 18:35:32
> 確実に停止するか(解が得られるか)が一番大事なことなんじゃないでしょうか?
その通り。これを評価する仕組みがO記法によるオーダー。これは計算量であって速度そのものではない。

例えば、O(n)やO(n log n)くらいなら、ハードウェアの性能向上でなんとかなると言える。
逆にO(c^n)なら入力をちょっと増やすだけですぐに計算量がおそろしく増えるから、
ハードウェアの性能向上は待っていられないねという具合。

現在、1日で答えが欲しい問題を解くに1年かかるなら、それは答えが出ないのと同じこと。
967デフォルトの名無しさん:2009/01/18(日) 18:41:51
ダメだこりゃ。
968デフォルトの名無しさん:2009/01/18(日) 18:42:41
そりゃ速いに越したことないけど、実際は新しい分野で確実に答えが出るアルゴリズム(
なんて考えつく人は○○賞もらうレベルの人で滅多にないから。圧縮とかでも。
それをベースとして2,3度修正して速度調整する程度でアルゴリズム(ソフト)上の仕事は終わり。

例えば、O[n^2]だとしてもそのハードで40ナノ秒程度なら誰も気にしないよ。
かといってO[1]なのに、5秒掛かるなら問題あるなぁ。
例えばハイパリンク押した(定数)なのに、応答(ダウンロード)が5秒とか。
実践云々じゃなくて、そういうこと。
969デフォルトの名無しさん:2009/01/18(日) 18:47:03
>>962
普通のアルゴリズム論の文脈では、停止しないものはアルゴリズムとは言わない。

あと、普通のアルゴリズム系の論文では実時間を競うようなことはしない。
実時間なんて実行環境によっていくらでも変わるから、オーダーで測る。
970デフォルトの名無しさん:2009/01/18(日) 18:48:02
>>968
頼むからコテハンつけてくれ
971デフォルトの名無しさん:2009/01/18(日) 18:56:37
>>968
計算量=実実行時間なの?バカなの?死ぬの?
972デフォルトの名無しさん:2009/01/18(日) 18:58:52
たとえが例えになってないので、ソーティングの話で例えてください (10点)
973デフォルトの名無しさん:2009/01/18(日) 18:59:26
>>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
並列計算って計算量的にどう変わるんだっけ。
975デフォルトの名無しさん:2009/01/18(日) 19:13:32
>>973
かなり関係あると思うんですけどーwwwwwwwwwwwwwwwww
976デフォルトの名無しさん:2009/01/18(日) 19:20:52
>>974
大まかには単純にコア数分の1にしかならない。
実際にはコア数分の1になるのは並列化効率100%の時だけで、
100%に満たない場合はいくらマシンを増やしても
あまり効率が上がらない限界が存在する。
アムダールの法則でググれ。
977デフォルトの名無しさん:2009/01/18(日) 19:24:33
アルゴ君が、逆切れしてまいりました。そろそろ自演や荒しが始まります。
978デフォルトの名無しさん:2009/01/18(日) 19:27:02
他の計算結果を利用しないなら、並列数だけ倍増だろ。
例えば、素数を割り切れるかどうかで判定しようとすれば
1 - 100 と 101 - 200は別々に処理できる。
979デフォルトの名無しさん:2009/01/18(日) 19:36:59
オーダ数はアルゴリズムの性能を評価するためだけに導入されているだけですよ?

だから通常の利用で1秒以内に答えが欲しいなら、O[n]もO[n^2]も実質同じってことです。
実質同じなのに性能比較する必要はあまり実益があるとはいえません。
つまりハード(資源)が速く十分に使えるため、アルゴリズムが性能に及ぼす影響は全くないということです。
O[c^n]とかでも今のハード(例えば携帯とか)では n<2^64 までとか縛ればいいだけです。
なんか「理系が騙される統計のマジック!」とかと同列の議論ですね。w

それにも係わらずいつまでもオーダを気にするのはいかがなものかと。
980デフォルトの名無しさん:2009/01/18(日) 19:39:23
アルゴと略さないと誰も釣れないぞ。
981デフォルトの名無しさん:2009/01/18(日) 19:41:33
>>979
ここはアルゴリズムのスレなので、オーダを気にするところです。
つまり、自らスレ違いである理由を列挙しているということです。
982デフォルトの名無しさん:2009/01/18(日) 19:43:01
各アルゴリズムの性能評価のオーダ量と、それを実際に適用・活用する(性能比較)のコスト(時間やバグ取りなど運用コスト)は分けてますか?
いくら早くてもあまりに実装が複雑なアルゴ、あまりに難解な論文はいらないかなって・・・
そのうち(3年程度で)ハードの方が速くなって、そういう運用のためのコストが高いアルゴリズムはどうでもよくなるんですけど、どうしてオーダでしか評価しないんですか?

983デフォルトの名無しさん:2009/01/18(日) 19:45:44
アルゴと略さないと誰も釣れないぞ。
984デフォルトの名無しさん:2009/01/18(日) 19:52:39
たしかにオーダ表記に騙されてたよな・・・
差分時間も3ミリ秒程度で実質同じなのに・・・

情報系が騙されるオーダ記法のマジック!w
985デフォルトの名無しさん:2009/01/18(日) 21:05:19
そろそろ自演がはじまったようですから、気をつけてくださいね
986デフォルトの名無しさん:2009/01/18(日) 21:15:13
実装が難しいなら、頭のいい人に任せるだけ。
クイックソートはqsortを呼び、PNGを作りたければlibpngをリンクする。
987デフォルトの名無しさん:2009/01/18(日) 21:51:57
「ぼくが理解できないアルゴリズムは禁止」
988デフォルトの名無しさん:2009/01/18(日) 21:59:24
>>986
自分たちの開発対称になってるドメイン固有の問題はどうすんの?
989デフォルトの名無しさん:2009/01/18(日) 22:12:54
金さえちゃんと払えば頭のいい外注さんとというのもありだろ。
990デフォルトの名無しさん:2009/01/18(日) 22:16:49
>>988
さあ?アルゴ本人に聞いてみたいところだ。
991デフォルトの名無しさん:2009/01/18(日) 22:46:03
次スレ立てる?
それともここ使う?
http://pc11.2ch.net/test/read.cgi/tech/1217773415/
992デフォルトの名無しさん:2009/01/18(日) 23:25:21
正直どっち使っていいか判らんから
1つでいいよ
993デフォルトの名無しさん:2009/01/18(日) 23:30:33
じゃあ埋め
994デフォルトの名無しさん:2009/01/18(日) 23:32:00
俺も一つでいい
995デフォルトの名無しさん:2009/01/18(日) 23:34:23
アルゴ体操はじまるよー
996デフォルトの名無しさん:2009/01/19(月) 00:12:40
は?
997デフォルトの名無しさん:2009/01/19(月) 00:16:10
アルゴ探検隊の大冒険
998デフォルトの名無しさん:2009/01/19(月) 00:56:32
アルゴ君体操!
999デフォルトの名無しさん:2009/01/19(月) 03:35:57
.
1000小倉優子 ◆YUKOH0W58Q :2009/01/19(月) 03:36:28
1000ならジュースでも飲むか
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。