2011-10-25 63 views
3

我想使用循环在每个元素中存储一个随机数。有一个更好的方法吗?我需要随机数字来测试我的种类和时间。如何填充100,000,000元素数组?

+4

我真的不知道还有什么其他的选择;如果你需要100,000,000个随机数,你需要100,000,000个随机数。虽然我会措辞它“...使用循环来存储每个随机数...” –

+0

我相信你会最终成为在这个程序中的性能打击:(想想你设置的数据在然后在每个元素上运行比较,最后更新数组,最后只需担心后面的问题 –

+0

只需用标准方式来做就可以了100000000这些日子并不那么大 – starblue

回答

5

一个简单的伪代码:

int[] random = new int[10000000]; 

for (int i = 0; i < random.length; i++) { 
    random[i] = generateAbsoluteRandom(); 
} 
+0

这就是我想到的 – Strawberry

0

每次都需要不同的随机设置吗?如果没有,则生成一个您需要的大小的随机数组,并将其序列化并存储。在需要时加载它。这可能会跑得更快。

0

简单的方法将是最好的:

  • 分配大阵
  • 对于每个元素
    • 生成随机数
    • 分配给元素。

瓶颈将是随机数发生器的通话,你不能避免这些...如果你想的随机数。

只需以简单的方式编写代码,并让JIT编译器担心优化它。只有在分析应用程序时才会发现应用程序的这一部分是一个重要的性能问题。

0

你可以随时去多线程。数组的大小应该保证创建线程的成本。

import java.util.Random; 

public class SimpleTest implements Runnable { 

    public static int[] array = new int[1000]; 
    private int startPoint; 

    public SimpleTest(int startPoint) { 
     this.startPoint = startPoint; 
    } 

    public static void main(String[] args) throws InterruptedException { 
     // TODO Auto-generated method stub 
     Thread test1 = new Thread(new SimpleTest(0)); 
     Thread test2 = new Thread(new SimpleTest(1)); 
     test1.start(); test2.start(); 
     while(test1.isAlive() || test2.isAlive()) { 
      Thread.sleep(10); 
      System.out.println("Waiting..."); 
     } 
     System.out.println("Done!"); 
    } 

    public void run() { 
     Random r = new Random(); 
     for (int i = startPoint; i < array.length; i+=2) { 
      array[i] = r.nextInt(); 
      System.out.println("Thread "+(startPoint+1)+" has put a value no. "+i+" and it was: "+array[i]); 
     } 
    } 

} 

编辑 嗯,我检查了执行时间,并有我的双包芯机上没有改善。看来数组的大小不保证创建线程的成本,或者我在这里丢失了别的东西。

EDIT2 当我在8个线程分割它(; P)的改进是相当大的 - 我去了形式开始〜3900ms到〜2500。有这东西...

0

为什么你需要存储的价值?如果设置种子值,则会从随机获得相同的值序列。

随机r =随机(856007); //或任何数字来识别给定序列

n = r.nextInt();

+0

为了测试的目的,例如,测试运行排序算法的时间。 – Strawberry

0

我没有费心去检验这是否是一个实际的加速,但你可以考虑做正确的大小(4个字节* 100000000元)的ByteBuffer,然后用Random.nextBytes填充它。从那里,打电话给asIntBuffer,你会得到一个充满整数的缓冲区。

我已经证明这不是更快,也不会影响你的结果分布 - 但如果你实际上正在寻找速度,你可以尝试一下。