離散數(shù)學包括數(shù)理邏輯剃根,集合論,圖論,近世代數(shù)物遇。
圖論
哥尼斯堡七橋問題(圖論的起源):只有每個點的度都是偶數(shù)的情況才能不重復地遍歷每個頂點。
爬蟲
下載互聯(lián)網(wǎng)上的所有網(wǎng)頁(網(wǎng)頁當做節(jié)點憾儒,超鏈接作為邊)需要用到圖論的遍歷算法询兴。完成這個功能的程序叫做網(wǎng)絡(luò)爬蟲。
“如何構(gòu)建一個網(wǎng)絡(luò)爬蟲”是一個很好的面試問題起趾,考察計算機科學理論基礎(chǔ)诗舰,算法能力和工程素養(yǎng)。
策略
現(xiàn)實中的網(wǎng)絡(luò)爬蟲的任務(wù)應(yīng)該定義成“如何在有限時間內(nèi)爬下最重要的網(wǎng)頁”训裆,這種情況下BFS遍歷明顯優(yōu)于DFS眶根。但是考慮到下載服務(wù)器和網(wǎng)頁服務(wù)器的連接具有握手成本,(網(wǎng)絡(luò)爬蟲是有上千臺服務(wù)器組成的分布式系統(tǒng))那么就由一個或幾個服務(wù)器專門下載一個網(wǎng)頁边琉,下載完一個網(wǎng)站再進入下一個属百。這又是DFS的概念。所以這個優(yōu)先級隊列的調(diào)度系統(tǒng)是DFS和BFS的優(yōu)化变姨。
一些網(wǎng)頁是由js寫的族扰,需要運行才能得到URL,有些腳本寫的不規(guī)范,以至于難以解析渔呵,因此需要瀏覽器內(nèi)核工程師來寫網(wǎng)絡(luò)爬蟲的解析程序怒竿。所以會有爬蟲爬不到的網(wǎng)頁。
為了記錄一些網(wǎng)頁是否已經(jīng)被下載過厘肮,需要用一個哈希表進行記錄愧口。那么需要維護一個龐大的哈希表,解決方法是明確每個下載服務(wù)器的分工类茂,然后批處理詢問(每次更新一大批哈希表內(nèi)容)耍属。