Re: [問題] 一個很像binary search的演算法, …

看板Prob_Solve (計算數學 Problem Solving)作者 (yo)時間14年前 (2010/05/28 21:42), 編輯推噓3(307)
留言10則, 4人參與, 最新討論串2/3 (看更多)
※ 引述《mqazz1 (無法顯示)》之銘言: : suppose that you are go guess the price of a commodity without knowing its price in advance, : how fast can you guess its price, : assuming the real price of the commodity is n. : use less than O(n) comparisons. : 如果這是運用到binary search的觀念 : 我記得binary search好像是O(logn) : 那我先從比n大的數開始開始猜 : 之後每次都取它的中間數猜下去..應該就可以在O(n)內猜到 : 可是題目一開始說 不知道商品的價格 : 那應該就沒辦法一開始就先猜到比n大的數.. : 請問這題可以運用到binary search的觀念嗎? : 那我的想法應該要怎麼改進呢? : 謝謝 其實我不是很懂題目的意思 :) 我猜 price 應該是一正整數吧 (否則如果是任意實數, 好像會沒辦法找), 可能可以這樣做: 先猜 price 是 1, 看看是剛好/過高/過低, 假設 (例如) 現在是過低好了, 那就猜 2, 假如還是過低, 我們就猜 4, 假設仍然過低, 我們就猜 8, 接著就是 16, 32, ... 一直 跑下去... 這樣一直猜到過高為止, 只猜了 O(log n) 次; 第一次過高時, 所猜的數字應不大於 2n, 所以之後就在 1 到 2n 之間用 binary search 再猜 O(log n) 次得到答案應該就行了. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.90.239

05/29 05:19, , 1F
其實不用 1~2n...最後一次如果是 2^k 則在 2^(k-1) 到 2^k
05/29 05:19, 1F

05/29 05:19, , 2F
之間二分搜即可 這一段只有 2^(k-1) 個數所以是 O(k)
05/29 05:19, 2F

05/29 05:19, , 3F
當然因為 n < 2^k < 2n 所以也是 O(log n) 啦...
05/29 05:19, 3F

05/29 06:49, , 4F
原題目也沒說會回答 過高/過低 如果只會回答 對/錯 怎解?
05/29 06:49, 4F

05/29 10:01, , 5F
只回答對錯的話, 就不會有 o(n) 的問法囉 :)
05/29 10:01, 5F

05/29 10:03, , 6F
不過我不是很確定題目的意思...
05/29 10:03, 6F

05/31 00:18, , 7F
從 1 問到 n 不就是 O(n) 嗎?
05/31 00:18, 7F

05/31 00:20, , 8F
是的, 不過原題目看起來又有點像要 o(n) (而非 O(n)) 的方
05/31 00:20, 8F

05/31 00:20, , 9F
法 (是嗎, 其實我不是很確定, 另外就是每次是不是可以知道
05/31 00:20, 9F

05/31 00:21, , 10F
過高/過低 也不確定... 總之題目我看不太懂)
05/31 00:21, 10F
文章代碼(AID): #1B_yXNUL (Prob_Solve)
文章代碼(AID): #1B_yXNUL (Prob_Solve)