• ベストアンサー

大量のデータを、でたらめに並べ替える方法

etosetoraの回答

  • etosetora
  • ベストアンサー率22% (39/175)
回答No.1

まずデータリストのコピーをつくりdata(0)からdata(999)とする、並べ替え後のデータ用にd(0)からd(999)を作る ランダマイズで0から999の数値を取る 仮にn data(n)をd(0)にコピーしdata(n)を0クリアする ランダマイズで次の数値を取る data(n)が0だったらもう一度ランダマイズから数値をとる これを繰り返す d(999)まで済んだら終わり

mone
質問者

補足

回答ありがとうございます。 この方法だとd(t)のtが999に近づくにつれ、data(n)が0である確立が高くなりますよね。 できればそういう“損”の少ない、効率の良いアルゴリズムが知りたいのです。 プログラムの勉強のつもりでゲームを作ってみているので、そういう方法がありましたらよろしくお願いします。

関連するQ&A

  • エクセルの大量のデータの行をランダムに並び替える方法

    エクセルで表を作成したのですが、データを間引きしたいと思っています。 きちんと作成した表をある程度、規則性もないデータにしたいため、行をランダムに並び替えて、ごっそり半分くらい削除してしまえば、いいのではないかと思いつきました。ただ、ランダムにデータを並べる方法というのはあるのでしょうか? 結果的にランダムにデータが間引ければ、いいので、もしよい方法がありましたら教えてください。手で作成したデータは1000*30件程度です。がんばれば手で間引けないこともないのですが、もっと効率的な方法がありましたら、非常に負荷軽減になるのでお教えください。

  • dataの消去

    ある数値が入力されたdata配列を、すべて消去する方法ってあるのでしょうか? ちなみにdataの個数はランダムです。 VB6を使っています。ご教授お願いします

  • 配列変数に重複のないランダムな数字を入れて行くには?

    JavaScript初心者です。 配列にランダムな数字を入れたいのですが、 aRnd = new Array(); aRnd[0] = Math.floor(Math.random()*100); aRnd[1] = Math.floor(Math.random()*100); aRnd[2] = Math.floor(Math.random()*100); のようにやると各配列にはランダムな数字が入りますが、重複が発生する可能性があります。これを重複が発生しないようにしたいのですが、どのようにすればいいのでしょうか? なお、上記例では0~99までの数字を3つの配列にセットする方法となっていますが、配列数や数字の最大値は変更する可能性があるので、これも配慮したいと思います。 よろしくお願いいたします。

  • ランダムに数字を並び変える方法は

    windows2000 Flash MX 1~9までの数字をランダムに発生させ配列に入れるには v_count=new Array(); for(i=1; i<10; i++) {   v_max=9   v_count[i]=Math.floor(Math.random()*v_max)+1  } と記述しました。 配列に格納されたランダムに発生した数字が9個ありますが当然同じ数字も含まれています。 これを数字が重複しないようにする方法が知りたいのです。 つまり1~9までの数字をランダムに並べ替えたいのですがどのような方法がありますか。教えて下さい。 説明が下手でスミマセン。 ご指摘いただければ補足します。

    • ベストアンサー
    • Flash
  • 画像の表示方法について

    ページが表示されるたびに画像を変更する方法が 『5・6年生にもわかるやさしいJavaScript』に紹介されていました。 URLはhttp://www.sky.sannet.ne.jp/masapine/java_top.htmlです。 これは、表示されるごとにランダムで変更する形式なのですが、 これを順番通りに画像を変更することは出来るのでしょうか。 具体的には、 <SCRIPT LANGUAGE="JavaScript"> <!-- simg=new Array(5); simg[0]="○○○.gif"; simg[1]="●●●.gif"; simg[2]="△△△.gif"; simg[3]="▲▲▲.gif"; simg[4]="□□□.gif"; Myimg=Math.floor(5*Math.random()); document.write("<center><img src='"+simg[Myimg]+"'></center>"); //--> </SCRIPT> の、Myimg=Math.floor(5*Math.random());の部分で 表示方法を決めていると思いました。 simg[ ]の数字の順番通りに表示するには、 どのようにすればいいのでしょうか。 初心者なので詳しいことが分かりませんが、 よろしくお願い致します。 また、この形式通りでなくても構いません。

  • 大きな配列データを複数ある場合のデータ保持の方法

    indowsXP VC++.net2003で開発をしています。 100*100程度の2次元配列が20から50程度ある場合、データはどう保持しているのが良いのでしょうか? 同時に使うのは1個のみですので、すべて宣言するのはメモリの無駄だと思っています。 思いついた方法は 1.テキストファイルに保持しておく 2.データベースに保持しておく の2つですが、ユーザーに配列の中身が見られたり変更されたりするのも困るので1の方法は却下しました。 2の方法ですがデータベースを用意するのは無理なのであきらめました。 また、配列データはツールから作成しており、以下のように宣言しやすいように表示されます。 値をひとつひとつ代入して初期化するのも大変なので、できればこの表示をいかしたまま、 必要な配列を取り出して扱うということをしたいのですが、何か良い方法はないでしょうか? それともint型の100*100の2次元配列 50個程度なら宣言したほうがいいのでしょうか? int test[32][32] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 以下省略

  • 外部ファイルから読み込んだデータを配列変換したい!

    Japanese 72 99 40 Math 88 48 32 English 13 77 96 というデータファイル(test.dat)があります。数字は省略しましたが各200ずつ計600で、データ数はJapanese・Math・Englishの行含め全部で603です。上から順に出席番号1番2番・・・となりますので200人分の成績データということになります。 これら数値データを用いて各教科ごとの平均点を出したり、成績順に並べ替えたりしたいのです。 そのためにこのデータファイルの数値の部分だけ配列にしたいのですが、外部のファイル、しかも数値と文字が混じったデータを配列に変換するにはどうすればよいでしょうか。 [00],[01],[02]・・・・・・・・(以下200人分) [10],[11],[12]・・・・・・・・ [20],[21],[22]・・・・・・・・ というのをイメージしているのですが(列は出席番号・行は各教科)、他に良いアイデアはありますでしょうか。 申し訳ありませんが、ご教授願います。

    • ベストアンサー
    • Java
  • 配列内のデータを1つのテーブルに登録。

    配列内のデータを1つのテーブルに登録。 お世話になっております。 以下のような構成のテーブルがあり、カラム名1、2、3、4と100まであるのですが、そこへ 配列内にある100を数えるデータを登録するには、どのようなSQL文が適切なのでしょうか? no id date 1 2 3 4 5 6 ...... 100 安易に、$sql = "INSERT INTO test values(0, '$id', '$date', '$randam[0]', '$randam[1]', '$randam[2]',....とも考えたのですが、他に効率のいいものがあるのでは?と思い、投稿した次第です。色々と考えてはいるのですが他に思いつかないので・・ 補足:配列にあるデータはランダムな数値を格納してあり、このSQL文の前に、配列を生成したものとなっております。 以上、お忙しいなか恐縮ですがご指導のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 公平なランダム

     重複のないn個の配列を作成する、効率がよくて高速なランダム発生プログラムを探しています。  現在は下記のようなロジックを組んでいます。   1.n個の配列を用意(nはパラメータで与えられる)   2.配列に1からnまでの数値を昇順に格納   3.ランダムな値xを生成し、配列の1番目とx番目を交換   4.ランダムな値xを生成し、配列の2番目とx番目を交換       :       :   5.ランダムな値xを生成し、配列のn番目とx番目を交換  この方法を越えるものはないでしょうか。  条件は、効率(公平性)がこれよりも高くて、速度が O(2n) を超えないことです。  最終的に配列の先頭20個程度の効率が高くなっていればよく、それ以降は多少偏りがあっても構いません。  ちなみに現在は、単純に x = rand(n); という方法で生成しており、初期化関数は使っていません。  よろしくお願いします。

    • ベストアンサー
    • Perl
  • 大量のデータを一度に配列に入れたい

    セルA1~セルB100までのデータを"一度に"VBAの2次元配列に入れたいのですが、 方法はありますでしょうか?