分层算法实例
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继续执行
流程图就不画了,我这边不方便画图,有上面的步骤实际上流程图已经很清晰了,大致如下:
[开始]
[根节点入队]
-----------------><队列空?> --是-->[结束]
| 否
|[出队]
| [出队结点的左右子结点入队]
| [处理或输出出队结点的数据]
-----------------------|