デルタを特定の値に追加する必要があるテストがある場合、デルタは次の順序でテストできます: 1、2、3、... 15、16。
しかし、より細かい粒度でテストするには、デルタを次のシーケンスにすることができます: 1、16、8、4、12、... (つまり、2 つの極端なケースである 1 と 16 を試してから、8 を試します) 、次に 1 と 8 の中間である 4、次に 8 と 16 の中間である 12)。
このシーケンスを重複せずにエレガントに生成するにはどうすればよいでしょうか?
今私はRuby 1.9.3でこれを持っています:
$deltas = []
def getMidPoint(a, b)
return if (a - b).abs <= 1
midPoint = ((a + b) / 2).to_i
puts "a = #{a}, b = #{b}, midPoint = #{midPoint}"
$deltas << midPoint
getMidPoint(a, midPoint)
getMidPoint(midPoint, b)
end
$deltas << 1
$deltas << 16
getMidPoint(1, 16)
p $deltas
しかし、結果は次のとおりです。
[1, 16, 8, 4, 2, 3, 6, 5, 7, 12, 10, 9, 11, 14, 13, 15]
実際に数値に「レベル」を追加できます (タプルとして保存されます): 8 の場合はレベル 2、12 の場合もレベル 2 (レベルは再帰レベル)、そして最後に、レベル1、レベル2などで数値を収集して、最終的な配列を取得できますが、より良い解決策はありますか?