java – 从中​​间向外循环数组的算法?

我正在研究一种分治算法(实际上是曲线拟合到多个输入点).对于“分割”部分,我需要计算每个点的误差项,如果误差超过给定阈值,我希望在该点分割曲线,并单独处理输入的左侧和右侧部分.一个简单的循环就是诀窍;但是,从现在的这一部分开始,向外工作是有利的. (要澄清:如果我找到一个错误太大的点,我递归地调用生成左右两个部分的单独曲线 – 如果所有点都在阈值内,那么我的曲线适合我返回).

经过一点头痛之后,我想出了这一点(点数在数组中,当前部分是从startIndex到endindex)

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语言规范,以确保更新表达式中的语句按顺序进行评估(即使不是C/C++中的序列运算符).

任何想法感激不尽.有没有更清洁的方法

解决方法

这将是更可读的imho
for (int q=0; q < steps; q++) {

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

编辑:在索引查找中实现了一个错误

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...