Entertainer Engineering

人を楽しませられる技術者を目指すあおかびんのブログ

C言語で探索用のランダムな数列を作った話

こんばんは、かびさん@あおかびんです。

学校の課題で並列分散処理を行うために、
数列の探索をしようという話になりました。

そのために、100万のランダムな数列を作り出す必要があったので
その数列を最初にNode.jsで書こうと思ったらすごく遅い・・・。

アルゴリズムが良くないのかもしれませんが、5時間かかっても終わりませんでした。

そこでC言語で100万のランダムな数列を作ったらすぐ終わったので
その方法を書いておきたいと思います。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000000

void shuffle(int ary[], int size);

int main(void)
{
	int i = 0;
	int j = 0;
	int arr[N];
	int shf[N];
	int index;
	int length = 0;
	srand((unsigned)time(NULL));
	
	for(i = 0; i < N; i++) {
		arr[i] = i;	
	}

	shuffle(arr, N);

	for(i = 0; i < N; i++) {
		printf("%d\n", arr[i]);
	}

	return (0);
}

void shuffle(int ary[], int size) {
	int i;
	for(i = 0; i < size; i++) {
		int j = rand()%size;
		int t = ary[i];
		ary[i] = ary[j];
		ary[j] = t;
	}
}

shuffle関数の中で、
先頭から順にランダムな位置にある数字とスワップしている感じですね。

400万でやろうとしたら、スタック領域が足りず、実行できませんでした。。。
何かいい解決方法があるといいんですが。。。

ちなみに標準出力をcsvファイルに書き込むと、改行でわかれたデータを書き込めます。
svファイルかな?(知らんが)

以上、あおかびんでした。