關於拓撲排序的一些個人理解

2021-09-10 06:34:07 字數 702 閱讀 3544

拓撲排序首先針對的是有向無環圖,其主要的目的是將乙個有向圖變為乙個線性序列,就像任務排序那樣的感覺。對於任何任務,必然先要完成其先導任務,對於同等級的任務,就可以隨意進行排序處理,當是乙個正常可完成的無環圖,必然可以使得生成乙個同節點個數的線性序列;

對於拓撲排序,核心的步驟要借助佇列進行;

首先,根據我們的觀察,乙個可以進行拓撲排序的圖必然存在入度為0的點,這也是我們必須要先進行處理的點。第一步就是將這些入度為0的點打進佇列;

將佇列中的點進行處理,處理乙個出隊乙個,當我們完成乙個點的時候,有可能後繼的節點也可以進行處理,所以這裡處理完乙個節點,就將後繼的節點進行入度-1,當有乙個後繼節點入度變為0,就說明可以進行處理,加入佇列;

重複的進行上述操作,直至佇列內為空。

大致**如下,不難理解:

其中值得注意的是我們維護了乙個indegree佇列,來進行每個節點入度的值,作為判斷是否入佇列的條件;

vectorg[maxv];

int n,m,indegree[maxv];

bool topologicalsort()

}while(!.empty())

}g[u].clear();

num++;

}if(num==n)

return true;

else

return false;

}

關於SpringIOC的一些個人理解

根據上面這個思路接著說的話,那就順理成章了,首先spring容器將所有的bean都放在一起進行管理,然後當某個應喲經程式需要用到某個bean物件的時候,說一下,然後spring自動給這個程式分配他所需要的物件。這就是所謂的控制反轉了吧?本來這個宣告建立bean物件的過程應該由程式自己進行,建立呼叫然...

關於git命令一些個人理解

對於git reset hard 版本號 如果工作區新增了乙個檔案,那個檔案不會被刪除,因為沒有add過,不能對它追蹤。同樣,假如工作區新增了新檔案,如果git reset 版本號 再git checkout 新檔名 是會報錯的,也是沒有追蹤那個新檔案。這個時候如果git status,會顯示有新檔...

關於KMP演算法的一些個人理解

kmp演算法其實理解起來也不難,只不過很多過於公式化的講解以及太過晦澀的說法會讓人一頭霧水 kmp演算法主要是判斷乙個字串是否是另乙個字串的字串 對於這兩個字串,在演算法描述中有固定的稱謂 我們把最長的字串稱為text,需要判定的子串稱為模式pattern 對於這個問題,其實最容易想到的就是暴力列舉...