遅いアルゴリズム
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/04/06(木) 04:02:120002デフォルトの名無しさん
2006/04/06(木) 04:04:440003デフォルトの名無しさん
2006/04/06(木) 04:08:410004デフォルトの名無しさん
2006/04/06(木) 04:14:070005デフォルトの名無しさん
2006/04/06(木) 04:18:300006デフォルトの名無しさん
2006/04/06(木) 04:19:29100万1回の方が遅いと思う
0007デフォルトの名無しさん
2006/04/06(木) 06:24:290008デフォルトの名無しさん
2006/04/06(木) 08:09:55そこはbogosortだろ
0009デフォルトの名無しさん
2006/04/06(木) 12:42:29これ最強。
0010デフォルトの名無しさん
2006/04/06(木) 16:06:390011GiantLeaves ◆6fN.Sojv5w
2006/04/06(木) 16:09:060012デフォルトの名無しさん
2006/04/06(木) 16:09:590013デフォルトの名無しさん
2006/04/06(木) 18:51:160014デフォルトの名無しさん
2006/04/06(木) 18:52:110015デフォルトの名無しさん
2006/04/06(木) 19:58:20ソースを見たら、1バイトずつgetc()で読んでいる所為だった。
#スレ違いになるが、fread()で読み込むように修正したら無茶苦茶速くなった。
0016デフォルトの名無しさん
2006/04/07(金) 05:44:040017デフォルトの名無しさん
2006/04/07(金) 08:18:20無限ロックはかからない遅延評価マンセー
0018デフォルトの名無しさん
2006/04/07(金) 08:34:22stdio はバッファリングしてるから getc を呼びまくってもそれほど遅くはならないような気がするんだけどな
0019デフォルトの名無しさん
2006/04/07(金) 11:33:31002015
2006/04/07(金) 11:54:16いや、漏れもそう思っていたんだが実際遅かったんだよ。
単にファイルのCRCを計算するだけのロジックだったんだが、18秒が3秒ほどになったからね。
これはそのファイルを単にcatするのに1秒ほど掛かるのに較べればそれほど悪くない。
それと較べると、同じファイルをodすると(整形が伴うとは言え)53秒も掛かる方がどうかと思う。
0022デフォルトの名無しさん
2006/04/07(金) 14:50:150023デフォルトの名無しさん
2006/04/07(金) 15:43:570024GiantLeaves ◆6fN.Sojv5w
2006/04/07(金) 17:21:100025デフォルトの名無しさん
2006/04/07(金) 19:27:200026GiantLeaves ◆6fN.Sojv5w
2006/04/07(金) 22:19:070027デフォルトの名無しさん
2006/04/08(土) 00:54:55king もゲームやるの?
0028GiantLeaves ◆6fN.Sojv5w
2006/04/08(土) 09:05:420029デフォルトの名無しさん
2006/04/08(土) 09:34:10どうしてDOSプログラムのコンパイルに
DOSの後継OSで親和性も高いWindowsを使わずに
おかしなOSエミュレータ使うんだ?
0030デフォルトの名無しさん
2006/04/08(土) 16:48:000031デフォルトの名無しさん
2006/04/08(土) 22:15:070032デフォルトの名無しさん
2006/04/09(日) 09:01:37遅いアルゴリズムは一般的には最楽を願う所からスタートするからだよ。
ほんとに一番楽かどうかじゃなくて、自分にとって楽に思えるという意味ね。
実際は一番バカな選択だと判っていても
0033デフォルトの名無しさん
2006/04/09(日) 15:21:510034デフォルトの名無しさん
2006/04/09(日) 17:43:05そのためにCPUやメモリやHDDなどが
進化しているといっても差し支えない。
ただ、計算オーダーの変化が激しいものは
いくら時代が経過しても受け入れられないから×
0035デフォルトの名無しさん
2006/04/09(日) 18:21:110036デフォルトの名無しさん
2006/04/09(日) 18:44:280037デフォルトの名無しさん
2006/04/09(日) 21:23:030038デフォルトの名無しさん
2006/04/09(日) 21:24:36何回ループするの?
0039デフォルトの名無しさん
2006/04/09(日) 21:57:55よく見ろ線形じゃなく線「型」だ
0040デフォルトの名無しさん
2006/04/09(日) 22:04:530041デフォルトの名無しさん
2006/04/10(月) 18:36:32型→かた
と分けて読む業界の人?
0042デフォルトの名無しさん
2006/04/11(火) 23:26:010043デフォルトの名無しさん
2006/04/11(火) 23:33:22あるある。業務アプリってやつだね(違
0044デフォルトの名無しさん
2006/04/12(水) 14:55:58for(;;)
を入れれば遅くなるよ。いつまでたっても終了しない。
0045GiantLeaves ◆6fN.Sojv5w
2006/04/12(水) 16:12:58適当なサイズのウィンドウを作り、
キャラクターを一つ置いてアローキー一つ、または反対どうしにならない二つが押されている間
ウィンドウの端に到達しない限り一定の速さでキャラクターがアローの方向に従って動き、
キャラクターがウィンドウからキャラクターがはみ出したり消えたりしそうになったら、
キャラクターが端の方向に関しては止まるプログラムを作成せよ。
0046デフォルトの名無しさん
2006/04/12(水) 18:16:20……する時刻も確認すると?
0047デフォルトの名無しさん
2006/04/15(土) 00:12:18int i;
int NewValue;
int NumberFlag[9999];
for (i = 0; i <= 9999; i++) {
NumberFlag[i] = 0;
}
for (i = 0; i <= 9999; i++) {
do {
NewValue = rand() % 10000
} While (NumberFlag[NewValue] == -1);
printf("%d ", NewValue);
NumberFlag[NewValue] = -1;
}
0048デフォルトの名無しさん
2006/04/15(土) 00:48:310049デフォルトの名無しさん
2006/04/15(土) 02:24:11とあるbasicで書かれていたマージャンソフト。
プレイヤの手番の度に持ち牌を最大値ソートしていた。
ツモった牌だけを挿入ソートの要領で場所決めするようにしたら目に見えて速くなった。
今だとその手の駄目アルゴリズムでも見た目に影響ないからなぁ……
0050デフォルトの名無しさん
2006/04/15(土) 10:06:520051デフォルトの名無しさん
2006/04/15(土) 12:41:570052デフォルトの名無しさん
2006/04/15(土) 16:16:01{
if (num == 2) {
if (data[0] > data[1]) {
int temp = data[0];
data[0] = data[1];
data[1] = temp;
}
}
if (num > 2) {
sort(data + 1, num - 1);
sort(data, 2);
sort(data + 1, num - 1);
}
}
0053デフォルトの名無しさん
2006/04/18(火) 12:58:14この時期の入社したての連中に書かせたら、普通に見かけそうでヤな関数だね。
0054GiantLeaves ◆6fN.Sojv5w
2006/04/18(火) 15:22:310055GiantLeaves ◆6fN.Sojv5w
2006/04/18(火) 15:23:45自分なりに良いプログラムを書くのが務めではないのか?
0056デフォルトの名無しさん
2006/04/18(火) 15:27:40「遅い」という極めて漠然とした要求仕様を十分に満たすべく、
思いつく限りの手を尽くして極限まで遅くしなければならない。
0057デフォルトの名無しさん
2006/04/18(火) 16:48:450058GiantLeaves ◆6fN.Sojv5w
2006/04/18(火) 17:49:270059デフォルトの名無しさん
2006/04/18(火) 19:37:430060デフォルトの名無しさん
2006/04/18(火) 19:54:38簡単だよ。元の列を順列並べ変えしながら、整列できたかどうか
調べるgenerate and test。これはのろいぞ。
もっとのろいのは、元の列をシャッフルしながら同様に調べる。
ただし確率的アルゴリズムになってしまうが。
0061デフォルトの名無しさん
2006/04/18(火) 21:13:050062デフォルトの名無しさん
2006/04/18(火) 21:41:32N進N桁の多倍長整数を0から順に調べて
重複せずなおかつソートされているモノを返すようにすればいいんじゃないか?
0063デフォルトの名無しさん
2006/04/18(火) 22:18:38後者にあたるのが >>8 のbogosortだな
0064デフォルトの名無しさん
2006/04/18(火) 22:49:290065デフォルトの名無しさん
2006/04/19(水) 02:35:020066デフォルトの名無しさん
2006/04/19(水) 09:05:44そーとー遅いな
0067デフォルトの名無しさん
2006/04/19(水) 09:28:530068デフォルトの名無しさん
2006/04/19(水) 18:47:130069
2006/04/19(水) 18:49:50#define n 13
int main(void) {
int c;
while( (c = getchar()) != '\n' ) {
if((c>64 && c<78) || (c>96 && c<110))
c = c + n;
else if((c>77 && c<91) || (c>109 && c<123))
c = c - n;
putchar(c);
}
printf("\n");
}
0070
2006/04/19(水) 18:50:50int hour, minute, second;
struct time {
int hour;
int minute;
int second;
};
void elapse(struct time t, int s) {
hour = s / 3600;
minute = (s % 3600) / 60;
second = s % 60;
printf("%d:%d:%d\n", t.hour + hour, t.minute + minute, t.second + second);
}
int main(void) {
struct time t;
int s;
char buf[80];
fgets(buf, 80, stdin);
sscanf(buf, "%d:%d:%d %d", &t.hour, &t.minute, &t.second, &s);
elapse(t, s);
}
0071
2006/04/19(水) 18:51:49int main(void) {
int a[5][5], i, j, answer = 0;
char buf[80];
for(i=0; i<5; ++i) {
fgets(buf, 80, stdin);
sscanf(buf, "%d %d %d %d %d", &a[i][0], &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
}
if( a[0][0] > (double)( a[0][1] + a[1][0] + a[1][1] ) / 3 ) answer++;
else if( a[0][0] < (double)( a[0][1] + a[1][0] + a[1][1] ) / 3 ) answer--;
if( a[0][4] > (double)( a[0][3] + a[1][3] + a[1][4] ) / 3 ) answer++;
else if( a[0][4] < (double)( a[0][3] + a[1][3] + a[1][4] ) / 3 ) answer--;
if( a[4][0] > (double)( a[3][0] + a[3][1] + a[4][1] ) / 3 ) answer++;
else if( a[4][0] < (double)( a[3][0] + a[3][1] + a[4][1] ) / 3 ) answer--;
if( a[4][4] > (double)( a[3][3] + a[3][4] + a[4][3] ) / 3 ) answer++;
else if( a[4][4] < (double)( a[3][3] + a[3][4] + a[4][3] ) / 3 ) answer--;
0072
2006/04/19(水) 18:53:32if( a[i][j] > (double)( a[i][j-1] + a[i][j+1] + a[i+1][j-1] + a[i+1][j] + a[i+1][j+1] ) / 5 ) answer++;
else if( a[i][j] < (double)( a[i][j-1] + a[i][j+1] + a[i+1][j-1] + a[i+1][j] + a[i+1][j+1] ) / 5 ) answer--;
for(i=4, j=1; j<4; j++)
if( a[i][j] > (double)( a[i][j-1] + a[i][j+1] + a[i-1][j-1] + a[i-1][j] + a[i-1][j+1] ) / 5 ) answer++;
else if( a[i][j] < (double)( a[i][j-1] + a[i][j+1] + a[i-1][j-1] + a[i-1][j] + a[i-1][j+1] ) / 5 ) answer--;
for(i=1, j=0; i<4; i++)
if( a[i][j] > (double)( a[i-1][j] + a[i-1][j+1] + a[i][j+1] + a[i+1][j] + a[i+1][j+1] ) / 5 ) answer++;
else if( a[i][j] < (double)( a[i-1][j] + a[i-1][j+1] + a[i][j+1] + a[i+1][j] + a[i+1][j+1] ) / 5 ) answer--;
for(i=1, j=4; i<4; i++)
if( a[i][j] > (double)( a[i-1][j-1] + a[i-1][j] + a[i-1][j] + a[i+1][j-1] + a[i+1][j] ) / 5 ) answer++;
else if( a[i][j] < (double)( a[i-1][j-1] + a[i-1][j] + a[i-1][j] + a[i+1][j-1] + a[i+1][j] ) / 5 ) answer--;
for(i=1; i<4; i++)
for(j=1; j<4; j++)
if( a[i][j] > (double)( a[i-1][j-1] + a[i-1][j] + a[i-1][j+1] + a[i][j-1] + a[i][j+1] + a[i+1][j-1] + a[i+1][j] + a[i+1][j+1] ) / 8 ) answer++;
else if( a[i][j] < (double)( a[i-1][j-1] + a[i-1][j] + a[i-1][j+1] + a[i][j-1] + a[i][j+1] + a[i+1][j-1] + a[i+1][j] + a[i+1][j+1] ) / 8 ) answer--;
printf("%d\n", answer);
}
0073デフォルトの名無しさん
2006/04/19(水) 18:59:400074デフォルトの名無しさん
2006/04/20(木) 16:54:18これは早そうだ
0075GiantLeaves ◆6fN.Sojv5w
2006/04/20(木) 18:05:30int myadd(int i,int j);
/* Calculating 16+16 */
int main(){
printf("%d\n",myadd(16,16));return 0;
}
int myadd(int i,int j){
int k;
if(i==0){
if(j==0){k=0;}
else{k=myadd(0,k-1);}
}
else{k=myadd(i-1,k);}
return k;
}
/* 大して遅くない。 */
0076デフォルトの名無しさん
2006/04/21(金) 01:50:290077デフォルトの名無しさん
2006/04/21(金) 01:56:13どうでもいいけどコンパイルくらいしてみたら?
kが未代入参照していそうだ。
0078GiantLeaves ◆6fN.Sojv5w
2006/04/21(金) 13:28:02talk:>>77 myadd(0,j-1), myadd(i-1,j) でいいのか?
0079デフォルトの名無しさん
2006/04/21(金) 13:59:40いや、根本的におかしい。
0080デフォルトの名無しさん
2006/04/21(金) 14:03:16int k;
if(i==0){
if(j==0){k=0;}
else{k=myadd(0,k-1);}
}
else{k=myadd(i-1,k);}
return k;
}
これってi,jどちらも0でなかった場合、kの値はどうなるのさ
0081デフォルトの名無しさん
2006/04/21(金) 14:14:31処が最適化すると9桁足す9桁でも計算できる。でも所要時間は0.5秒ほど。
static inline int myadd(int i, int j, int k)
{
if (i == 0) {
if (j == 0) {
return k;
}
return myadd(0, j - 1, k + 1);
}
return myadd(i - 1, j, k + 1);
}
#この情報だけで、最適化の有無で計算できる桁数が変わる理由が判る香具師はどれだけいるだろうかw
008281
2006/04/21(金) 14:16:00int main(int argc, char ** argv)
{
switch (argc) {
case 2:
printf("%d\n", myadd(atoi(argv[1]), 0, 0));
break;
case 3:
printf("%d\n", myadd(atoi(argv[1]), atoi(argv[2]), 0));
break;
default:
break;
}
return 0;
}
0083デフォルトの名無しさん
2006/04/21(金) 14:28:500084GiantLeaves ◆6fN.Sojv5w
2006/04/21(金) 14:58:210085デフォルトの名無しさん
2006/04/21(金) 15:53:110086デフォルトの名無しさん
2006/04/21(金) 16:03:24多分その方が>81のループよりもよっぽど速いと思うよ。
0087デフォルトの名無しさん
2006/04/21(金) 16:13:30末尾再帰をループへ置換するかしないかだろ
i,j,kのポインタを表示させるとずっと変わらないのが分かるから
0088デフォルトの名無しさん
2006/04/21(金) 17:03:24int myadd( int a, int b)
{
int c= (a & b)<<1;
a ^= b;
if(c) return myadd(a,c);
return a;
}
0089GiantLeaves ◆6fN.Sojv5w
2006/04/21(金) 17:41:540090≠88
2006/04/21(金) 17:48:22少なくともちゃんと動く自信がないソースをノーチェックで貼らないことかな。
0091デフォルトの名無しさん
2006/04/21(金) 17:48:480092デフォルトの名無しさん
2006/04/21(金) 19:53:330093デフォルトの名無しさん
2006/04/21(金) 20:59:28vegard@gyversalen:~$ /sbin/ifconfig tun0
tun0 Link encap:Point-to-Point Protocol
inet addr:10.0.3.2 P-t-P:10.0.3.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:150 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
RX bytes:88 (88.0 b) TX bytes:168 (168.0 b)
vegard@gyversalen:~$ ping -i 900 10.0.3.1
PING 10.0.3.1 (10.0.3.1): 56 data bytes
64 bytes from 10.0.3.1: icmp_seq=0 ttl=255 time=6165731.1 ms
64 bytes from 10.0.3.1: icmp_seq=4 ttl=255 time=3211900.8 ms
64 bytes from 10.0.3.1: icmp_seq=2 ttl=255 time=5124922.8 ms
64 bytes from 10.0.3.1: icmp_seq=1 ttl=255 time=6388671.9 ms
10.0.3.1 ping statistics ---
9 packets transmitted, 4 packets received, 55% packet loss
round-trip min/avg/max = 3211900.8/5222806.6/6388671.9 ms
vegard@gyversalen:~$ exit
Script done on Sat Apr 28 14:14:28 2001
0094デフォルトの名無しさん
2006/04/21(金) 21:56:34鳥を増やせばスループットは素直にあがってゆくだろうけど、
RTTがかなり大きいから TCP じゃない何かを使ったほうが良さげですね。
0095デフォルトの名無しさん
2006/04/21(金) 22:40:070096デフォルトの名無しさん
2006/04/21(金) 22:45:06天才ハケーン!!!
0097デフォルトの名無しさん
2006/04/21(金) 23:43:28それだとバンド幅の向上が見込めないな。
0098デフォルトの名無しさん
2006/04/22(土) 00:31:490099デフォルトの名無しさん
2006/04/22(土) 00:33:040100デフォルトの名無しさん
2006/04/22(土) 01:16:25すまん、俺が5羽食った。
0101デフォルトの名無しさん
2006/04/22(土) 01:42:380102デフォルトの名無しさん
2006/04/22(土) 03:20:390103デフォルトの名無しさん
2006/04/22(土) 17:12:010104デフォルトの名無しさん
2006/04/23(日) 11:12:42>>93
0105デフォルトの名無しさん
2006/05/01(月) 22:01:05特に用途はないが。
0106デフォルトの名無しさん
2006/05/01(月) 22:21:14文句なしに光並のブロードバンドだが、恐ろしく遅延があるなww
0107デフォルトの名無しさん
2006/05/07(日) 20:39:430108デフォルトの名無しさん
2006/05/09(火) 18:35:190109デフォルトの名無しさん
2006/05/09(火) 22:39:110110デフォルトの名無しさん
2006/05/10(水) 23:03:080111デフォルトの名無しさん
2006/05/10(水) 23:11:15擬似コードだけどこういうのはどうだろう?
hogemap hoge = foo();
foreach key in hoge.keys {
if ( hoge[key] == bar ) {
// 見つかった
}
}
0112デフォルトの名無しさん
2006/05/13(土) 07:14:25ランダムで並び替えて、うまく並んだかチェックする。
確立の問題になるが。
0113デフォルトの名無しさん
2006/05/13(土) 08:23:120114デフォルトの名無しさん
2006/05/13(土) 13:58:30int型だけだったら配列を適当に作成して一致するかどうかを
チェックするソートも有りかな。
0115デフォルトの名無しさん
2006/05/13(土) 16:44:46一致するかどうかをチェックするソートも有りかな。
0116デフォルトの名無しさん
2006/06/03(土) 03:02:52void dsort_(int a[], int* n, int m) {
if(m < *n) {
int hold = a[m];
do {
if(hold > a[m+1]) {
a[m] = a[m+1];
} else {
dsort_(a, n, m + 1);
m--;
}
m++;
} while(m < *n);
a[m] = hold;
}
(*n)--;
}
void dsort(int a[], int n) {
int m = n - 1;
while(m > 0) {
dsort_(a, &m, 0);
}
}
0117デフラグさん ◆mRgSYalFkQ
2006/06/03(土) 09:09:51[゚д゚] トイウワケデ(ry
/[_]ヽ
| |
&((((((((()))))))))****+++++,,,,,,,-----001111;;;;;;;;;;<<====>>[[[[[[[]]]]]]]___aaaaaaaaaddddddddddeeeeffhhhhhiiiiiiiiiiiiilllll
lmmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooorrrrssssstttttttttttvvww{{{{{{{}}}}}}}。。ーくしまりるソデトブ帰
再
0118デフォルトの名無しさん
2006/06/13(火) 15:36:13クソワラタ
0119デフォルトの名無しさん
2006/06/14(水) 01:54:33それを超える「議員内閣制素子」
0120デフォルトの名無しさん
2006/06/14(水) 01:56:33今100年待ちだっけ
0121デフォルトの名無しさん
2006/06/14(水) 22:58:410122デフォルトの名無しさん
2006/06/14(水) 23:10:27アミノ酸を試験官にぶち込んで、
問題を解く遺伝子が出来上がるまで待つ。
何億年かかるかは知らんがw
0123デフォルトの名無しさん
2006/06/15(木) 01:12:28ワロスw
0124デフォルトの名無しさん
2006/06/15(木) 01:13:35↑水コンピュータがなんか遅そうだから、
これをシミュレートしてやればいいんじゃね?
0125デフォルトの名無しさん
2006/06/15(木) 03:47:430126デフォルトの名無しさん
2006/06/15(木) 12:23:560127デフォルトの名無しさん
2006/06/15(木) 12:25:47吹いたw
0128デフォルトの名無しさん
2006/06/15(木) 13:14:180129デフォルトの名無しさん
2006/06/15(木) 16:39:420130デフォルトの名無しさん
2006/06/15(木) 21:05:240131デフォルトの名無しさん
2006/06/15(木) 22:58:03クールだな
0132デフォルトの名無しさん
2006/06/15(木) 23:53:460133デフォルトの名無しさん
2006/06/16(金) 15:16:12アルゴリズムが遅い訳ではないが
こんな書き込みなら大歓迎
0134デフォルトの名無しさん
2006/06/18(日) 00:40:350135デフォルトの名無しさん
2006/06/18(日) 01:27:200136デフォルトの名無しさん
2006/06/18(日) 14:10:21今日の世界も変わっていたんだろうか……
■ このスレッドは過去ログ倉庫に格納されています