6.8.最小生成樹


一.復習:

1.生成樹:

對于一個連通的無向圖,假設圖中有n個頂點,如果能找到一個符合以下要求的子圖:

子圖中包含圖中所有的頂點,同時各個頂點保持連通,

而且子圖的邊的數量只有n-1條,

那么這樣的子圖就是生成樹,一個連通圖可能有多個生成樹。

2.廣度優先生成樹:

3.深度優先生成樹:


二.最小生成樹(最小代價樹):生成樹必須包含圖中所有的頂點

1.前言:

假設有一個城市叫P城,P城周圍規劃了學校、農場、電站、漁村、礦場,

各個地方之間有上圖所示的修路方案,其中數字表示修路的成本,比如修一條P城和學校之間的路需要1塊錢,修一條學校和礦場之間的路需要5塊錢,

現在為了節省P城的財政支出,沒有必要把所有的可行的道路都修一遍,

因此需要制定一個修路方案,這個方案要求所有地方都是連通的即各個地方之間是相互可到達的(各個地方之間不一定是相鄰的),但是成本又必須降到最低,此時有如下兩種方案:

左邊的方案可以使得各個地方連通,代價是20塊錢(圖片打錯了);

右邊的方案也可以使各個地方連通,但代價是16塊錢,

但是否有更便宜的方案呢?這就是最小生成樹(最小代價樹)要研究的問題。

對于帶權的連通圖,它可以有多個生成樹,我們要從所有的生成樹當中找出各個邊的權值之和最小即代價最小的那棵樹,這個樹就是最小生成樹。

2.概念:

注:最小生成樹研究的是帶權的連通無向圖。

3.特例:當帶權連通的無向圖的權值都為一個數

以上述圖片的帶權連通無向圖為例,可得出如下兩個生成樹:

由生成樹的概念可知這兩棵生成樹的邊都是5條(邊等于頂點總數減一,此時有6個頂點),由于每一條邊的權值都為1,因此這兩棵生成樹所有邊的權值之和都為5,

由此可知本例中帶權無向圖的任意一棵生成樹的所有邊的權值之和都為5,因此最小的權值之和為5,

結論:假設一個帶權連通無向圖的頂點數為V個,邊為E條,邊的權值都為a,

該圖的所有生成樹都只有(V-1)條邊,其權值之和為(V-1) * a,由此可知最小生成樹的權值之和為(V-1) * a,因為所有樹都一樣。

4.性質:

  • 如果一個連通圖本身就是一棵樹(樹不存在環路),也就是圖中各個頂點連通但不存在環,那么這個圖的最小生成樹就是它本身->因為如果連通圖是樹時,那么它已經是生成樹了,而且無法再有更小的生成樹了,再有的話就會缺頂點,不符合生成樹的條件,所以此時這個圖的最小生成樹就是它本身

  • 只有連通圖才有生成樹

  • 對于非連通圖,只會有生成森林,因為非連通圖不止一個連通分量,生成的也就不止一個生成樹,最終就是生成森林(這里生成必須要包括圖中的所有頂點,不然不符合生成的條件)

5.總結:


三.求最小生成樹-Prim算法(普里姆算法):

1.例一:

以上述圖片為例,挑選圖中任意一個頂點,從該頂點出發構建生成樹:

如上圖,比如從P城這個頂點出發構建生成樹,之后每次將代價最小的新頂點納入生成樹,直到所有頂點都納入為止,

此時要構建的生成樹中只有P城這一個頂點,從P城出發,分別對比到達學校、礦場、漁村、電站、農場所需要的代價,可知從P城到達學校的代價最小,因此接下來要把學校這個頂點納入生成樹,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中有P城和學校兩個頂點,

現在要從P城或學校出發,在農場、電站、漁村、礦場中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為4,如下圖:

意味著可以把礦場或者漁村納入生成樹中,

此時先把礦場納入生成樹,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中包括P城、學校和礦場,

現在要從P城或學校或礦場出發,在農場、電站、漁村中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為2,如下圖:

意味著把漁村納入生成樹中,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中包括P城、學校、礦場和漁村,

