0

X x Y のシート サイズのダイナミック レンジがあり、長期実行アルゴリズムでテストする必要があります。

たとえば、幅 40 ~ 50 インチ、長さ 40 ~ 80 インチのシート サイズを試してみます。すべての整数の組み合わせを試すには時間がかかりすぎるため、反復を 30 回に制限します。

X レンジに 10 ユニット、Y レンジに 40 ユニットしかないため、X ユニットを 3 個、Y ユニットを 10 個テストし、残りをスキップする必要があります。

これをどのようにコーディングして、最も近い比率を計算し、最終的に 30 回の反復で終わることができるでしょうか? これらの範囲は変化し続け、時には Y 範囲が X 範囲よりも小さいため、動的である必要があります。

答え: (フレイザーに触発されて)

Dim ratioX As Integer = txtSizeFormSingleXmax - txtSizeFormSingleXmin
Dim ratioY As Integer = txtSizeFormSingleYmax - txtSizeFormSingleYmin
Dim FinalRatioNumerator As Integer
Dim FinalRatioDenominator As Integer
Dim XGreaterThanY As Boolean = False

If ratioX > ratioY Then
   Dim tempRatio As Integer
   tempRatio = ratioY
   ratioY = ratioX
   ratioX = tempRatio
   XGreaterThanY = True
End If
For countRatio As Integer = 1 To 30
   If ratioX / ratioY <= countRatio / CInt(30 / countRatio) Then
      FinalRatioNumerator = countRatio
      FinalRatioDenominator = CInt(30 / countRatio)
      Exit For
   End If
Next
4

2 に答える 2

0

反復回数は整数でなければならないため、オプションは 1,30 2,15 3,10 および 5,6 です。ただし、30 回の反復には達していませんが、4,7 または 4,8 を考慮する必要があります。

最適化せずにこれを疑似すると、ロジックに従うのが簡単になります

get ranges x and y

if x>y y/x = ratio else swap x and y

これで本当に必要な作業は完了です (30 回の反復に設定されている場合)

calc difference in ratio
for each pair possible
(((x/y)-(1/30 ))^2)^(1/2) =result

now you just take the closest match (smallest result) and use those 
as your test numbers

for each xtestval in mylist of xtestvals
(Xrange  / xTestNum) + xrange min = xtestval
mylist.add(xtestval)
xrange min = xtestval
next

次に、各軸のテスト値があるので、二重ループして組み合わせを取得します

for each x
    for each y
        pair x and y
    next
next

あまり明確ではありませんが、うまくいけば十分に明確になります...仕事に戻りましょう!

于 2013-08-13T17:38:07.520 に答える