1. 程式人生 > >編程:從前有一個傻呆程序員,老婆交給他一項任務,他辦了四次才滿意

編程:從前有一個傻呆程序員,老婆交給他一項任務,他辦了四次才滿意

img pic view blank 群發 cbe 快速排序 follow 圖片

從前有一個傻呆程序員,他老婆交給他一項任務:“去買3斤橙子,買最大最甜最便宜的臍橙”。

普通人買水果直接去店裏就買了,但程序員不同。程序員心道:“大,好分辨,甜,不好分辯。水果店老板肯定不讓每個橙子都試吃一下的”。於是問Siri,Siri說:“一般橙子屁股上有臍圈的,是母橙,母橙比較甜”。就這樣通過調研,甜度辨別的技術難題解決了。

接下來程序員開始策劃去哪裏買。經Siri調查,小區裏共有4家水果店。程序員心道:“這4家店每家都可能賣橙子,也都有可能是最便宜的。如果冒然去了A店買,而C店才是最便宜的,就失去了做事的嚴謹性,回來可能挨罵。嚴謹的做法應該是貨比三家,每家都看看並把價格記下來,然後選一家價格最低的購買。但是,應該先去哪家看價格呢?理論上應該先去離家的店,最後去離家最遠的店。”

技術分享圖片

經大致估算,4家店按離家距離排序,依次是ABCD。程序員應該先去A店。但估算畢竟是不嚴謹的,於是程序員請出百度地圖,在地圖上一一標上家和4家店的GPS坐標,再以水果店的GPS坐標分別計算離家的距離。最後得出結論,順序依次是CABD(因為C店是直接距離,店距離排序邏輯略)。

技術分享圖片

於是程序員去C店,得到一個結果,然後又分別去ABD各店,最終得出A店返回無窮大。A店可能沒有臍橙或有效貨存不足。其它3家店,B店最便宜。程序員決定去B店購買。此時程序員老婆打來了電話,說“叫你買個橙子怎麽去這麽半天!”,程序員道:“目標已經鎖定,即將完成任務”。

程序員到了B店,不敢耽擱,馬上開始了選臍橙的邏輯:

技術分享圖片

半小時後,程序員拎著水果回到了家。老婆罵他:“怎麽買水果比種果樹都慢!”程序員開始反思,這個買水果的流程是不是還有很多優化的空間?

第二次買橙子時,凈化數據源與冒泡排序這兩個循環,程序員將它們合在了一起:

技術分享圖片

由於減少了時間復雜度,並且略去了第一次技術調研、系統架構的時間,這一次只用了20分鐘,但老婆大人還是嫌慢:“別人買水果幾分種,你買水果20分鐘!”

第三次買水果,程序員不再使用單只手的冒泡排序,而使用兩只手的快速排序法,左手向右比較,右手向左比較(算法過於復雜,不作偽碼展示了)。這次用了15分鐘,但老婆大人仍然不滿意。

第四次買水果,程序員優化了進店詢價邏輯。前幾次買水果,程序員要了老板的微信,這次出發前先給4家老板群發了一條微信息:“老板,今天臍橙還有沒有,多少錢一斤?”

這次用多線程問詢,替代了之前的單線程走路問詢,只用了5分鐘就完成了任務。老婆滿意了。

程序員感嘆道:“程序優化果然是無止境啊!但貌似目前的邏輯還可以再優化,譬如歷次購買水果第一優先選擇基本都是B店,下次可以直接去B店。在去的路上向4家老板發微信詢價,大概率答案還是B店。如果不是,進店前還有時間調整路線,這是執行與問詢的多線程。”

你能從這個程序員買橙子的故事中,看出編程難在哪裏嗎?

2018年12月29日

本文首發於微信公眾號“藝述思維”:從前有一個傻呆程序員,老婆交給他一項任務,他辦了四次才滿意

編程:從前有一個傻呆程序員,老婆交給他一項任務,他辦了四次才滿意