現在要從P城或學校或礦場或漁村出發,在農場、電站中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為5,如下圖:

意味著把農場納入生成樹中,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中包括P城、學校、礦場、漁村和農場,

現在要從P城或學校或礦場或漁村或農場出發,在電站中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為3,如下圖:

意味著把電站納入生成樹中,如下圖:

如下圖,最終得到了最小生成樹:

也就是說按照如上圖所得出的最小生成樹進行施工的話,只需要付15塊錢,也是最小代價。

2.例二:

以上述圖片為例,挑選圖中任意一個頂點,從該頂點出發構建生成樹:

如上圖,比如從P城這個頂點出發構建生成樹,之后每次將代價最小的新頂點納入生成樹,直到所有頂點都納入為止,

此時要構建的生成樹中只有P城這一個頂點,從P城出發,分別對比到達學校、礦場、漁村、電站、農場所需要的代價,可知從P城到達學校的代價最小,因此接下來要把學校這個頂點納入生成樹,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中有P城和學校兩個頂點,

現在要從P城或學校出發,在農場、電站、漁村、礦場中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為4,如下圖:

意味著可以把礦場或者漁村納入生成樹中,

此時把漁村納入生成樹,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中包括P城、學校、漁村,

現在要從P城或學校或漁村出發,在農場、電站、礦場中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為2,如下圖:

意味著把礦場納入生成樹中,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中包括P城、學校、漁村、礦場,

現在要從P城或學校或漁村或礦場出發,在農場、電站中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為5,如下圖:

意味著把農場納入生成樹中,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中包括P城、學校、漁村、礦場、農場,

現在要從P城或學校或漁村或礦場或農場出發,在電站中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為3,如下圖:

意味著把電站納入生成樹中,如下圖:

如下圖,最終得到了最小生成樹:

也就是說按照如上圖所得出的最小生成樹進行施工的話,只需要付15塊錢,也是最小代價。

3.對比例一與例二分別得出的最小生成樹:

以上兩棵生成樹的最小代價都是15,

因此同一個圖可能有多個最小生成樹,雖然形態不同,但是這些最小生成樹的所有邊的權值之和都是一樣且最小的。

4.例三:

以上述圖片為例,挑選圖中任意一個頂點,從該頂點出發構建生成樹:

如上圖,比如從農場這個頂點出發構建生成樹,之后每次將代價最小的新頂點納入生成樹,直到所有頂點都納入為止,

此時要構建的生成樹中只有農場這一個頂點,從農場出發,分別對比到達學校、電站、漁村、礦場、P城所需要的代價,可知從農場到達電站的代價最小,因此接下來要把電站這個頂點納入生成樹,如下圖:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中有農場和電站兩個頂點,

現在要從農場或電站出發,在漁村、礦場、學校、P城中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為5,如下圖,因此要把P城納入生成樹中:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中有農場、電站、P城,

現在要從農場或電站或P城出發,在漁村、礦場、學校中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為1,如下圖,因此要把學校納入生成樹中:

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中有農場、電站、P城、學校,

現在要從農場或電站或P城或學校出發,在漁村、礦場中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為4,如下圖,因此可以把礦場或漁村納入生成樹中,此時把礦場納入生成樹中(這里把漁村納入生成樹后得出的最小生成樹的最小代價一致):

如上圖,在當前生成樹下重復剛才的步驟,此時的生成樹中有農場、電站、P城、學校、礦場,

現在要從農場或電站或P城或學校或礦場出發,在漁村中選擇一個代價最小的頂點連到當前生成樹中,

由上圖可知最小的代價為2,如下圖,因此可以把漁村納入生成樹中:

最終得出了如上圖所示的最小生成樹,最小代價也是15,與例一、例二的最小代價一樣。


四.求最小生成樹-Kruskal算法(克魯斯卡爾):

實例:

執行過程:每次選擇一條權值最小的邊,使這條邊的兩頭連通(原本已經連通的就不選),直到所有頂點連通。

以上述圖片為例,一開始圖里的各個頂點都獨立存在,各個頂點之間不存在邊,所以用虛線標注,

