筆試的感受不是很好,部分題目不太會,這裏簡單記錄一下不了解的題目。html
一、同一進程中的不一樣線程共享哪些資源?算法
二、蒲豐投針的問題,與機率比較相關的問題。多線程
題目描述:平面上畫不少平行線,間距爲a, 向此平面內投擲長度爲l(l<a) 的針,求此針與任一直線相交的機率?併發
三、給出一系列的1*h的矩形,求矩形的最大面積。函數
如圖:spa
筆試中這三個題目比較不知因此,操做系統的內容已經忘記了,因此第一個題目不太瞭解。第二個題目也很生疏,數學功底很是的弱。第三個題目想了一個奇葩的思路,當時就想應該會有O(n)的解法,可是當時怎麼想都沒有想到提升時間效率的方法,因此最後仍是寫了那個奇葩的思路。操作系統
1. 這個問題的答案參考兩個地方,不太肯定是否準確。.net
多線程中每一個線程獨立的地方: (http://laiyuanyuan7.blog.163.com/blog/static/15274321201241191321666/)線程
2. 18世紀,法國數學家布豐和勒可萊爾提出的「投針問題」,記載於布豐1777年出版的著做中:「在平面上畫有一組間距爲a的平行線,將一根長度爲l(l<a)的針任意擲在這個平面上,求此針與平行線中任一條相交的機率。」布豐本人證實了,這個機率是p=2l/(πd) π爲圓周率。htm
證實:(from 百度百科)下面就是一個簡單而巧妙的證實。找一根鐵絲彎成一個圓圈,使其直徑偏偏等於平行線間的距離d。能夠想象獲得,對於這樣的圓圈來講,無論怎麼扔下,都將和平行線有兩個交點。所以,若是圓圈扔下的次數爲n次,那麼相交的交點總數必爲2n。如今設想把圓圈拉直,變成一條長爲πd的鐵絲。顯然,這樣的鐵絲扔下時與平行線相交的情形要比圓圈複雜些,可能有4個交點,3個交點,2個交點,1個交點,甚至於都不相交。因爲圓圈和直線的長度同爲πd,根據機會均等的原理,當它們投擲次數較多,且相等時,二者與平行線組交點的總數指望也是同樣的。這就是說,當長爲πd的鐵絲扔下n次時,與平行線相交的交點總數應大體爲2n。如今轉而討論鐵絲長爲l的情形。當投擲次數n增大的時候,這種鐵絲跟平行線相交的交點總數m應當與長度l成正比,於是有:m=kl,式中k是比例係數。爲了求出k來,只需注意到,對於l=πd的特殊情形,有m=2n。因而求得k=(2n)/(πd)。代入前式就有:m≈(2ln)/(πd)從而π≈(2ln)/(dm)
3.(1)當時解題的思路比較詭異,一直想着要縮小問題的規模,而後得出的思路是:首先找出最短的一個矩形,而後這個最短的矩形高度*長度得出一個面積,而後利用最矮的矩形將原來的問題切割成爲左邊的一個子問題和右邊的一個子問題。
這個解題思路若是是矩形排列比較好的狀況下可以達到O(nlgn)的時間複雜度。可是後來想一想,若是若是連續的矩形單調遞減或者單調遞增,這個算法的複雜度就會退化爲O(n2),因此這個算法思路不是很好。
(2)這裏說一下窮舉的思路其實時間複雜度也僅僅只有O(n2)而已。思路就是窮舉每個矩形條能夠擴展的最大矩形面積。向左向右延伸,延伸結束的條件是出現高度小於其的矩形條,這樣能夠獲得一個寬度,而後計算每一個矩形條能夠延伸的最大面積,最後得出最大的面積。
(3)改進的思路也是基於窮舉的思路進行改進的,窮舉的時候由於有重複的計算,因此這裏就存在的改進空間。搜索了一下網上提供的思路,都是單調堆棧的思路,應該就是這個改進方法了。(from http://blog.csdn.net/alongela/article/details/8230739)
創建一個單調遞增棧,全部元素各進棧和出棧一次便可。每一個元素出棧的時候更新最大的矩形面積。
設棧內的元素爲一個二元組(x, y),x表示矩形的高度,y表示矩形的寬度。
若原始矩形高度分別爲2,1,4,5,1,3,3
高度爲2的元素進棧,當前棧爲(2,1)
高度爲1的元素準備進棧,但必須從棧頂開始刪除高度大於或等於1的矩形,由於2已經不可能延續到當前矩形。刪除(2,1)這個元素以後,更新最大矩形面積爲2*1=2,而後把它的寬度1累加到當前高度爲1的準備進棧的矩形,而後進棧,當前棧爲(1,2)
高度爲4的元素進棧,當前棧爲(1,2) (4,1)
高度爲5的元素進棧,當前棧爲(1,2) (4,1) (5,1)
高度爲1的元素準備進棧,刪除(5,1)這個元素,更新最大矩形面積爲5*1=5,把1累加到下一個元素,獲得(4,2),刪除(4,2),更新最大矩形面積爲4*2=8,把2累加到下一個元素,獲得(1,4),1*4=4<8,沒必要更新,刪除(1,4),把4累加到當前準備進棧的元素而後進棧,當前棧爲(1,5)
高度爲3的元素進棧,當前棧爲(1,5) (3,1)
高度爲3的元素準備進棧,刪除(3,1),沒必要更新,把1累加到當前準備進棧的元素而後進棧,當前棧爲(1,5) (3,2)
把餘下的元素逐個出棧,(3,2)出棧,沒必要更新,把2累加到下一個元素,當前棧爲(1,7),(1,7)出棧,沒必要更新。棧空,結束。
最後的答案就是8。