• ベストアンサー

乱数発生プログラムについて教えて下さい。

わからない問題があるのですが、わかる方がいれば教えていただきたいです。問題は ・乱数発生プログラムによって次のような個数のデータを発生させる。 500個から3000個までは500個刻み 3000個から10000個までは1000個刻み ・各データについてヒープソートについてソーティングを行いソーティングに要する時間を計測する。 ・各データについて3回のソーティングを行い、その平均時間を各データのソーティング時間とする。 大変困っているので誰か教えて下さい。お願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.3

#1です。 あーこのソースだと…Visual Basicですね。 VBはわからないのでパス。 ですが、(昔習ったBASICの知識で言うのですが)、 i,Numの宣言にDim(配列?)を使う必要があるのでしょうか? ないような気もしますが。 あとこれだと、なんだか 「乱数なんだけど、だんだんに大きい乱数になっていく」 ようになる気がします。 たとえば0,2,2,1,4,3,6,5,1,8,10... てな感じで。これは求められていることでしょうか? 問題文を見た限りでは、 「単なる乱数(たとえば、100以下の一様乱数とか)を n個リストに入れて、それをソートし、時間を計測せよ。その作業を nが500個、1000個、1500個……3000個、4000個、……10000個 についてくりかえせ」 と言っているような気がします。 乱数の範囲に何も指定がなければ、RNDの値をそのまま使えば、 0~1の一様乱数となるので(たぶん)、手間がはぶけるのではないでしょうか。 500、1000……10000まで繰り返すやりかたですが、 まず、n個(nは変数)の乱数を作ってソートする部分を書いて、 それをまたFor~Nextで囲むのです。 そのとき「500、1000、1500……3000、4000、……10000を配列に 入れておいて、順々にそれをnに代入して使う」やり方もあるし、 「For~Nextを500単位にしておいて、3500、4500…などの要求されない nが出てきた場合は処理をスキップする」やりかたもあると思います。

その他の回答 (2)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

使用したい言語処理系について書かれてないので、一般的な事しか言えませんが、 大抵のプログラミング言語/ライブラリには、乱数生成機能や計時機能が用意されてます。 Cなら、rand()とかtime()とか。 ソート機能も用意されていますが、今回はご自分でヒープソートのプログラムを実装する必要があるでしょう。 あとは、長さNの配列を作成し、乱数を格納、配列をヒープソートするサブルーチンを作成して、Nを変えて呼び出せばOKです。 # ってゆーか、何が困っているのかが、謎なよーな。

sotu
質問者

補足

初心者なので何もかもわからなくて・・・質問の仕方も悪いですよね。すいません。。 今ヒープソートのプログラムは手元あって、Timer関数とRnd関数についても少しわかるのですが、それをどうしていいのかも全然わからないんです。

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

これはどういう風にわからないのですか。 問題文の意味がわからないのですか。 それとも乱数発生プログラムとヒープソートプログラムを 書けということなのでしょうか。 問題の意味がわからないというならともかく、 プログラムを丸ごと書けというのだったら、 ちょっと人に聞くには問題にしては大雑把すぎると思いますが。

sotu
質問者

補足

質問の内容を大きく書いてすいませんでした。 乱数発生のプログラムは Dim Num As Integer Dim i As Integer Num = Val(Text1.Text) Randomize Time For i =1 To Num List1.AddItem Int(Num * Rnd)+1 Next i だと思うのですが、「500個から3000個までは500個刻み」と言うデータを発生させるには何処にこの数値をどのように加えればよいのかがわかりません。 初心者なので・・・よろしくお願いします。

関連するQ&A