標題
※ 引述《lovdkkkk (dk)》之銘言:
: 這題有個能再稍微改進的地方,
: 就是最後一段不以單純的遞減值 (N-1) 去加,
: 改加到與最高層的中點。
: 例如 14, 13, 12, ..., 5, 4
: 原本最後那個 4 加上去會從 95 -> 99,改為 +3 到 98 則總次數會再少一,
: 最差次數則不變。
你所計算的是 f(5),f(5)本身為3
若你要往前推一個,就是計算 f(9)
: 在其它 case 也有可能再少更多,例如最高到 49995001 層的話,
: 原本會是 10000, 9999, 9998, ..., 142
: 原本最後那個 142 加上去會從 49994847 -> 49994989,
: 改為 +77 到 49994924 則總次數會再少個 4000 多。
: 改善的部份是將最後二段平均,
這的確是一個方法,但要如何改善任何情況的方法?
假設 f(n) = a
則代表從 n 層樓要從 a 層開始丟
所以 => 破 => a-1
=> 不破 => f(n-a-1)
但是 f(n-a-1) 本身最優化的方法並非往上加上 (a-1) 層
以這個例子,最後若要完全優化,不該在最後一次才進行優化
若只在最後一次進行優化
也不該 +77, 因為 f(134) = 16
應為 +16 才可保證在 16 次內完成,若+77,最多還要77次
可以做個簡單迴圈或是遞迴即可跑出最佳路徑
function runMin(int step, int n) {
int a = cal(n); //ex: if n=100 -> return 14
print("step " + step + " : " + a);
runMin(step + 1, (n-a));
}
若要計算 49995001 層
呼叫 runMin(1,49995001) 即可
: 使區段次數加總由原本相當於一大一小兩個梯形,
: 變成兩個差不多大的梯形。
: 沒什麼大用的改進 @@。
: ※ 引述《evanslee (321)》之銘言:
: : 可以參考看看
: : 假設 我們有N次機會來判定 是否會破
: : 我們可以從第N樓開始丟, 可分情況兩種
: : 1) 從第N樓丟破=>還有另一蛋但可以從1丟到 N-1樓 檢驗
: : 所以情況(1)最多N次
: : 2) 從第N樓丟沒破,我們剩下N-1次可以測驗
: : 所以 可以往上至N+(N-1)樓丟擲 (丟了之後還剩下N-2次可以試驗)
: : 由 (1),(2) 邏輯推斷
: : 最多我們需要幾次 N+(N-1)+(N-2)+...+1 > 100樓
: : 得到 N=14
--
※ 發信站: 批踢踢實業坊(pttweb.tw), 來自: 123.193.201.124
※ 文章網址: https://pttweb.tw/Soft_Job/M.1398084674.A.D91
Re: [討論] Google面試問題
(29/31篇)看板Soft_Job軟工板作者cyclone350 (老子我最神)推文10則 (4推 0噓 6→)※ 引述《lovdkkkk (dk)》之銘言:
: 這題有個能再稍微改進的地方,
: 就是最後一段不以單純的遞減值 (N-1) 去加,
: 改加到與最高層的中點。
: 例如 14, 13, 12, ..., 5, 4
: 原本最後那個 4 加上去會從 95 -> 99,改為 +3 到 98 則總次數會再少一,
: 最差次數則不變。
你所計算的是 f(5),f(5)本身為3
若你要往前推一個,就是計算 f(9)
: 在其它 case 也有可能再少更多,例如最高到 49995001 層的話,
: 原本會是 10000, 9999, 9998, ..., 142
: 原本最後那個 142 加上去會從 49994847 -> 49994989,
: 改為 +77 到 49994924 則總次數會再少個 4000 多。
: 改善的部份是將最後二段平均,
這的確是一個方法,但要如何改善任何情況的方法?
假設 f(n) = a
則代表從 n 層樓要從 a 層開始丟
所以 => 破 => a-1
=> 不破 => f(n-a-1)
但是 f(n-a-1) 本身最優化的方法並非往上加上 (a-1) 層
以這個例子,最後若要完全優化,不該在最後一次才進行優化
若只在最後一次進行優化
也不該 +77, 因為 f(134) = 16
應為 +16 才可保證在 16 次內完成,若+77,最多還要77次
可以做個簡單迴圈或是遞迴即可跑出最佳路徑
function runMin(int step, int n) {
int a = cal(n); //ex: if n=100 -> return 14
print("step " + step + " : " + a);
runMin(step + 1, (n-a));
}
若要計算 49995001 層
呼叫 runMin(1,49995001) 即可
: 使區段次數加總由原本相當於一大一小兩個梯形,
: 變成兩個差不多大的梯形。
: 沒什麼大用的改進 @@。
: ※ 引述《evanslee (321)》之銘言:
: : 可以參考看看
: : 假設 我們有N次機會來判定 是否會破
: : 我們可以從第N樓開始丟, 可分情況兩種
: : 1) 從第N樓丟破=>還有另一蛋但可以從1丟到 N-1樓 檢驗
: : 所以情況(1)最多N次
: : 2) 從第N樓丟沒破,我們剩下N-1次可以測驗
: : 所以 可以往上至N+(N-1)樓丟擲 (丟了之後還剩下N-2次可以試驗)
: : 由 (1),(2) 邏輯推斷
: : 最多我們需要幾次 N+(N-1)+(N-2)+...+1 > 100樓
: : 得到 N=14
--
※ 發信站: 批踢踢實業坊(pttweb.tw), 來自: 123.193.201.124
※ 文章網址: https://pttweb.tw/Soft_Job/M.1398084674.A.D91
同標題文章
- 18[討論] Google面試問題
- 8Fw: [討論] Google面試問題
- 17Fw: [討論] Google面試問題
- 1Re: [討論] Google面試問題
- Re: [討論] Google面試問題
- 7Re: [討論] Google面試問題
- 4Re: [討論] Google面試問題
- 8Re: [討論] Google面試問題
- 2Re: [討論] Google面試問題
- 3Re: [討論] Google面試問題
- Re: [討論] Google面試問題
- -2Re: [討論] Google面試問題
- 2Re: [討論] Google面試問題
- -4Re: [討論] Google面試問題
- 3Re: [討論] Google面試問題
- Re: [討論] Google面試問題
- Re: [討論] Google面試問題
- 1Re: [討論] Google面試問題
- 6Re: [討論] Google面試問題
- 4Re: [討論] Google面試問題
- 6Re: [討論] Google面試問題
- 1Re: [討論] Google面試問題
- 2Re: [討論] Google面試問題
- 1Re: [討論] Google面試問題
- 3Re: [討論] Google面試問題
- Re: [討論] Google面試問題
- 2Re: [討論] Google面試問題
- Re: [討論] Google面試問題
- 4Re: [討論] Google面試問題
- 4Re: [討論] Google面試問題
- 4Re: [討論] Google面試問題
相關文章
37
[心得] 2024 Google面試與刷題心得
11
[心得] Google 面試分享 - AI顧問
83
[心得] Google L4面試時程分享(最終失敗)
53
[心得] 2023 Google SWE Embedded面試分享
14
Re: [心得] Google L4面試時程分享(最終失敗)
10
Re: [心得] Google L4面試時程分享(最終失敗)
1
Re: [心得] Google L4面試時程分享(最終失敗)
28
Re: [心得] SUSE面試經驗
48
[心得] 2022 高雄面試
61
[心得] 2024各公司面試心得
Soft_Job熱門文章
81
[心得]2024 年中找工作經驗分享
73
[心得] 2024 web轉職末班車 面試心得
55
[心得] 2024 下半年 backend engineer 面試心得
52
[心得]非本科學士 德國求職全紀錄 - Data
45
[請益] 轉職後的徬徨
45
[討論] 國泰出這包不太行吧
40
[討論] 公司內部版控
33
Re: [討論] 公司內部版控
30
Re: [心得] 全端培訓轉職失敗心得
29
Re: [心得] 全端培訓轉職失敗心得