集團內部有一核心機密專案,共由150個**模組按順序序列執行組成(示例:模組1->模組2->…模組n…->模組149->模組150)。偶然一天,某乙個模組突然被黑客入侵(當前模組也稱入侵點)。因為內部已經有預防措施,現存兩款從不同角度設計的反入侵檢測程式,但同時也有一定檢測限制:
1.輸入:順序**段,必須以模組1開始(比如:模組1->模組2->…模組39)
2:輸出:true-輸入包含入侵點,false-輸入不包含入侵點
3.每款檢測程式可以執行多次:可多次返回false,但僅能返回一次true(由於入侵的對抗性存在,一旦輸出true即報廢,後續檢測功能失效)
4.同一時刻只能有一款檢測程式執行,每檢測一次耗時10分鐘
現在希望僅利用現有的兩款反入侵檢測程式,在最短的時間內確保可以快速定位入侵點。具體需要如何設計檢測流程,時間是多久。
這道題其實與另外一道經典題目「樓層扔雞蛋」的本質是一樣的,我自己在大二參加藍橋杯的時候遇到過這道題,當時不會做,跟這道題一樣,第一反應就是二分法,但其實這裡面有個問題,二分法對於嘗試的次數是沒有限制的,而這兩道題不一樣,一旦失敗一次,剩下那次唯一的機會就得從頭乙個乙個列舉,所以二分法在這裡是行不通的。
介紹乙個資料結構——塊狀鍊錶。我們都知道,陣列的優點在於可以使用索引隨機訪問,而鍊錶的優點在於o(1)複雜度的插入刪除,塊狀鍊錶就是將這兩個資料結構結合了起來。比如有n個元素,將其分為√n份,每份就有√n個元素,這樣我們在查詢某乙個元素時就可以在√n的時間內定位到某一塊,並且在塊內尋找的時候複雜度也是√n,總共的複雜度就是2√n。
受此次發,我們可以將樓層分為√n份,這樣只需在o(2√n)的時間內就可以找到答案。例如有25層樓,分成5樓乙份,最壞的情況是再最高一層樓,也就是第5份裡面的第5小份,總次數就等於5+4=9次,也就是2√n-1次。
但仔細想想,這是最優的答案了嗎?按照前面分析的,這個方法最壞嘗試9次,那麼我們第一次不在第5層扔,而是在第9層扔,這樣並不會破壞最壞結果,假設扔完之後雞蛋沒碎,那麼剩下16層,再在16層樓中按照此方法嘗試,很明顯是不需要8次的。(或根據歸納法也可知道25層的答案不是9)
先講一種通用的方法:歸納法。從一層樓開始,需要嘗試的次數是1次;如果是兩層樓,那麼需要嘗試2次,三層樓同樣需要嘗試兩次;如果是
四、五、六層樓,則需嘗試3次;如果是
七、八、九、十層樓,則嘗試四次。。。我們可以發現規律:乙個1,兩個2,三個3,四個4。。。我們可以按照規律列舉出每一層需要的次數直到求解的那一層。
歸納法對於這道題是有用的,但是對於這道題的推廣問題:m層樓n個雞蛋的情況就無能為力,所以我們還要學習動態規劃法。
令f [i][j] 為 i 層樓 j 個雞蛋時的最少嘗試次數,那麼規劃方程為
f [i][j] = min(max( f [i-1][j-1], f [m-i][j] ) + 1)
f [i-1][j-1] 表示在第i層雞蛋摔碎了,那麼就要從這一層下面的那些樓層去試,所以樓層減一雞蛋數減一。也有可能雞蛋沒碎,由 f [m-i][j] 表示。這兩種情況要考慮最差的情況,所以取max,再加上這一次的1。遍歷所有層數取最小值。這種解法的時間複雜度為o(n^2*m)。
可以看到這種動態規劃的時間複雜度非常高,其實還有更快的解法,我們需要結合歸納法的思路,反過來看i個雞蛋扔j次最多可以測出多少層,然後與題目要求的樓層數進行比較。令f [i][j] 代表一共i個雞蛋,扔j次最多可以測出來的樓層的高度。方程為
f [i][j] = f [i-1][j-1] + 1 + f [i][j-1]
f [i-1][j-1] 表示雞蛋破了,f [i][j-1] 表示雞蛋沒破。找到最小的f [i][j] 使得j >= n,時間複雜度為o(m*answer)。
黑客入侵 認識黑客入侵的利器「嗅探神器「
ont en tcontent conten t 享入 侵微軟在 wi n2000,x p中設定 的這個功 能對個人 使用者來說 幾乎毫無 用處。反 而成了黑 客入侵n t架構操 作系統的 一條便利 通道。如 果你的操 作系統存 在不安全 的口令,那就更可 怕了。一 條典型的 入侵流程 如下 1 用...
開源與「黑客」入侵
請不要因為沒吃過豬肉,也沒見過豬跑,就否認這世界上有豬的存在 更沒必要國為2007是豬年一下子變得跟豬一樣 可愛 開源最原始的說法就是開放源 而黑客已經是it業乃至社會大眾都耳熟能詳的名詞了,就連上學 年級的小強都經常信誓旦旦的說 我長大要做一名黑客!全世界的黑客非常多,因為性質不同可以細化成cra...
開源與「黑客」入侵
請不要因為沒吃過豬肉,也沒見過豬跑,就否認這世界上有豬的存在 更沒必要國為2007是豬年一下子變得跟豬一樣 可愛 開源最原始的說法就是開放源 而黑客已經是it業乃至社會大眾都耳熟能詳的名詞了,就連上學 年級的小強都經常信誓旦旦的說 我長大要做一名黑客!全世界的黑客非常多,因為性質不同可以細化成cra...