我正在尝试设计一种在正方形中创建随机点的算法。
问题是:如果我们有一个mxm平方,我们随机创建n个点,其中1< n<平方米
算法必须高效,这意味着如果m = 500,我们可以有n = 1000或n = 100 000.算法的成本必须相同。所以m不应该是成本的一个因素。
我真的不知道该怎么办...... 关于这样做,我还是说:
for (int n = 1000, n > 0, n--) {
create a point
}
但这样m是成本的一个因素......
你知道任何可以提供帮助的算法吗?
谢谢
马特
答案 0 :(得分:2)
我的要求听起来不可能。
您说您需要创建n
点,其中n
将是从1
到m^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
始终是因素,无论它是什么。