現在從所有的虛線里挑出權值最小的一條,顯然權值最小的是1這條虛線,如下圖:

如上圖,1這條虛線的兩頭是P城和學校這兩個頂點,這兩個頂點此時還沒有連通,所以把這條虛線選中,使這兩個頂點連通,如下圖:

如上圖,繼續從所有的虛線里挑出權值最小的一條,顯然權值最小的是2這條虛線,如下圖:

如上圖,2這條虛線的兩頭是漁村和礦場這兩個頂點,這兩個頂點此時還沒有連通,所以把這條虛線選中,使這兩個頂點連通,如下圖:

如上圖,繼續從所有的虛線里挑出權值最小的一條,顯然權值最小的是3這條虛線,如下圖:

如上圖,3這條虛線的兩頭是農場和電站這兩個頂點,這兩個頂點此時還沒有連通,所以把這條虛線選中,使這兩個頂點連通,如下圖:

如上圖,繼續從所有的虛線里挑出權值最小的一條,顯然權值最小的是4這條虛線,如下圖:

如上圖,P城和礦場之間的虛線的權值、P城和漁村之間的虛線的權值都為4,現在選擇P城和礦場之間的虛線,P城和礦場這兩個頂點此時還沒有連通,所以把這條虛線選中(P城和漁村這兩個頂點此時也沒有連通,所以選這條虛線也可以),使這兩個頂點連通,最終P城、礦場、漁村、學校這幾個頂點就都連通了,如下圖:

如上圖,繼續從所有的虛線里挑出權值最小的一條,顯然權值最小的是4這條虛線,如下圖:

如上圖,此時權值為4的這條虛線的兩頭是P城和漁村,由于P城和漁村這兩個頂點已經連通了,所以這條虛線需要跳過不選,如下圖:

如上圖,繼續從所有的虛線里挑出權值最小的一條,顯然權值最小的是5這條虛線,如下圖:

如上圖,P城和農場之間的虛線的權值、學校和礦場之間的虛線的權值都為5,由于學校和礦場已經連通,因此學校和礦場之間的虛線不選,而P城和農場之間還沒有連通,所以應選中P城和農場之間的虛線,如下圖:

如上圖,至此,所有的頂點全部連通,Kruskal算法(克魯斯卡爾)結束。

如下圖,本例采用Kruskal算法(克魯斯卡爾)得出的最小生成樹的最小代價為15,與用Prim算法(普里姆算法)得出的結果一致:


五.Prim算法(普里姆算法) v.s. Kruskal算法(克魯斯卡爾):

假設圖中有V個頂點、E條邊:

對于Prim算法(普里姆算法),每一次是選擇一個頂點開始;

對于Kruskal算法(克魯斯卡爾),每一次是選擇一條邊開始;

因此這兩個算法所表現出的時間復雜度也就不一樣,

Prim算法(普里姆算法)的時間復雜度只與頂點的個數有關,適用于邊稠密圖即邊多的圖(因為邊多的話頂點相對少一些),

Kruskal算法(克魯斯卡爾)的時間復雜度只與邊的個數有關,適用于邊稀疏圖即邊少的圖(因為邊越少越能在短時間完成)。


六.Prim算法的實現思想:

1.實例:

以上述圖片為例,假設從v0頂點開始,設置isJoin數組和lowCost數組:

isJoin數組用于記錄圖中的頂點是否被加入正在組建的生成樹中,由于剛開始v0已經在生成樹中,所以v0在isJoin數組的值為true(上述圖片標記為勾),其余的頂點沒有加入生成樹中,因此其余的頂點對應的值都為false(上述圖片標記為叉);

lowCost數組用于記錄把這些頂點加入到已經組建的生成樹里所需要花費的最低代價->最開始選中了v0,

由于v0與v0之間不存在邊,所以v0對應的lowCost數組的值為0,

由于v0與v1之間有一條邊,這條邊的權值為6,因此把v1加入到組建的生成樹中所需要付出的最低代價是6,所以v1對應的lowCost數組的值為6,

由于v0與v2之間有一條邊,這條邊的權值為5,因此把v3加入到組建的生成樹中所需要付出的最低代價是5,所以v2對應的lowCost數組的值為5,

