1

棒グラフを使用して毎日の通勤者数をグラフ形式でのみ公開する Web サイトを想像してみてください。グラフィックを画像として保存した後、棒グラフを読み取って数値を決定したいと思います(ここでは画像は重要ではありません)。棒グラフを読み取る方法は、ピクセル番号 (通勤者数の軸) に移動し、「ピクセルは「オン」か「オフ」か?」という質問をすることです。(オンはバーが存在することを意味し、オフはこの推測が高すぎることを意味します) 注: 下限は 0 であり、技術的には無限の上限があります。しかし、実際には、10000 が現実的な上限かもしれません。また、No Change from 昨日は頻繁に発見されることに注意してください。

昨日から推測する開始番号が与えられた場合、その番号を見つける最も効率的な方法は何ですか? 効率的とは、ピクセルがオンかオフかを尋ねるクエリの数が最も少ないことを意味します。

(CS でない私の目には、これはある種のエッジ検出バイナリ検索のように見えますが、定義済みの配列はありません。検索についてはすでに多くのことを学んだと言えます。)

私のアルゴリズムは関数として続きます。どんなアドバイスでも大歓迎です。

def EdgeFind(BlackOrWhite,oldtrial,high,low):
# BlackOrWhite is a 0 or 1 depending on if the bar is present or not.  A 1 indicates that you are below or equal to the true number.  A 0 indicates that you are above the true number

# the initial values for oldtrial, high, and low all equal yesterday's value

 factorIncrease = 4#5
 finished = 0

 if BlackOrWhite == 1 and oldtrial==high:
    newtrial = oldtrial+factorIncrease*(high-low)+1
    high = newtrial
    low = oldtrial
 elif BlackOrWhite == 1 and high-oldtrial==1:
    finished = 1
    newtrial = oldtrial
 elif BlackOrWhite == 1:
    newtrial = oldtrial+(high-oldtrial)/2
    low = oldtrial

 if BlackOrWhite == 0 and oldtrial==low:
    newtrial = (oldtrial)/2
    high = oldtrial
    low = newtrial
 elif BlackOrWhite == 0 and oldtrial-low==1:
    finished = 1
    newtrial = oldtrial-1
 elif BlackOrWhite == 0:
    newtrial = oldtrial-(oldtrial-low+1)/2
    high = oldtrial

 if (oldtrial==1) and low!=1:
    finished = 1

 return finished,newtrial,high,low
4

1 に答える 1