何って言ったの?

「他の誰かが誰にでも明らかなことを言わなければ

ならない



そのようなエピグラフ、グーグル/ヤンデックスは著者を見つけられなかったこれは記事「誰にでも明らかなこと」の第2部です

その中で概説されているZアルゴリズムをよりよく理解するために、ここで、ディスカッション/コメントの前半で示した良いを追加します。



タスクが、(許容される)値の特定の間隔で特定の関数T(X)の曲線を作成することであると想像してください。これはできるだけ詳細に行うことが望ましいですが、いつ「手でつかむ」かは事前にわかりません。曲線のプロットが中断されたとき(間隔でXパラメータを生成し、T(X)を計算する)にいつでも、結果のグラフがこの関数を可能な限り正確に反映するように、X値を生成する必要があります。より多くの時間があります-グラフはより正確になりますが-常に任意の関数に対して現時点で可能な最大値です



もちろん、既知の関数の場合、間隔分割アルゴリズムはその動作を考慮に入れることができますが、ここでは、最小限の「損失」で目的の結果が得られる一般的なアプローチについて説明します。 2次元の場合、特定のレリーフ/サーフェスを表示する例を挙げて、可能な限りその機能を最大限に表示できるようにすることができます。



一般的な場合の(最初の部分からの)モデリングの問題と目的は非常に異なる可能性があります:理論的/物理的モデルまたは近似があるかどうか(ブラックボックス)-どこでもモデルを構築する際のニュアンスがあります。しかし、パラメーター(Zアルゴリズムを含む)を生成する必要性は、すべての人にとって共通で不可欠な部分です。 (例えば、オブジェクトがあり、このようなTを得るための時間が長く(数日から数週間)である)、新しいステップを選択するためのアルゴリズムがないため、並列処理の主演算周期の完了を、他の基準によって停止します。期待される改善がモデルエラーおよび/または測定エラーTより明らかに悪い場合、次の予測Tの検索を改善するためのステップをさらに減らすことは意味がありません。



Zアルゴリズムの2次元の場合(フィールド64 * 64でK = 3)の許容間隔の分割についてもう1つ説明します。







図で強調表示されている点(9個)は、エッジの始点と間隔の中央であり、必要に応じてZアルゴリズムの外側と見なされます。アルゴリズムによって生成されたこれらの点を結ぶ水平方向と垂直方向/「パス」に沿って確認できます。 Z値がありません。ここでの追加のポイントは個別に計算するのは簡単ですが、これらの方向/「トラック」に沿ったポイントの数が増えると、関数の表現が向上し(「トラック」が狭くなり)、アルゴリズム自体を補足する必要があります(7行が必要で、そのうち4つの演算子がnのメインループにあります。以下を参照)または、個別の計算を作成する方法がわかりません。さらに、この場合、アルゴリズムの平均効率が低下し、モデルの表現に特に改善はありません(n> 8の場合でも、パラメーターのステップは1/1000未満です。次の表を参照してください)。



Zアルゴリズムの2番目の機能は、(2次元の場合)ポイントを追加する順序の非対称性です。これらはY軸/パラメーターでより頻繁に発生し、画像は各サイクルの終わりにnだけ整列されます。



VBA言語のアルゴリズムZ、1次元の場合:



Xmax = 
Xmin = 
Dx = (Xmax - Xmin) / 2
L = 2
Sx = 0
For n = 1 To K
      Dx = Dx / 2
      D = Dx
      For j = 1 To L Step 2
            X = Xmin + D
				  Cells(5, X) = "O" '   - /   T(X)
            X = Xmax - D
				  Cells(5, X) = "O"
            D = D + Sx
       Next j
       Sx = Dx
       L = L + L
Next n


アルゴリズムZ、2Dケース、VBA言語:



Xmax = 		'	65 -    , GIF
Xmin = 		'	1
Ymax = 		'	65
Ymin = 		'	1
Dx = (Xmax - Xmin) / 2
Dy = (Ymax - Ymin) / 2
L = 2
Sx = 0
Sy = 0
For n = 1 To K		'	K = 3	  GIF
      Dx = Dx / 2
      Dy = Dy / 2
      Tx = Dx
      For j = 1 To L Step 2
	X1 = Xmin + Tx
        X2 = Xmax - Tx
	Ty = Dy
        For i = 1 To L Step 2
	   Y = Ymin + Ty
	   Cells(Y, X1) = "O" '   - /   T(Y,X)
	   Cells(Y, X2) = "O"
	   Y = Ymax - Ty
	   Cells(Y, X1) = "O"
	   Cells(Y, X2) = "O"
	   Ty = Ty + Sy
         Next i
       Tx = Tx + Sx
       Next j
       Sx = Dx
       Sy = Dy
       L = L + L
Next n


計算コスト:







角括弧内に、計算で使用される主な操作が示されています(サイクルの編成のコストは考慮されていません)。



ここで、2による整数除算は1桁のシフトであるため、この場合の除算[÷]のかなり「重い」操作はコストがかからないことに注意してください。分割および割り当て操作([=]、第2項)の相対コストは、Kの増加とともに急速にゼロになる傾向があります。



合計ポイント:







平均コスト:







Kの最初の値について、これらの式を使用して計算を実行し、表に記入します:





ここで、「間隔の割合」は、サイクルの最後のポイント間の相対ステップをnで表したものです。

最後の行(「平均」)は、ポイントあたりの相対コスト(加算/減算の比率)を示しています。制限は、追加操作の0.5625または1 /1.77777になる傾向があります。記事の最初の部分



からの主張に戻ると、ここでは、「議論のために提案されたアルゴリズムは、非常に低い計算コストを示し、欠点や困難を伴わない」ことを示し、計算が突然中断された場合には、追加の利点があります。すべての適切なアプリケーションで使用するのが賢明です。 ソフトウェアとハ​​ードウェアの両方での配布と実装の支援をお願いします。






All Articles