分層演算法實例
1. 小波分層自適應演算法的matlab程序
謝邀,不會。
建議去matlab論壇下載,或者自行google網路(code: matlab 小波???)
2. 分層抽樣的計算公式是什麼
p=Cm(t0-t)。
分層抽樣樣本量的計算公式:p=Cm(t0-t)。分層抽樣法也叫類型抽樣法。它是從一個可以分成不同子總體(或稱為層)的總體中,按規定的比例從不同層中隨機抽取樣品(個體)的方法。
1、首先,辯明突出的(重要的)人口統計特徵和分類特徵,這些特徵與所研究的行為相關。例如,研究某種產品的消費率時,按常理認為男性和女性有不同的平均消費比率。
2、為了把性別作為有意義的分層標志,調查者肯定能夠拿出資料證明男性與女性的消費水平明顯不同。用這種方式可識別出各種不同的顯著特徵。調查表明,一般來說,識別出6個重要的顯著特徵後,再增加顯著特徵的辨別對於提高樣本代表性就沒有多大幫助了。
3、確定在每個層次上總體的比例(如性別已被確定為一個顯著的特徵,那麼總體中男性佔多少比例,女性佔多少比例呢?)。利用這個比例,可計算出樣本中每組(層)應調查的人數。
最後,調查者必須從每層中抽取獨立簡單隨機樣本。
例如:
某校高中生一年級250人,二年級350人,三年級400人,分層抽樣抽取200人,如何抽取?
總人數250+350+400=1000。
200÷1000=0.2。
一年級250×0.2=50。
二年級350×0.2=70。
三年級400×0.2=80。
3. 網路分層的原理
網路分層
網路分層就是將網路節點所要完成的數據的發送或轉發、打包或拆包,控制信息的載入或拆出等工作,分別由不同的硬體和軟體模塊去完成。這樣可以將往來通信和網路互連這一復雜的問題變得較為簡單。
[編輯本段]網路層次的劃分
ISO提出的OSI(Open System Interconnection)模型將網路分為七層,即物理層( Phisical )、數據鏈路層(Data Link)、網路層(Network)、傳輸層(Transport)、會話層(Session)、表示層(Presentation)和應用層(Application)。
1. 物理層(Physical layer)是參考模型的最低層。該層是網路通信的數據傳輸介質,由連接不同結點的電纜與設備共同構成。主要功能是:利用傳輸介質為數據鏈路層提供物理連接,負責處理數據傳輸並監控數據出錯率,以便數據流的透明傳輸。
2. 數據鏈路層(Data link layer)是參考模型的第2層。 主要功能是:在物理層提供的服務基礎上,在通信的實體間建立數據鏈路連接,傳輸以「幀」為單位的數據包,並採用差錯控制與流量控制方法,使有差錯的物理線路變成無差錯的數據鏈路。
3. 網路層(Network layer)是參考模型的第3層。主要功能是:為數據在結點之間傳輸創建邏輯鏈路,通過路由選擇演算法為分組通過通信子網選擇最適當的路徑,以及實現擁塞控制、網路互聯等功能。
4. 傳輸層(Transport layer)是參考模型的第4層。主要功能是向用戶提供可靠的端到端(End-to-End)服務,處理數據包錯誤、數據包次序,以及其他一些關鍵傳輸問題。傳輸層向高層屏蔽了下層數據通信的細節,因此,它是計算機通信體系結構中關鍵的一層。
5. 會話層(Session layer)是參考模型的第5層。主要功能是:負責維擴兩個結點之間的傳輸鏈接,以便確保點到點傳輸不中斷,以及管理數據交換等功能。
6. 表示層(Presentation layer)是參考模型的第6層。主要功能是:用於處理在兩個通信系統中交換信息的表示方式,主要包括數據格式變換、數據加密與解密、數據壓縮與恢復等功能。
7. 應用層(Application layer)是參考模型的最高層。主要功能是:為應用軟體提供了很多服務,例如文件伺服器、資料庫服務、電子郵件與其他網路軟體服務。
[編輯本段]對網路分層的理解
許多所謂的網路課程都是從教你記住OSI模型中的每一個層的名字和這個模型中包含的每一個協議開始的。這樣做是不必要的。甚至第5層和第6層是完全可以忽略的。
國際標准組織(ISO)制定了OSI模型。這個模型把網路通信的工作分為7層。1至4層被認為是低層,這些層與數據移動密切相關。5至7層是高層,包含應用程序級的數據。每一層負責一項具體的工作,然後把數據傳送到下一層。
物理層(也即OSI模型中的第一層)在課堂上經常是被忽略的。它看起來似乎很簡單。但是,這一層的某些方面有時需要特別留意。物理層實際上就是布線、光纖、網卡和其它用來把兩台網路通信設備連接在一起的東西。甚至一個信鴿也可以被認為是一個1層設備(參見RFC 1149)。網路故障的排除經常涉及到1層問題。我們不能忘記用五類線在整個一層樓進行連接的傳奇故事。由於辦公室的椅子經常從電纜線上壓過,導致網路連接出現斷斷續續的情況。遺憾的是,這種故障是很常見的,而且排除這種故障需要耗費很長時間。
第2層是乙太網等協議。請記住,我們要使這個問題簡單一些。第2層中最重要的是你 應該理解網橋是什麼。交換機可以看成網橋,人們現在都這樣稱呼它。網橋都在2層工作,僅關注乙太網上的MAC地址。如果你在談論有關MAC地址、交換機或者網卡和驅動程序,你就是在第2層的范疇。集線器屬於第1層的領域,因為它們只是電子設備,沒有2層的知識。第2層的相關問題在本網路講座中有自己的一部分,因此現在先不詳細討論這個問題的細節。現在只需要知道第2層把數據幀轉換成二進制位供1層處理就可以了。在往下講之間,你應該回過頭來重新閱讀一下上面的內容,因為經驗不足的網路管理員經常混淆2層和3層的區別。
如果你在談論一個IP地址,那麼你是在處理第3層的問題,這是「數據包」問題,而不是第2層的「幀」。IP是第3層問題的一部分,此外還有一些路由協議和地址解析協議(ARP)。有關路由的一切事情都在第3層處理。地址解析和路由是3層的重要目的。
第4層是處理信息的傳輸層。第4層的數據單元也稱作數據包(packets)。但是,當你談論TCP等具體的協議時又有特殊的叫法,TCP的數據單元稱為「段(segments)」而UDP的數據單元稱為「數據報(datagrams)」。這個層負責獲取全部信息,因此,它必須跟蹤數據單元碎片、亂序到達的數據包和其它在傳輸過程中可能發生的危險。理解第4層的另一種方法是,第4層提供端對端的通信管理。像TCP等一些協議非常善於保證通信的可靠性。有些協議並不在乎一些數據包是否丟失,UDP協議就是一個主要例子。
現在快要到7層了,我們很想知道第5層和第6層有些什麼功能。可以說,它們都是沒有用的。有一些應用程序和協議在5層和6層。但是,對於理解網路問題來說,談論這些問題沒有任何益處。請大家注意,第7層是「一切」。7層稱作「應用層」,是專門用於應用程序的。如果你的程序需要一種具體格式的數據,你可以發明一些你希望能夠把數據發送到目的地的格式,並且創建一個第7層協議。 SMTP、DNS和FTP都是7層協議。學習OSI模型中最重要的事情是它實際代表什麼意思。
假設你是一個網路上的操作系統。在1層和2層工作的網卡將通知你什麼時候有數據到達。驅動程序處理2層幀的出口,通過它你可以得到一個發亮和閃光的3層數據包(希望是如此)。作為操作系統,你將調用一些常用的應用程序處理3層數據。如果這個數據是從下面發上來的,你知道那是發給你的數據包,或者那是一個廣播數據包(除非你同時也是一個路由器,不過,暫時不用擔心這個問題)。如果你決定保留這個數據包,你將打開它,並且取出4層數據包。如果它是TCP協議,這個TCP子系統將被調用並打開這個數據包,然後把這個7層數據發送給在目標埠等待的應用程序。這個過程就結束了。當要對網路上的其它計算機做出回應的時候,每一件事情都以相反的順序發生。7層應用程序將把數據發送給TCP協議的執行者。然後,TCP協議在這些數據中加入額外的文件頭。在這個方向上,數據每前進一步體積都要大一些。TCP協議在IP協議中加入一個合法的TCP欄位。然後,IP協議把這個數據包交給乙太網。乙太網再把這個數據作為一個乙太網幀發送給驅動程序。然後,這個數據通過了這個網路。這條線路中的路由器將部分地分解這個數據包以獲得3層文件頭,以便確定這個數據包應該發送到哪裡。如果這個數據包的目的地是本地乙太網子網,這個操作系統將代替路由器為計算機進行地址解析,並且把數據直接發送給主機。這個過程確實簡化了。但是,如果你能夠按照這個進程來做,並且理解數據包在每一個階段都會發生什麼事情,你就征服了理解網路的相當大的一部分問題。當你開始討論每一個協議實際上做什麼的時候,一切都會變得非常復雜。如果你剛剛開始學習,在你理解復雜的事情在設法完成什麼任務之前,請你先忽略這些復雜的事情。這樣會提高你的學習熱情。
小結
1. 與其苦鑽OSI模型中的各協議不如好好理解路由器和主機如何利用網路棧傳輸數據
2. 2層數據稱作幀,不包含IP地址。IP地址和數據包在3層,MAC地址在2層。
3. 除非你是一台路由器,通過網路棧向上發來的數據是給你的,通過網路棧向下發送的數據是你發送的
4. 用c或者c++編程實現k-means cluster和分層聚類演算法
郵箱
5. 哪位有leach 改進的演算法,並且使用ns2 模擬的,最好有實例,可以學習一下
請參考如下網址,這個網頁上有一個到PDF格式文檔的鏈接,寫的還行。模擬環境是以NS2為平台,符合你的要求。
http://zk.shejis.com/zklw/200809/article_5881.html
----------------------------------------------------------------------------------
LEACH()是一種經典的WSN路由協議,得到了廣泛的認可。本文基於LEACH演算法提出了一個新的路由協議,綜合考慮候選節點的剩餘能量和簇首節點的分布位置以及簇首節點的個數,從而有效地降低了低能量與位置不佳的節點被選為簇首的可能性,進一步保證了網路節點能量負載的平衡性。模擬結果表明,該演算法能有效的平衡節點的能量消耗分布,延長節點與網路的壽命。
關鍵字:無線感測器網路 LEACH 協議 能量有效性 負載平衡
1.引言
無線感測器網路是由大量無處不在的、具有無線通信與計算能力的微小感測器節點構成的自組織(Ad-hoc)分布式網路系統,是能根據環境自主完成指定任務的「智能」系統。它以「數據為中心」,具有有限的計算能力、有限的存儲能力、有限的無線通信能力和有限的電源供應能力,如何在這樣有限的資源環境下獲取盡可能多的、有效的感知對象的特徵信息,並傳輸到用戶節點進行處理,是目前研究的重點問題,這些問題都可以歸結為感測器網路的路由問題,即要有一個好的路由協議以盡量降低能耗、延長網路生存時間。
無線感測器網路的路由協議可以分成平面路由協議和分層路由協議兩種。由於平面路由協議需要維持較大的路由表,占據較多的存儲空間,因而並不適合在大規模網路中採用分層路由演算法可以在一定程度上解決這個問題。LEACH演算法是比較成熟經典且常用具有代表性的分層路由演算法。因此本文主要研究LEACH演算法,並針對其不足進行了改進。
2.LEACH路由演算法
2.1演算法描述
LEACH是MIT的Chandrakasan等人為無線感測網設計的低功耗自適應分層路由演算法。它的基本思想是以循環的方式隨機選擇簇首節點,將整個網路的能量負載平均分配到每個感測器節點中,從而達到降低網路能源消耗、提高網路整體生存時間的目的。LEACH在運行過程中不斷地循環執行簇的重構過程。每個簇重構過程可以用「輪(round)」的概念來描述。每個輪可以分成兩個階段:簇的建立階段和傳輸數據的穩定階段。為了節省資源開銷,穩定階段的持續時間要大於建立階段的持續時間。
簇首節點的選擇依據網路中所需要的簇首節點總數和迄今為止每個節點已成為簇首的次數來決定。具體的選擇辦法是:每個感測器節點選擇0—1之間的一個值,如果選定的值小於某個閾值T(n),那麼這個節點成為簇首節點。閾值T(n)計算如下:
......(略,請見PDF文檔附件)
附件:
http://www1.shejis.com/uploadfile/zk/uploadfile/200809/20080909112812124.rar)
6. 二叉樹的層次遍歷演算法
二叉樹的層次遍歷演算法有如下三種方法:
給定一棵二叉樹,要求進行分層遍歷,每層的節點值單獨列印一行,下圖給出事例結構:
之後大家就可以自己畫圖了,下面給出程序代碼:
[cpp] view plain
void print_by_level_3(Tree T) {
vector<tree_node_t*> vec;
vec.push_back(T);
int cur = 0;
int end = 1;
while (cur < vec.size()) {
end = vec.size();
while (cur < end) {
cout << vec[cur]->data << " ";
if (vec[cur]->lchild)
vec.push_back(vec[cur]->lchild);
if (vec[cur]->rchild)
vec.push_back(vec[cur]->rchild);
cur++;
}
cout << endl;
}
}
最後給出完成代碼的測試用例:124##57##8##3#6##
[cpp] view plain
#include<iostream>
#include<vector>
#include<deque>
using namespace std;
typedef struct tree_node_s {
char data;
struct tree_node_s *lchild;
struct tree_node_s *rchild;
}tree_node_t, *Tree;
void create_tree(Tree *T) {
char c = getchar();
if (c == '#') {
*T = NULL;
} else {
*T = (tree_node_t*)malloc(sizeof(tree_node_t));
(*T)->data = c;
create_tree(&(*T)->lchild);
create_tree(&(*T)->rchild);
}
}
void print_tree(Tree T) {
if (T) {
cout << T->data << " ";
print_tree(T->lchild);
print_tree(T->rchild);
}
}
int print_at_level(Tree T, int level) {
if (!T || level < 0)
return 0;
if (0 == level) {
cout << T->data << " ";
return 1;
}
return print_at_level(T->lchild, level - 1) + print_at_level(T->rchild, level - 1);
}
void print_by_level_1(Tree T) {
int i = 0;
for (i = 0; ; i++) {
if (!print_at_level(T, i))
break;
}
cout << endl;
}
void print_by_level_2(Tree T) {
deque<tree_node_t*> q_first, q_second;
q_first.push_back(T);
while(!q_first.empty()) {
while (!q_first.empty()) {
tree_node_t *temp = q_first.front();
q_first.pop_front();
cout << temp->data << " ";
if (temp->lchild)
q_second.push_back(temp->lchild);
if (temp->rchild)
q_second.push_back(temp->rchild);
}
cout << endl;
q_first.swap(q_second);
}
}
void print_by_level_3(Tree T) {
vector<tree_node_t*> vec;
vec.push_back(T);
int cur = 0;
int end = 1;
while (cur < vec.size()) {
end = vec.size();
while (cur < end) {
cout << vec[cur]->data << " ";
if (vec[cur]->lchild)
vec.push_back(vec[cur]->lchild);
if (vec[cur]->rchild)
vec.push_back(vec[cur]->rchild);
cur++;
}
cout << endl;
}
}
int main(int argc, char *argv[]) {
Tree T = NULL;
create_tree(&T);
print_tree(T);
cout << endl;
print_by_level_3(T);
cin.get();
cin.get();
return 0;
}
7. 二叉樹的分層遍歷的演算法流程是什麼
首先將根結點入隊列
若隊列不為空則進行出隊操作,否則遍歷結束
將出隊的對頭結點的左結點和右結點入隊列
按照需要輸出對頭結點的數據
返回到2繼續執行
流程圖就不畫了,我這邊不方便畫圖,有上面的步驟實際上流程圖已經很清晰了,大致如下:
[開始]
[根節點入隊]
-----------------><隊列空?> --是-->[結束]
| 否
|[出隊]
| [出隊結點的左右子結點入隊]
| [處理或輸出出隊結點的數據]
-----------------------|