加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:49:31 所属栏目: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
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读