【发布时间】:2012-04-19 16:23:38
【问题描述】:
我正在尝试编写一个算法,它可以让我遍历 n 维空间内的所有所需点,以找到函数 f(x) 的最小值,其中 x 是大小为 n 的向量。
显然,搜索 2-d 或 3-d 空间相当简单,您可以这样做:
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[][] 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
有什么想法吗?
【问题讨论】:
-
我其实不是新手,我只是从很久以前就丢失了我的帐户:P
-
如何处理带小数的范围,即
-0.5到0.2?此外,您需要在内部循环中处理哪些数据?点数组? -
但是,我不认为我的大脑在递归方面工作得不是很好(可能是缺乏练习)所以还没有尝试任何东西 - 只是盯着我的车库墙试图想象它。
-
您可以从例如:这个问题,因为它是一个等价的问题:stackoverflow.com/questions/8804852/…(我无耻地宣传它,因为我在那里有公认的答案......)提出了一个递归和迭代的解决方案。
-
mellamokb:我使用分辨率函数生成每个维度所需的步长。我实际上不会使用 int i = 0;我
标签: java algorithm search recursion multidimensional-array