兄弟數字;及修理柵欄分析
今日面試題:兄弟數字
給定一個數X,他的兄弟數Y定義為:是由X中的數字組合而成,並且Y是大於X的數中最小的。例如,38276的兄弟數字為38627。給定X,求Y。
=======================================
修理柵欄
分析
原題為了修理柵欄,需要將很長的木板鋸為N塊,長度分別為L1,L2...LN。鋸斷一塊兒木板,需要一定的開銷,開銷記為木板的長度。例如,長度為21的木板,鋸為三塊,長度分別為5,8,8。如下按照如下的順序據斷:
首先鋸斷21為13和8兩塊兒,開銷為21
然後鋸斷13為8和5兩塊兒,開銷為13
總的開銷為34。但也可以按照如下的順序:
首先鋸斷21為16和5兩塊兒,開銷為21
然後鋸斷16為8和8兩塊兒,開銷為16
總的開銷為37。比34要大。
問題是,給定N,以及每一塊兒的長度。如何保證最小的開銷。儘量採用高效的方法。
分析
這個題目,要如何分析?這切鋸成N塊的方法太多了。如何入手呢?其實,題目中的兩個例子,都可以表明,我們可以將切割的過程用二叉樹表示:
以及
根據上面兩棵二叉樹,得到開銷的計算方法:
第一棵樹,開銷34 = 8 * 2 + 5 * 2 + 8 * 1 = 34
第二顆樹,開銷37 = 8 * 2 + 8 * 2 + 5 * 1 = 37
也就是所有的葉子節點的長度乘以深度。葉子節點,就是各個木塊兒的長度。從上面的式子,我們可以得出,要想開銷最小,樹的高度是不變的,那就一定要越短的木板,深度越深,即可。而且,因為一次鋸開,肯定是兩塊兒,所以,要保證整個開銷最小,則最短的和次短的木板一定是兄弟,這樣,可以遞迴使得,父親節點的開銷也是最小的。
這樣,求的最小開銷就很簡單了,去最短和次短木板,加起來,得到一個開銷,假設L1是最短的,L2是次短的。則遞迴處理(L1+L2)以及剩下的木板即可。這個複雜度是O(N^2)的。
那麼是否有更高效的方法呢?上面的方法,是從底向上計算的。鋸的時候,如何做呢?從最長的開始,每次都把最長的鋸掉。這樣排序O(NlogN)。從最大的開始鋸。解決。
還有呢?前面的方法,在取最短的時候,可以採用優先順序佇列。整個事件複雜度為O(NlogN),不過空間就是O(N)了。
【分析完畢】
本文來自微信:待字閨中,2013-08-19釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 原始碼分析:CyclicBarrier 之迴圈柵欄原始碼
- lintcode-514-柵欄染色
- 攻防世界-柵欄密碼密碼
- bugku——聰明的小羊(柵欄密碼)密碼
- 2020年T電梯修理多少分及格及T電梯修理考試內容
- 併發柵欄CyclicBarrier---簡單問2
- 2020年T電梯修理考試題庫及T電梯修理考試軟體
- 2020年T電梯修理考試題及T電梯修理考試申請表
- iOS-GCD常用函式和柵欄函式iOSGC函式
- 兄弟連go教程(19)資料 - 匿名欄位Go
- SQL 判斷欄位是否以數字開頭或者包含數字SQL
- 數字孿生的實現方案及可行性分析
- 閉鎖和柵欄的區分以及適用場景
- P2731 [USACO3.3] 騎馬修柵欄 Riding the Fences
- 2020年汽車修理工(中級)報名考試及汽車修理工(中級)考試技巧
- 2020汽車修理工(中級)考試及汽車修理工(中級)模擬考試系統
- 兄弟連區塊鏈教程Fabric1.0原始碼分析ECDSA橢圓曲線數字簽名演算法區塊鏈原始碼演算法
- Python 英文的月份轉數字及數字轉英文Python
- 關於數字藏品系統開發程式分析及玩法案例
- 探秘多執行緒-閉鎖、柵欄與非同步編排執行緒非同步
- 2020年汽車修理工(高階)模擬考試題及汽車修理工(高階)線上考試
- 2020年汽車修理工(中級)考試申請表及汽車修理工(中級)考試試題
- 利用GDAL實現柵格影像差值計算及Geoserver自動釋出柵格影像Server
- 突破!中小製造企業數字化轉型困境分析及對策
- 【數字化】數字化轉型是什麼、為什麼、怎麼辦;2018年數字化供應鏈行業及案例分析報告行業
- java-多執行緒-CountDownLatch(閉鎖) CyclicBarrier(柵欄) Semaphore(訊號量)-Java執行緒CountDownLatch
- Python arcpy建立柵格、批次拼接柵格Python
- MySQL查詢某個欄位含有字母數字的值MySql
- 兄弟連go教程(1)型別-變數Go型別變數
- 常見效能計數器及分析
- 數字對映:數字孿生技術的應用場景及作用
- DMCreator:2020年印度數字營銷分析
- 數字經濟到底是什麼?從社群團購分析數字化
- 區塊鏈數字資產交易所開發發展及平臺安全分析區塊鏈
- MySQL如何查詢某個欄位含有字母數字的值MySql
- pbootcms網站欄目url字數長度限制的修改方法boot網站
- 兄弟連go教程(4)型別-引用及轉換Go型別
- 洛谷 P2731 騎馬修柵欄 Riding the Fences之尤拉路徑板子
- java高併發系列 - 第17天:JUC中的迴圈柵欄CyclicBarrier常見的6種使用場景及程式碼示例Java