由于v0與v3之間有一條邊,這條邊的權值為1,因此把v2加入到組建的生成樹中所需要付出的最低代價是1,所以v3對應的lowCost數組的值為1,

而v4與v5這兩個頂點和v0之間都沒有直接相連的邊,所以就目前來看,暫時無法把v4、v5放到組建好的生成樹中,因此v4與v5對應的lowCost的值都用無窮記錄,也可以用別的記錄。

如下圖,開始進行第一輪處理:

首先需要檢查isJoin數組和lowCost數組,最終找出一個還沒有被加入生成樹且代價最低的頂點,

由上述圖片可知,v3頂點沒有加入生成樹中且代價最小,因此把v3頂點加入生成樹中,如下圖:

如上圖,要把v3頂點在isJoin數組中對應的值修改為true即勾,表示已加入生成樹中,繼續如下圖:

如上圖,需要循環遍歷lowCost數組,更新還沒加入的各個頂點對應的lowCost值,

現在加入了v3這個頂點之后,對于其他的還沒有被加入生成樹的頂點,接下來加入生成樹的代價有可能會改變,

因為生成樹中相較于一開始多了個v3頂點,最開始只有v0頂點時加入v1頂點最低代價為6,現在多了個v3頂點,加入v1頂點的最低代價為5,顯然小于6,因此接下來如果要把v1加到生成樹中,所需要付出的最低代價就從6變成了5,

因此把v1對應的lowCost值修改為5,同理現在

加入v2的最低代價為4,因此把v2對應的lowCost值修改為4,

加入v4的最小代價為6,因此把v4對應的lowCost值修改為6,

加入v5的最小代價為4,因此把v5對應的lowCost值修改為4,

由于v0與v3這兩個頂點已經加入到生成樹中,所以對應的lowCost值無需修改(因為之后不會再加入v0與v3這兩個頂點),

最終lowCost數組中的值依次為0、5、4、1、6、4,

如下圖:

如下圖,開始進行第二輪處理:原理與第一輪一樣

首先需要檢查isJoin數組和lowCost數組,最終找出一個還沒有被加入生成樹且代價最低的頂點,

由上述圖片可知,v2頂點和v5頂點都沒有加入生成樹中且代價都是最小的(代價都為4),因此v2頂點和v5頂點都可以加入生成樹中,但如果是從頭到尾去掃描lowCost數組中的元素,v2頂點是第一個被挑選并加入生成樹中的,如下圖:

如上圖,要把v2頂點在isJoin數組中對應的值修改為true即勾,表示已加入生成樹中,繼續如下圖:

如上圖,需要循環遍歷lowCost數組,更新還沒加入的各個頂點對應的lowCost值,

由上述圖片可知,加入v2頂點之后,

加入v1的最低代價為5,無需修改,

加入v4的最小代價為6,無需修改,

加入v5的最小代價為2,因此把v5對應的lowCost值修改為2,

由于v0、v3和v2這三個頂點已經加入到生成樹中,所以對應的lowCost值無需修改(因為之后不會再加入v0、v3和v2這三個頂點),

最終lowCost數組中的值依次為0、5、4、1、6、2,

如下圖:

如下圖,開始進行第三輪處理:

首先需要檢查isJoin數組和lowCost數組,最終找出一個還沒有被加入生成樹且代價最低的頂點,

由上述圖片可知,v5頂點沒有加入生成樹中且代價最小,因此把v5頂點加入生成樹中,如下圖:

如上圖,要把v5頂點在isJoin數組中對應的值修改為true即勾,表示已加入生成樹中,繼續如下圖:

如上圖,需要循環遍歷lowCost數組,更新還沒加入的各個頂點對應的lowCost值,

由上述圖片可知,加入v5頂點之后,

加入v1的最低代價為5,無需修改,

加入v4的最小代價為6,無需修改,

由于v0、v3、v2和v5這四個頂點已經加入到生成樹中,所以對應的lowCost值無需修改(因為之后不會再加入v0、v3、v2和v5這四個頂點),

