今、あるデータの順番をばらばらにするプログラムを作ろうとしています。
たとえば、a,b,c,dとあったら、d,b,c,aとするように、この時考えられるプログラムは、データの数だけ配列を用意して、乱数で、どのデータを出力させるかを決定し、出力し終わったら、その配列のところに印を立てて、次にくるデータに対して、2重にならないように順次、出力していく方法が考えられるのですが。。。
膨大なデータをこのように、すると、二重になる確立が出力するたびに、高くなっていって、なかなか終わらなくなってしまいます。
そこで、残ったデータから、ランダムに選び出すアルゴリズムまたは、関数はないでしょうか?よろしくお願いします。
No.4
- 回答日時:
No.1の方の方式(仮にAとします)とNo.3の方の方式(仮にBとします)がよく使われます。
バッチ的な処理ではAが適しています。(前処理に時間がかかってもいいが、処理をはじめたら高速)
一方、リアルタイム処理ではBが適しています。(前処理がいらず、毎回一定時間で処理可能)
全部終わったら又、対象を広げて続けると言う場合、Aでは、又、シャッフルが必要ですが、Bでは対象範囲を広げるだけでいいので一瞬ですみます。
特別にまずいという理由がなければ、B方式をお勧めします。私はいつもB方式を使っています。
No.3
- 回答日時:
乱数の範囲を狭めていき、選択されたものを次に選択されない位置に移動させるようにします。
#define N 10
int a[N];
int i, r, t;
for (i = 0; i < (N - 1); i++)
{
// i の位置から最後までの中で1つ選択
r = i + rand() % (N - i);
// 選択したものを i の位置と交換する
t = a[i];
a[i] = a[r];
a[r] = t;
}
for (i = 0; i < N; i++)
{
出力(a[i]);
}
No.2
- 回答日時:
実データとは別に、それに対するインデックスまたはポインタの配列を作ります。
例えば
1 - a
2 - b
3 - c
4 - d
という感じです。
乱数で、インデックスを選択し、対応するデータを出力します。
例えば上の例で3が選択されたらcです。
選択されたインデックスを取り除きます。すると
1 - a
2 - b
4 - d
cはインデックスなし
となります。
残ったインデックスから乱数で一つを選択し、インデックスが
無くなるまでこれを続けます。
>残ったインデックスから乱数で一つを選択し
いや、その残ったインデックスから、どのように選択するのか知りたかったものですから。。乱数で選択すると、重なる部分が出てくるわけじゃないですか。そうすると、選択するたびに、重なる部分が多くなるので、処理速度が遅くなるので、残ったインデックスからどのように、乱数で選択するのかを聞きたかったのですが。。。
ご意見 ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- IT・エンジニアリング 不具合の現状認識をしないプログラマって信用できる人? できない人? 8 2023/07/28 09:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
VBA 毎日取得するデータを順番...
-
エクセルで1次近似をもとめたい
-
Excelのマクロでワードのテキス...
-
VBA 該当データがない時 ...
-
VBA 空白セルを削除ではない方...
-
C#にてDropDownListの値を動的...
-
マクロVBAについて
-
ミラーデータとは?
-
LoadPictureしたイメージデータ...
-
ADOを使用してExcelデータをAcc...
-
【VB】DataGridViewにテキスト...
-
Android携帯をUSBメモリ代わりに
-
【エクセル】測定時間がバラバ...
-
最大値、最小値
-
シリアル通信でのデータ受信
-
javaでDBからデータを取ってき...
-
シーケンサにパソコンからアク...
-
レコードセットのデータを1行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報