字體:小 中 大 | |
|
|
2022/07/06 01:32:19瀏覽1360|回應3|推薦6 | |
前天傻蛋去面試,有一題智力測驗考題。 八個球,其中有一個比其他重,給一個秤,請問最少秤幾次可以找到那個比較重的球? 有在練習這類考題的大概可以直接回答兩次吧。 傻蛋的直覺是分兩半,這樣秤三次一定可以找到比較重的那個球。 可能,或者說很大機率是可以兩次就找出來,但廿分鐘考試寫一堆題目,傻蛋就沒有去想怎麼用小於三次的方式秤出來了。 反正是工程師的考題,與其用複雜的想法少秤一次,還不如簡單的秤三次。 喔,這次面試是傻蛋面試時間最短的一次。 因為沒想到這個公司也是那個菠菜產業的,這和傻蛋剛離職的離職原因是矛盾的,所以就不用多談了。 軟體產業真的是,到處都是菠菜,缺人缺得兇的也是這行業,真是不樂觀。
回來的路上,就順便再想想,想到了確保兩次以內秤出較重的球的方式。 八顆球先隨意選其中六顆球出來,分成兩半去秤一次。 如果兩邊一樣重,那要找的球一定是落在剩下兩顆球裡面,那兩顆球再秤一次一定可以找到較重的球。 如果有一邊比較重,那要找的球一定落在那三個球之中,選其中兩個再秤一次,如果一樣重,答案必是剩下那顆,如果有一邊比較重,同樣答案揭曉。 所以只要秤兩次,在秤是準確的且八顆球中七顆球重量完全相等只有一顆能確保被秤出較重,那確實兩次就夠了。
減少三分之一的次數,好像很不錯? 這樣的思考就沒有之前那樣無腦,要想一下才行。 但意義不大。 符合這種前提的情況較不實際,所以缺少實用價值。 而軟體程式,多比較一次的秤,那個成本通常很低,針對這種小細節小聰明的去優化,通常是不合適的。 變複雜,帶來的成本比不上實際效益,那就是不划算了。
不過拿來練習一下思考也是不錯。 而且可以進一步延伸思考。 如果同樣一堆球裡面只有一顆重量不一樣,要用秤找出來,球的個數不同,秤的最少次數又會如何? 如果是九顆球,最少要幾次? 九顆球,照上面的策略,其實也是兩次,因為三個球只要秤一次就能找到。 三顆是一次,稍微推理一下,四到九顆都可以兩次。 那十顆球呢? 兩次是沒辦法的,三次肯定夠。 分一顆球出來,剩下九顆只要兩次,所以三次一定夠。 同樣的推理,到十八顆之前三次都是夠的。 所以十八顆以內就是三次,這樣的話三十六顆以內應該就是四次。 等等喔,這會不會犯了和一開始簡單思考的對半分秤一樣的問題,忽略了可能還有更好的組合呢? 是有可能,不過直覺機率應該不大就是了。 而用無腦對半秤,八顆三次以內,十六顆是四次以內可以找到答案。 也就差那一次。 或許那些研究數學的人會發明個啥定理的,去證明某個數學公式,保證這個題目的答案的次數必符合某個公式。 估計這個題目的難度還不會算太高吧。 重點是,不實用。 如果拿來當演算法,實用的應該不會是最少次數,而是平均次數,如果兩個方法,一個確保最小的最多次數,但另一個在更多次數隨機執行中,平均秤出找到花費的次數比前者低,後者可能是更好的解答。 喔,如果題目再複雜一點,限制條件沒那麼理想化,如八顆球裡可能有零到兩顆球重量不一樣,條件稍微變化一下那個求解的複雜度就會爆炸性的變複雜了。 而現實世界往往沒有那麼理想化的條件,可以先讓你已知八顆球有七顆重量完全一樣只有一顆比較重而且是秤的精準度剛好足夠分辨的。 換句話說那種絞盡腦汁的小聰明很可能,毫無用武之地。 最終處理方式還是會定義目標價值為何,各個操作成本為何,最後其實大蓋抓個成本效益比不差的方案也就不錯了。 簡單無腦有時候反而更好。
不過抽象思考也是有一些價值。 就以上面的例子,我們就學到了找模式,抽取公式的方法。 三顆一次,九顆兩次,十八顆三次,三十六顆四次,七十二顆五次。 或許有更優解,但至少我們可以肯定,七十二顆五次肯定夠。 如果一開始題目就是七十二顆,或是來個六十八顆之類的,用無腦方式六十四顆六次,那簡單答案是七次,要從七降到五,這過程可能就會歪歪扭扭了。 而這正是函式與遞迴的觀念與其精華價值之所在。 所以別說七十二顆,就是七萬兩千顆也能套公式很快得到一個最小秤出答案的次數,後面基本上多一倍就多一次那樣。 當然啦,能秤那麼多球還精確的找出其中一顆比較重的秤在現實可能不太實際就是了。 但在程式邏輯的世界裡面,是沒有物理限制的。 讓思路有結構有條理,那個價值會比亂想亂試要好。 大問題拆解成更好處理的小問題,更是設計的精華所在。 就算是細節稍微複雜一點,如挑出幾顆球剩下的偶數球再拿去對分來秤,一但找到模式,之後就可以套公式,不用每次都去思考細節怎麼處理,這就是封裝的價值了。
所以呢,智力測驗,或者是某些名校的考試題目,那種陷阱很多很坑的,其實都是不切實際,用來打擊人的信心,把人的思考變得複雜扭曲用的。 不實用,甚至可能有害。 但,好好思考,還是可以從其中學到一些有用的實用的東西啦。 |
|
( 不分類|不分類 ) |