最終lowCost數組中的值依次為0、5、4、1、6、2,

如下圖:

如下圖,開始進行第四輪處理:

首先需要檢查isJoin數組和lowCost數組,最終找出一個還沒有被加入生成樹且代價最低的頂點,

由上述圖片可知,v1頂點沒有加入生成樹中且代價最小,因此把v1頂點加入生成樹中,如下圖:

如上圖,要把v1頂點在isJoin數組中對應的值修改為true即勾,表示已加入生成樹中,繼續如下圖:

如上圖,需要循環遍歷lowCost數組,更新還沒加入的各個頂點對應的lowCost值,

由上述圖片可知,加入v1頂點之后,

加入v4的最小代價為3,因此把v4對應的lowCost值修改為2,

由于v0、v3、v2、v5和v1這五個頂點已經加入到生成樹中,所以對應的lowCost值無需修改(因為之后不會再加入v0、v3、v2、v5和v1這五個頂點),

最終lowCost數組中的值依次為0、5、4、1、3、2,

如下圖,開始進行第五輪處理:

首先需要檢查isJoin數組和lowCost數組,最終找出一個還沒有被加入生成樹且代價最低的頂點,

由上述圖片可知,v4頂點沒有加入生成樹中且代價最小,因此把v4頂點加入生成樹中,如下圖:

如上圖,要把v4頂點在isJoin數組中對應的值修改為true即勾,表示已加入生成樹中,

最終所有頂點全部加入到生成樹中,Prim算法結束。

2.時間復雜度分析:

上述例子中進行了好幾輪的處理最終得出最小生成樹,從代碼角度來看就是好幾輪的循環,

由于每一輪的循環都會選擇一個新的頂點把它放入生成樹中,假設圖中有n個頂點就需要n-1輪的循環,因為第一個頂點不需要循環,

而每一輪的處理當中又需要進行兩次循環遍歷,第一次循環遍歷所有的頂點來從isJoin數組和lowCost數組中找出未加入生成樹且代價最小的頂點,第二次循環遍歷所有的頂點來更新lowCost數組,所以每一輪的時間復雜度為O(2n),等價于O(n),

由于需要n-1輪循環,所以總的時間復雜度就是O( n * (n-1) ),等價于O( n * n - n ),等價于O( n * n ),

如果改為圖中有V個頂點,時間復雜度就是O( |V| * |V|)。


七.Kruskal算法(克魯斯卡爾)的實現思想:

1.實例:

如下圖,由于Kruskal算法(克魯斯卡爾)每次要選擇一條權值最小的邊,所以要先把各條邊按照權值遞增的次序進行排序:

如上圖,權值最小的邊是權值為1的這條邊,兩邊的頂點是v0和v3,所以上述圖片里的第一行數據中weight為1、Vertex1為v0、Vertex2為v3,該算法的執行過程就是把所有的邊都檢查一遍。

如上圖,第一條邊的權值為1,兩邊連的頂點是v0和v3,接下來就要檢查v0和v3是否連通,進行這個判斷用到了并查集(詳情見"5.15.并查集"),大致的思想就是剛開始要把所有的頂點分別看作是不同的集合,所以對于第一條邊的兩個頂點v0和v3,他們剛開始從屬于不同集合,也就意味著他們此時不連通,因此就可以把這條邊選中,如下圖:

此時v0和v3這兩個頂點就屬于同一個集合了,

如下圖,接下來進行第二輪的處理,權值為2的邊的兩頭為v2和v5,v2和v5此時不屬于同一個集合即v2和v5不連通,所以把v2和v5連起來,把v2和v5歸并為同一個集合:

如下圖,接下來進行第三輪的處理,權值為3的邊的兩頭為v1和v4,v1和v4此時不屬于同一個集合即v1和v4不連通,所以把v1和v4連起來,把v1和v4歸并為同一個集合:

如下圖,接下來進行第四輪的處理,其中一條權值為4的邊的兩頭為v2和v3,v2和v3此時不屬于同一個集合即v2和v3不連通,所以把v2和v3連起來,把v2和v3歸并為同一個集合:

