我正在研究一种分而治之的算法(事实上,这种算法可以对多个输入点进行曲线拟合).对于"除法"部分,我需要计算每个点的误差项,如果误差超过给定的阈值,我希望在该点分割曲线并分别处理输入的左右部分.一个简单的循环就可以了; 但对我来说,从当前部分的中间开始并向外工作将是有利的.(澄清一下:如果我确实发现了一个误差太大的点,我会递归调用并为左右两部分生成单独的曲线 - 如果所有的点都在阈值范围内,那么我的曲线适合我返回).
经过一番头疼之后,我想出了这个(点数在一个数组中,当前部分从包含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
}
Run Code Online (Sandbox Code Playgroud)
换句话说,从中间开始,前进一个指数,前进两个,前进三个,后退四个......它有效,我确信它有效,但是我觉得应该有一个更清洁的方法来做到这一点特别是,我最终必须检查Java语言规范,以确保for update表达式中的语句按顺序进行评估(即使它不是C/C++中的序列运算符).
感谢任何想法.有更干净的方式吗?
我正在尝试使用 dot 绘制我们企业中的服务和服务器的部署图。对于第一次迭代,我使用neato将每个服务绘制为一个盒子,并使用graphviz和neato防止重叠记录,再加上允许样条线,使我能够获得一个像样的布局,并将边缘作为依赖项。
现在我需要将物理服务器放置在每个盒子内。首先,我将每个服务制作为一个名称以cluster开头的子图,然后将代表物理服务器的节点放置在每个框中。再次,在 GraphViz 的帮助下- 如何连接子图?我伪造了边缘来连接集群而不是节点。问题是,这只适用于点。当我使用 neato 进行布局时,它不知道边缘位于簇之间,因此它仅移动我用来锚定边缘的簇的节点。结果是簇盒巨大且重叠。
我希望这是有道理的。有没有办法强制neato将集群中的节点分组?