作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试编写一种算法,让我可以遍历 n 维空间内的所有所需点,以找到函数 f(x) 的最小值,其中 x 是大小为 n 的 vector 。
显然,搜索 2 维或 3 维空间非常简单,您可以简单地执行以下操作:
for(int i = 0; i < x; i++) {
for(int j = 0; j < y; j++) {
//and so on for however many dimensions you want
不幸的是,对于我的问题,空间的维数不是固定的(我正在为统计程序中的许多函数编写一个通用的最小值查找器)所以我必须为我想要的每个 n 值编写循环使用 - 最终可能会相当大。
我一直在努力思考如何使用递归来做到这一点,但看不到解决方案 - 尽管我确信那里有解决方案。
解决方案不一定是递归的,但它必须通用且高效(嵌套循环中最内层的行将被调用很多...)。
我表示搜索量的方式是一个二维 double 组:
double[][] space = new double[2][4];
这将表示一个 4d 空间,每个维度的最小和最大边界分别位于数组的位置 0 或 1。例如:
dim 0 1 2 3
min(0):-10 5 10 -0.5
max(1): 10 55 99 0.2
有什么想法吗?
最佳答案
总体思路如下:
interface Callback {
void visit(int[] p); // n-dimensional point
}
// bounds[] - each number the limits iteration on i'th axis from 0 to bounds[i]
// current - current dimension
// callback - point
void visit(int[] bounds, int currentDimension, int[] p, Callback c) {
for (int i = 0; i < bounds[currentDimension]; i++) {
p[currentDimension] = i;
if (currentDimension == p.length - 1) c.visit(p);
else visit(bounds, currentDimension + 1, p, c);
}
}
/// now visiting
visit(new int[] {10, 10, 10}, 0, new int[3], new Callback() {
public void visit(int[] p) {
System.out.println(Arrays.toString(p));
}
});
关于java - 遍历n维空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036904/
我是一名优秀的程序员,十分优秀!