如下圖,接下來進行第五輪的處理,其中一條權值為4的邊的兩頭為v3和v5,v3和v5此時屬于同一個集合即v3和v5連通,所以v3和v5之間的邊會跳過,不選中:

接下來的過程同理,最終把v1與v3連接后就得出最小生成樹,

如下圖,總之就是要把所有的邊都遍歷一遍,每當處理一條邊時,需要判斷這條邊所連接的兩個頂點是否從屬于同一個集合,如果不是,那就把這條邊選中,如果是,就不選中:

2.時間復雜度分析:

假設圖中共有e條邊:

每輪循環中判斷兩個頂點是否屬于同一個集合,要用到并查集,這個過程的時間復雜度詳情見"5.15.并查集",共e輪。


八.總結:


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901939.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901939.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901939.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 集成金蝶 API 演示

? Spring Boot 集成金蝶 API 演示:登錄 / 注銷 Cookie 保存 本文將通過 Spring Boot 完整實現一套金蝶接口集成模型,包括: ? 普通登錄? AppSecret 登錄? 注銷? Cookie 保存與復用 📅 項目結構 src/ ├── controller/ │…

React 受控表單綁定基礎

React 中最常見的幾個需求是: 渲染一組列表綁定點擊事件表單數據與組件狀態之間的綁定 受控表單綁定是理解表單交互的關鍵之一。 📍什么是受控組件? 在 React 中,所謂“受控組件”,指的是表單元素(如 &l…

基于FPGA的AES加解密系統verilog實現,包含testbench和開發板硬件測試

目錄 1.課題概述 2.系統測試效果 3.核心程序與模型 4.系統原理簡介 4.1 字節替換(SubBytes) 4.2 行移位(ShiftRows) 4.3 列混合(MixColumns) 4.4 輪密鑰加(AddRoundKey) 4.…

6.5 GitHub監控系統實戰:雙通道采集+動態調度打造高效運維體系

GitHub Sentinel Agent 定期更新功能設計與實現 關鍵詞:GitHub API 集成、定時任務調度、Python 爬蟲開發、SMTP 郵件通知、系統穩定性保障 1. GitHub 項目數據獲取功能 1.1 雙通道數據采集架構設計 #mermaid-svg-ZHJIMXcMAyDHVhmV {font-family:"trebuchet ms",v…

Explorer++:輕量級高效文件管理器!!

項目簡介 Explorer 是一款專為Windows操作系統設計的輕量級且高效的文件管理器。作為Windows資源管理器的強大替代方案,它提供了豐富的特性和優化的用戶體驗,使得文件管理和組織變得更加便捷高效。無論是專業用戶還是普通用戶,都能從中受益&a…

7、生命周期:魔法的呼吸節奏——React 19 新版鉤子

一、魔法呼吸的本質 "每個組件都是活體魔法生物,呼吸節奏貫穿其生命始終,"鄧布利多的冥想盆中浮現三維相位圖,"React 19的呼吸式鉤子,讓組件能量流轉如尼可勒梅的煉金術!" ——以霍格沃茨魔法生理…

理解計算篇--正則表達式轉NFA--理論部分

空正則表達式轉NFA單字符正則表達式轉NFA拼接正則表達式轉NFA選擇正則表達式轉NFA重復正則表達式轉NFA 正則表達式轉NFA–實戰部分 空正則表達式轉NFA 轉換步驟: 構建1個只有1個狀態的NFA起始狀態也是接受狀態沒有規則,即規則集為空 單字符正則表達式…

穩態模型下的異步電機調速【運動控制系統】

異步電動機: n1是同步轉速(電機和磁芯同步時候的轉速) n:電機的實際轉速 異步電動機恒壓頻比的概念,為什么基頻以下可以采取恒壓頻率,基頻以上不可以采用恒壓頻比: 異步電動機的恒壓頻比&…

【KWDB 創作者計劃】_算法篇---Stockwell變換

文章目錄 前言一、Stockwell變換原理詳解1.1 連續S變換定義1.2 離散S變換1.3簡介 二、S變換的核心特點2.1頻率自適應的時頻分辨率2.1.1高頻區域2.1.2低頻區域 2.2無交叉項干擾2.3完全可逆2.4相位保持2.5與傅里葉譜的直接關系 三、應用領域3.1地震信號分析3.2生物醫學信號處理3.…

云計算(Cloud Computing)概述——從AWS開始

李升偉 編譯 無需正式介紹亞馬遜網絡服務(Amazon Web Services,簡稱AWS)。作為行業領先的云服務提供商,AWS為全球開發者提供了超過170項隨時可用的服務。 例如,Adobe能夠獨立于IT團隊開發和更新軟件。通過AWS的服務&…

Python爬蟲第17節-動態渲染頁面抓取之Selenium使用下篇

目錄 引言 一、獲取節點信息 1.1 獲取屬性 1.2 獲取文本值 1.3 獲取ID、位置、標簽名、大小 二、切換Frame 三、延時等待 3.1 隱式等待 3.2 顯式等待 四、前進后退 五、Cookies 六、選項卡管理 七、異常處理 引言 這一節我們繼續講解Selenium的使用下篇&#xff0…

容器docker入門學習

這里寫目錄標題 容器容器的軟件廠商 dockerdocker引擎 虛擬化虛擬化技術 docker安裝詳解1、安裝檢查2、安裝yum相關的工具3、安裝docker-ce軟件4、查看docker版本5、啟動docker服務6、設置docker開機啟動7、查看有哪些docker容器運行進程8、查看容器里有哪些鏡像9、下載nginx軟…

文獻總結:NIPS2023——車路協同自動駕駛感知中的時間對齊(FFNet)

FFNet 一、文獻基本信息二、背景介紹三、相關研究1. 以自車為中心的3D目標檢測2. 車路協同3D目標檢測3. 特征流 四、FFNet網絡架構1. 車路協同3D目標檢測任務定義2. 特征流網絡2.1 特征流生成2.2 壓縮、傳輸與解壓縮2.3 車輛傳感器數據與基礎設施特征流融合 3. 特征流網絡訓練流…

git 出現 port 443 Connection timed out

梯子正常延遲不算嚴重,但在使用git push時反復出現 fatal: unable to access https://github.com/irvingwu5/xxxx.git/ Error in the HTTP2 framing layer Failed to connect to github.com port 443 after 136353 ms: Connection timed out 將git的網絡配置與梯子…

【2025年4月18日】android studiio最新設置沉浸式狀態欄教程

😫【2025年4月18日】搞了一整天,終于完美搞定 Android 沉浸式狀態欄(WebView 本地HTML) 最近在做一個個人項目,用 Android 加載本地 HTML 做個小工具。按理說用 WebView 加載頁面很簡單嘛——結果沉浸式狀態欄這個坑…

如何刪除 Launchpad 中 Chrome 的圖標

有一天突然在 Launchpad 中出現下面的圖標,在 Finder 的 Applications 中也沒有,不知道如何刪除。最終在《How to remove chrome app icons from launchpad?》中找到了答案。中文互聯網上并沒有搜到相關帖子,遂作記錄。 解決辦法很簡單&am…

PHP8.2.9NTS版本使用composer報錯,擴展找不到的問題處理

使用composer install時報錯: The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable this error, at y our own risk, by setting the ‘disable-tls’ option to true.…

一本通 2063:【例1.4】牛吃牧草 1005:地球人口承載力估計

Topic: Ideas: 為什么把這兩道題放在一起呢?就是因為這兩道題很類似,都是很簡單的數學題,只要你會列出數學等式,你就學會這道題了! 下面把計算過程展示給大家 Code: //2025/04/18…

基于用戶的協同過濾推薦系統實戰項目

文章目錄 基于用戶的協同過濾推薦系統實戰項目1. 推薦系統基礎理論1.1 協同過濾概述1.2 基于用戶的協同過濾原理1.3 相似度計算方法1.3.1 余弦相似度(Cosine Similarity)1.3.2 皮爾遜相關系數(Pearson Correlation)1.3.3 歐幾里得距離(Euclidean Distance)1.3.4 調整余弦相似度…