java - 从中间向外遍历数组的算法?

标签 java c++ c algorithm

我正在研究一种分而治之的算法(实际上,一种对多个输入点进行曲线拟合的算法)。对于“划分”部分,我需要为每个点计算一个误差项,如果误差超过给定的阈值,我希望在该点分割曲线并分别处理输入的左右部分。一个简单的循环就可以解决问题;但是从当前部分的中间开始向外工作对我来说是有利的。 (澄清一下:如果我确实找到了一个误差太大的点,我会递归调用并为左右部分生成单独的曲线 - 如果所有点都在阈值内,那么我的曲线会拟合并返回)。

经过一番摸索之后,我想到了这个(点在一个数组中,当前部分是从 startIndexendIndex 包括在内):

int steps = (endIndex+1-startIndex);
int i = (startIndex+endIndex)>>1;
int stepdir = 1;
for(int q=0; q<steps; q++, i+=stepdir*q, stepdir=-stepdir)
{
   // test point i here and return early if error exceeds threshold
}

换句话说,从接近中间的位置开始,向前移动一个索引,向后移动两个,向前移动三个,向后移动四个......它有效,而且我确信它是有效的,但让我印象深刻的是应该有一种更简洁的方法为此,特别是,我最终不得不检查 Java 语言规范以确保 for update 表达式中的语句确实按顺序求值(即使 , 不是 C/C++ 中的序列运算符)。

任何想法感激不尽。有更清洁的方法吗?

最佳答案

恕我直言,这会更具可读性

for (int q=0; q < steps; q++) {
   int index = i + ( q% 2 == 0 ? q/2 : -(q/2+1)); //index lookup here
}

关于java - 从中间向外遍历数组的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837990/

相关文章:

java - 基于deviceTwinTrigger的Azure Java函数: Retrieve DeviceId

java - 从使用字节流写入的文件中读取

C++/C语言独立内存分配

java - 需要帮助将命令行参数与 Java 中的字符串文字进行比较

java - 长mac地址返回字节数组

c++ - 避免调用移动构造函数

c++程序读取文件

c++ - 是否真的可以使用 CFile 和 CStdio 类将数据附加到 MFC 中的文本文件?

c - 将变量分配给链接列表中的下一项

c - 在 C 中动态分配内存时出现段错误