• 締切済み

ビン数が大きなヒストグラム

C言語で、あるデータ群をヒストグラムにまとめたいと思っています。 ヒストグラムのビンに相当するものを配列で用意して…… という、よく学習課題でもあるような形ならば簡単に出来るのですが、 今回やりたいと思っているものは、非常にビンの数が多いのです。 具体的に言うと、数万、数十万という数で、 それだけの要素数を持った配列を用意しようと思っても メモリの都合上、エラーが起きてしまいます。 そこで、配列に記憶させるのではなく、 テキストファイルを用意して、これの入出力をすることで ヒストグラム情報を作る方法をとりました。 この方法で成功はしたのですが、ファイルのオープン/クローズを 何度も繰り返すことになるため、動作が非常に遅くなってしまいます。 要するに、数万、数十万という数の変数を扱いたい、という問題なのですが、 何か良い手段はないでしょうか。

みんなの回答

回答No.1

高々数十万程度のデータでメモリが確保出来ないのかな、というのが不思議なのですが、 1データあたり、どれくらいのサイズがあるのでしょうか? たとえば、次のようなプログラムはコンパイル/実行出来るでしょうか? #define SIZE (1000000) #include <stdio.h> #include <stdlib.h> int main(){ int *a; int i; a = (int *) malloc(SIZE * sizeof(int)); for(i=0; i<SIZE; i += SIZE/10 ){a[i] = i;} for(i= 0; i<SIZE; i += SIZE/10 ){printf("%i\n", a[i]);} free(a); }

hiro2pzbt
質問者

お礼

……あれ。 コンパイル/実行できました。 指摘されて、おかしいなと思ったので色々試してみたところ、 “出来ない”と言っていたのは、ちょっと変な環境下での話でした。 この程度なら、普通は問題ないものなのですね。 わざわざ特殊な環境下でやる必要もないので、問題解消です。 お騒がせしました。 アドバイスありがとうございました。

関連するQ&A