微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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
}

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

原文地址:https://www.jb51.cc/java/121205.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