⑴ 用java實現生成樹協議
快速生成樹協議(RSTP)STP並不是已經淘汰不用,實際上不少廠家目前還僅支持STP。STP的最大缺點就是他的收斂時間太長,對於現在網路要求靠可靠性來說,這是不允許的,快速生成樹的目的就是加快乙太網環路故障收斂的速度。1.RSTP 5種埠類型STP定義了4種不同的埠狀態,監聽(Listening),學習(Learning),阻斷(Blocking)和轉發(Forwarding),其埠狀態表現為在網路拓撲中埠狀態混合(阻斷或轉發),在拓撲中的角色(根埠、指定埠等等)。在操作上看,阻斷狀態和監聽狀態沒有區別,都是丟棄數據幀而且不學習MAC地址,在轉發狀態下,無法知道該埠是根埠還是指定埠。表8-20中看RSTP的埠狀態只有三種狀態,Discarding、Leaning和Forwarding。表8-20 STP和RSTP埠狀態比較RSTP有五種埠類型。根埠和指定埠這兩個角色在RSTP中被保留,阻斷埠分成備份和替換埠角色。生成樹演算法(STA)使用BPDU來決定埠的角色,埠類型也是通過比較埠中保存的BPDUB來確定哪個比其他的更優先。1)根埠非根橋收到最優的BPDU配置信息的埠為根埠,即到根橋開銷最小的埠,這點和STP一樣。請注意圖8-16上方的交換機,根橋沒有根埠。按照STP的選擇根埠的原則,SW-1和SW-2和根連接的埠為根埠。2)指定埠與STP一樣,每個乙太網網段段內必須有一個指定埠。假設SW-1的BID比SW-2 優先,而且SW-1的P1口埠ID比P2優先順序高,那麼P1為指定埠,如圖8-17所示。 圖8-16 RSTP根埠 圖8-17 指定埠的選擇3)替換埠如果一個埠收到另外一個網橋的更好的 BPDU,但不是最好的,那麼這個埠成為替換埠,如圖8-18所示。對於SW-2來說,埠P3收到的BPDU比自己優先,自己為次優先,P3為替換埠。4)備份埠如果一個埠收到同一個網橋的更好 BPDU,那麼這個埠成為備份端。當兩個埠被一個點到點鏈路的一個環路連在一起時,或者當一個交換機有兩個或多個到共享區域網段的連接時,一個備份埠才能存在。如圖8-19所示,SW-1的P1和P2口同時接入到乙太網的同一網段,P1為指定埠,P2 優先順序低,則P2埠為備份埠。 圖8-18 替換埠的選擇 圖8-19 備份埠的選擇5)禁用埠在快速生成樹協議應用的網路運行中不擔當任何角色。2.BPDU更新與變化RSTP添加標志位,如圖8-20所示。在STP中,標志位只有0為TC和7為TCA使用,RSTP使用其中保留的6位。另外,RSTP在BPDU指定了埠的角色和埠狀態,並且採用提議/同意的控制機制。 具體 參考 下 http://it.kswchina.com/skrz/zh/507188.html
⑵ 圖的最小生成樹演算法
圖的生成樹和最小生成樹生成樹(SpanningTree):如果一個圖的子圖是一個包含圖所有節點的樹,那這個子圖就稱為生成樹.
⑶ 怎樣用Java實現網橋自學習演算法
網橋的自學習演算法原理
珞辰
網橋:在數據鏈路層可以用網橋設備來擴展乙太網。網橋工作在數據鏈路層,它根據MAC 幀的目的地址對收到的幀進行存儲轉發和過濾。當網橋收到一個數據幀時,並不是向所有的介面轉發這個數據幀,而是會進行有條件的轉發(網橋會丟棄CRC檢驗有差錯的幀以及幀長過短和過長的無效幀)再根據此幀的目的MAC地址,然後查找轉發表(網橋會自己維護轉發表,轉發表中每一條目都記錄了到達某個目的MAC地址的數據幀可以從那個介面進行轉發)根據轉發表中的條目逐步匹配看該從那個介面轉發或是否需要丟棄該數據幀。最簡單的網橋只有兩個介面(這里所講的網橋都是兩個介面的網橋)。
使用網橋設備的優點:
1,過濾通信量,增大吞吐量(網橋可以隔離碰撞域提高網路的吞吐量)
2,擴大了物理網路的范圍(擴展乙太網)
3,提供了可靠性(隻影響單個網段)
4,可以互連不同的物理層,不同MAC子層和不同速率
使用網橋設備的缺點:
1,使用CMSA/CD演算法增加了時延
2,不能進行流量控制,緩存存儲空間可能會發生溢出
3,會產生廣播風暴
網橋自學習和轉發幀的一般步驟:
1,網橋收到一幀後先進行自學習。查找轉發表中與收到數據幀的源地址有無匹配的項目。如果沒有,就在轉發表中增加一個項目(記錄數據幀的源地址,進入網橋的介面和時間)。如果有,則把原來的項目進行更新。
2,轉發幀。查找轉發表中與收到數據幀的目的地址有無相匹配的項目。如果沒有,則通過其他的介面(但進入網橋的介面除外)進行轉發。如果有,則按轉發表中給出的介面進行轉發。但應當注意,若轉發表中給出的介面就是該幀進入網橋的介面,則應該丟棄這個數據幀(因為這種情況不需要經過網橋進行轉發)。
3,使用生成樹演算法,即互連載一起的網橋在進行彼此通信後,就能找出原來的網路拓撲的一個子集。在這個子集里,整個連通的網路中不存在迴路,即在任何兩個站點之間只有一條路徑。
for example: 如圖所示,6個站點通過透明網橋B1和B2連接到一個擴展的區域網上。初始時網橋B1和B2的轉發表都為空。假設需要傳輸的幀序列如下:H2傳輸給H1;H5傳輸給H4;H3傳輸給H5;H1傳輸給H2;H6傳輸給H5。請給出這些幀傳輸完後網橋B1和網橋B2的轉發表。假設轉發表表項的格式為:[ 站點, 埠 ]。
發送的幀B1轉發表 B1的處理 B2轉發表 B2的處理
H2--->H1 H2,1 登記,轉發 H2,1 登記,轉發
H5--->H4 H5,2 登記,轉發 H5,2 登記,轉發
H3--->H5 H3,2 登記,丟棄 H3,1 登記,轉發
H1--->H2 H1,1 登記,丟棄
H6--->H5 H6,2 登記,丟棄
解釋說明:
1,H2主機向H1主機發送幀。連接在同一個區域網上的主機H1和網橋B1都能收到H2主機發送的數據幀。網橋B1收到這個數據幀後,先按源地址H2查找轉發表。這時因為網橋B1的轉發表為空,於是就把地址H2和收到此幀的介面1 寫入到轉發表中。這就表示,以後若收到要發給H2的幀,應當從網橋B1的這個介面1 轉發出去。接著再按目的地址H1查找轉發表。轉發表中沒有H1的地址,於是通過除收到此幀的介面1 以外的所有介面轉發此幀。網橋B2 從其介面1 收到這個轉發過來的幀。網橋B2按同樣的方式處理收到的幀。網橋B2的轉發表中沒有H2的地址,因此在網橋B2的轉發表中寫入地址H2 和介面1 。網橋B2的轉發表中沒有H1的地址,因此網橋B2會通過除接收此幀的介面1 以外的所有介面轉發這個幀。(H1本來就可以直接收到H2發送的數據幀,為什麼還要讓網橋B1和B2盲目地轉發這個幀呢??? 答案是:這兩個網橋當時並不知道網路的拓撲結構,因此要通過自學習過程才能逐步弄清所連接的網路拓撲,建立起自己的轉發表)
2,H3主機向H5主機發送數據幀。首先看網橋B1,網橋B1從其介面2收到這個數據幀。網橋B1的轉發表中沒有H3,因此在B1的轉發表中寫入地址H3 和介面2。再查找目的地址H5。現在網橋B1的轉發表中可以查詢到H5,其轉發的介面是2,和這個幀進入網橋B1的介面一樣。於是網橋B1知道,不用自己轉發這個幀,H5也能收到H3發送的幀。於是網橋B1把這個幀丟棄,不再繼續轉發了。再看網橋B2,網橋B2從其借口1 收到這個幀。網橋B2的轉發表中沒有H3,因此在B2的轉發表中寫入地址H3 和介面 1。再查找目的地址H5。現在網橋B2的轉發表中可以查詢到H5,其轉發的介面是 2 ,於是網橋B2直接將這個幀從介面2 轉發出去。
3,H6主機向H5主機發送數據幀。首先看網橋B2,網橋B2從其介面2 收到這個數據幀。網橋B2的轉發表中沒有H6,因此在B2的轉發表中寫入地址H6 和介面 2。再查找目的地址H5。現在網橋B2的轉發表中可以查詢到H5,其轉發的介面是2,和這個幀進入網橋B2的介面一樣。於是網橋B2知道,不用自己轉發這個幀,H5也能收到H6發送的幀。於是網橋B2把這個幀丟棄,不再繼續轉發了。再看網橋B1,其根本不會收到H6主機向H5發送的數據幀,所以不會有任何其他操作。
PS:在網橋的轉發表中寫入的信息除了地址和介面外,還有幀進入該網橋的時間。網橋中的介面管理軟體周期性的掃描轉發表中的項目。只要在一定時間以前登記的都要刪除。這樣就使得網橋中的轉發表能反映當前網路的最新拓撲狀態。還有一點網橋是一種工作在數據鏈路層的網路設備,它能對於接收到的數據幀進行有條件的轉發並且能隔離沖突域。
⑷ 如何在Java Jsp頁面中動態生成樹
JSP
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Destroydrop»Javascripts»Tree</title>
<linkrel="StyleSheet"href="dtree.css"mce_href="dtree.css"type="text/css"/>
<mce:scripttype="text/javascript"src="dtree.js"mce_src="dtree.js"></mce:script>
</head>
<body>
<h1><ahref="/"mce_href="">Destroydrop</a>»<ahref="/javascripts/"mce_href="javascripts/">Javascripts</a>»<ahref="/javascripts/tree/"mce_href="javascripts/tree/">Tree</a></h1>
<h2>Example</h2>
<divclass="dtree">
<p><ahref="javascript:d.openAll();"mce_href="javascript:d.openAll();">openall</a>|<ahref="javascript:d.closeAll();"mce_href="javascript:d.closeAll();">closeall</a></p>
<mce:scripttype="text/javascript"><!--
d=newdTree('d');
d.add(0,-1,'Myexampletree');
d.add(1,0,'Node1','example01.html');
d.add(2,0,'Node2','example01.html');
d.add(3,1,'Node1.1','example01.html');
d.add(4,0,'Node3','example01.html');
d.add(5,3,'Node1.1.1','example01.html');
d.add(6,5,'Node1.1.1.1','example01.html');
d.add(7,0,'Node4','example01.html');
d.add(8,1,'Node1.2','example01.html');
d.add(9,0,'MyPictures','example01.html','PicturesI/'vetakenovertheyears','','','img/imgfolder.gif');
d.add(10,9,'ThetriptoIceland','example01.html','PicturesofGullfossandGeysir');
d.add(11,9,'Mom/'sbirthday','example01.html');
d.add(12,0,'RecycleBin','example01.html','','','img/trash.gif');
document.write(d);
//--></mce:script>
</div>
<p><ahref="mailto:[email protected]"mce_href="mailto:[email protected]">©2002-2003GeirLandrö</a></p>
</body>
</html>
⑸ JAVA問題求解求速度 http://.baidu.com/question/206204688.html
功能要求:
1. 選擇一個演算法(提供選擇見下),利用各種方法(圖形、動畫等)演示演算法的演示過程。
2. 可以進行手動演示,也可以自動步進式演示。
3. 允許用戶設置演算法的各個輸入參數,以及自動步進式演示中的時間間隔。
4. 不同的演算法輸入要求見下。
界面要求:
1. 盡量使用圖形界面實現,要符合日常軟體使用規范來設計菜單和界面。
2. 如果無法實現圖形界面,則在命令行方式下也需要提供菜單,方便用戶操作。
其他要求:
1. 標識符命名遵循Windows命名規范。
2. 能夠注意各種異常處理,注重提高程序運行效率。
提交內容:
1. 全部源代碼。
2. 軟體設計和使用說明書(UML類圖;實現的功能、主要技術;使用幫助文檔)
參考演算法:
1. 最小生成樹演算法:Prim演算法、Kruskal演算法。允許以下方式輸入一個圖形:繪制圖形、輸入鄰接矩陣、輸入邊及其關聯的頂點。要求在圖形方式下進行演示演算法執行步驟。
2. 單源最短路演算法:Dijkstra演算法。允許以下方式輸入一個圖形:繪制圖形、輸入鄰接矩陣、輸入邊及其關聯的頂點。要求在圖形方式下進行演示演算法執行步驟。
3. 最優編碼演算法:Huffman編碼演算法。允許用戶輸入一段英文文字,或者打開一個txt文檔(英文內容),據此文檔內容進行編碼。要求動態列出每個字元的出現概率統計結果以及對應編碼。
4. 其他可供演示的具有一定難度的演算法,如關鍵路徑問題、有向圖的極大連通分支等。
⑹ java二叉樹家譜實現
mport java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class Randomtree extends JFrame {
private JTree tree;
public static String[] school = { "初中課程", "高中課程", "大學課程" };
public static String[] color = { "顏色", "運動", "食物" };
public static String[] plant = { "植物", "動物", "人" };
public static String[][] school2= {
{ "初中一年級", "初中二年級", "初中三年級"}, {"高中一年級", "高中二年級",
"高中三年級"}, {"大學一年級", "大學二年級", "大學三年級", "大學四年級"} };
public static String[][] color2 = {
{ "綠色", "白色", "紅色"}, {"足球", "籃球",
"羽毛球"}, {"麵包", "牛奶", "披薩", "熱狗"} };
public static String[][] plant2 = {
{ "玫瑰花", "月季花", "海棠花"}, {"豬", "狗",
"貓"}, {"黃種人", "黑種人", "白種人", } };
public static void main(String[] args) {
// TODO 自動生成方法存根
new Randomtree();
}
public Randomtree() {
super();
final Random random=new Random();
setVisible(true);
setSize(300,400);
tree = new JTree();
final JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(0, 40));
getContentPane().add(panel, BorderLayout.NORTH);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(300, 350));
getContentPane().add(scrollPane, BorderLayout.CENTER);
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int k=random.nextInt(3);
tree=getTree(k);
scrollPane.setViewportView(tree);
}
});
scrollPane.setViewportView(null);
button.setText("隨機生成樹");
panel.add(button);
pack();
}
protected JTree getTree(int n) {
String[] second=null;
String[][] three=null;
if(n==0){second=school; three=school2;}
if(n==1){second=color; three=color2;}
if(n==2){second=plant; three=plant2;}
DefaultMutableTreeNode root=new DefaultMutableTreeNode("root");
for(int i=0;i<second.length;i++){
DefaultMutableTreeNode secondNode=new DefaultMutableTreeNode(second[i]);
for (int j=0;j<three[i].length;j++){
DefaultMutableTreeNode threetNode=new DefaultMutableTreeNode(three[i][j]);
secondNode.add(threetNode);
}
root.add(secondNode);
}
JTree tree=new JTree(root);
tree.expandRow(1);
tree.expandRow(5);
tree.expandRow(9);
return tree;
}
}
簡單的 例子你可以模仿一下
⑺ 什麼是生成樹協議是怎麼樣實現生成樹協議的。
生成樹協議——STP
STP(Spanning Treep Protocol)能夠提供路徑冗餘,使用STP可以使兩個終端中只有一條有效路徑。STP在大的網路中定義了一個樹,並且迫使一定的備份路徑處於備用狀態。如果生成樹中的網路一部分不可達,或者STP值變化了,生成樹演算法會重新計算生成樹拓撲,並且通過啟動備份路徑來重新建立連接。STP操作對於終端來說是透明的,而不管終端連在LAN的某一部分或者多個部分。當創建網路時,網路中所有節點存在多條路徑。生成樹中的演算法計算出最佳路徑。因為每個VLAN是一個邏輯LAN部分,所以網管員能使STP一次工作在最多64個VLAN中。如果要配置超過64個VLAN,網管員需要將其他VLAN的STP禁止,因為默認的STP可以支持1-64個VLAN。
⑻ java 最小生成樹
publicclassAbstractGraph<V>
{
publicAbstractGraph(List<?extendsEdge>edges,List<V>vertices)
{
}
publicstaticclassEdge
{
}
}
<Float>
{
publicWeightedGraph(List<WeightedEdge>edges,List<Float>vertices)
{
super(edges,vertices);
}
{
}
}
試試這種?