私は分裂征服アルゴリズム(実際には、いくつかの入力ポイントに合わせてカーブフィッティングを行うアルゴリズム)に取り組んでいます。 'divide'部分では、各点の誤差項を計算する必要があります。エラーが所定のしきい値を超えている場合は、その点で曲線を分割し、入力の左右の部分を別々に処理します。単純なループがそのトリックを行います。現在のセクションの真ん中から始め、外側に向かって作業することは私にとっては有益でしょう。 (明確にするために、誤差が大きすぎる点を見つけたら、再帰的に呼び出して左と右の部分に別々の曲線を生成します - すべての点が閾値内にあれば、私の曲線は適合して返します)。周辺の開始、すなわち配列を中央から外側にループするアルゴリズムですか?
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
}
:
は、ヘッド傷のビットの後、私は、この(点がアレイにあり、現在のセクションがstartIndex
から包括endIndex
である)を思い付い中位、前向きに1つ、後ろに2つ、前に3つ、後ろに4つ...それは機能し、効率的だと確信していますが、それを行うためのよりクリーンな方法があるはずです。 Java言語の仕様をチェックして、for update式の文が(C/C++のようにシーケンス演算子ではなくても)順番に評価されたことを確認する必要があります。
感謝の意を表します。よりクリーンな方法がありますか?
あなたは再帰関数の一部として、このループを使用していますか?すなわち各分割で再帰的に分割して呼び出す。 –
はい...明確にするために質問を編集しました。最終的な結果は、いくつかのソースポイントで結合された一連の「シンプルな」カーブと、その間にあるものに「十分に近い」カーブです。 –