在Java中创建大量点的算法

时间:2010-11-16 21:13:18

标签: java algorithm performance points

我正在尝试设计一种在正方形中创建随机点的算法。

问题是:如果我们有一个mxm平方,我们随机创建n个点,其中1< n<平方米

算法必须高效,这意味着如果m = 500,我们可以有n = 1000或n = 100 000.算法的成本必须相同。所以m不应该是成本的一​​个因素。

我真的不知道该怎么办...... 关于这样做,我还是说:

for (int n = 1000, n > 0, n--) {
create a point
}

但这样m是成本的一​​个因素......

你知道任何可以提供帮助的算法吗?

谢谢

马特

2 个答案:

答案 0 :(得分:2)

我的要求听起来不可能。

您说您需要创建n点,其中n将是从1m^2的任意数字。

应该很清楚,如果m增长,获得更高n的概率会增加。因此,随着m的增长,您创建的点数(n)必须增长。

创建一个点是恒定时间,与创建的任何其他点无关。因此,随着n的增长,生成n点所需的工作也将增长。

使用Big Oh,以下算法需要O(m^2)时间来创建n点:

Random r = new Random();
int m; // something
int n = r.nextInt(m*m-1) + 1; // random number between 1 and m^2
for(int i = 0; i < n; i ++) { 
    // create a random point in the square 
    Point p = new Point(r.nextInt(m), r.nextInt(m));
}

答案 1 :(得分:0)

我的猜测是,算法总是O(n)作为最坏的情况。这里的假设是你的教授使用Big-O的定义是最坏的情况,而不是最佳或平均的案例表现。因此,我相信m始终是因素,无论它是什么。