阶段0,划分96比特为6个段,读取其中定义的信息,为每个段的所以可能值计算预处理向量值pvv(n,m)1<=n<=6,1<=m<=65535,m为预处理向量表中的序号,形成6张预处理向量表,然后根据预处理向量值,分别为6张预处理向量表的向量进行分类,每个类赋予等价类编号eqlD(j,k),1<=j<6,为索引表的序号;1<=k<=65536,k为索引表中表项的序号,形成6张索引表,并将6张索引表存储在可并行读取的内存空间中,阶段0将大小为2的96次的空间压缩为6*2的16次,形成6张预处理向量表和6张索引表.
阶段1,将阶段0中的6张预处理向量表按三三组合,生成阶段1中的两个预处理向量表,在根据这两个预处理向量表计算出两个索引表,并存储在可并行读取的内存空间.
阶段2,根据阶段1的两个预处理向量表生成一张阶段2的预处理向量表,并根据它生成一长索引表,存入内存.它可以直接映射成处理规则的索引号,指向具体的处理规则.
搜索过程:
对每个到来的数据包,提取其头部的关键域,并分成6段,记为V(i),分4步搜索到相应的规则/
(1)以并行访问内存的方式,取出6个eqlD(i,V(i)),i从1到6,
(2)以并行访问内存的方式,取出2个eqlD(7,j)和eqlD(8,k),其中j=eqlD(1,V(1))*D(2)+D(3)+eqlD(2,V(2))+D(3)+eqlD(3,V(3)),k=eqlD(4,V(4))*D(5)+D(6)+eqlD(5,V(5))+D(6)+eqlD(6,V(6));
(3)取出eqlD(9,y),即为规则的序号,其中y=eqlD(7,V(7))*D(8)+eqlD(8,V(k));
(4)通过规则序号eqlD(9,y)读取规则的处理意见
9 个解决方案
#1
象是作业内的东东,而且也搞不懂,好复杂哩
#2
帮楼主顶!关注!
#3
没做过,大概也算麻烦的了!!
#4
学习中……
帮你顶
帮你顶
#5
这是一些链表的问题,自己看书,自己动手解决
#6
这是一些链表的问题,自己看书,自己动手解决
#7
#8
能不能帮我找一些类似的资料啊,以前学过一点C++,现在自学Visual C++,很难啊
#9
跟我们老师要了详细的算法,可是不知道如何下手
其中三个阶段的算法具体实现如下:
算法1:阶段0中的预处理向量表和索引表的计算:
(1) 初始化:为阶段0中的预处理向量表分配65535个表项,每个表项为一个N比特二进制数;为阶段0的索引表分配65535个表项,每个表项为一个2字节整数;将等价类记数器CC初始化为0;
(2) 对n从0~65535进行步骤(3)(4)
(3) 计算预处理向量,记为pvv(f,n)。设pvv(f,n)=0,然后对规则的第f段进行扫描,若其值m=n(或m为*即通配符或any),则将pvv(f,n)的第I(I为规则的序号)位比特值设为1。直至扫描结束。
(4) 计算索引值,记为eqlD(f,n)。检查这一预处理向量是否出现过,若出现过,记为pvv(f,p)(p〈=n〉,则设eqlD(f,n)= eqlD(f,p),否则设eqlD(f,n)=CC,同时CC加1;
(5) 保存CC的值为D(f),作为第f张表的等价类个数。
算法2 阶段1的第h(7~8)预处理向量表和索引表的计算
(1) 初始化:为阶段1的预处理向量表分配D(1)* D(2)* D(3)(或D(4)* D(5)* D(6))个表项,每个表项为一个N比特二进制数;为阶段1的索引表分配D(1)* D(2)* D(3)(或D(4)* D(5)* D(6))个表项,每个表项为一个2字节整数;将等价类记数器CC初始化为0;
(2) 对r从0~D(1)—1(或D(4)—1),进行步骤(3)~(7)
(3) 对s从0~D(2)—1(或D(5)—1),进行步骤(4)~(7)
(4) 对t从0~D(3)—1(或D(6)—1),进行步骤(5)~(7)
(5) 取出阶段0中6张索引表中的符合条件的表项序号,记a,b,c为第1,2,3(或4,5,6)张表的表项序号变数,则条件eqlD(1,a)=r(eqlD(4,a)=r)、eqlD(2,b)=s(或eqlD(5,b)=s)、eqlD(3,c)=t(或eqlD(6,c)=t)。然后从预处理向量表取出向量pvv(1,a)(或pvv(4,a))、pvv(2,b) (或pvv(5,b)),pvv(3,c) (或pvv(6,c));
(6) 计算预处理向量,记为pvv(h,v),则pvv(7,v)= pvv(1,a)& pvv(2,b) & pvv(3,c)(或pvv(8,v)= pvv(4,a)& pvv(5,b) & pvv(6,c)),其中v=r* D(2)* D(3)+s* D(3)+t(或v=r* D(5)* D(6)+s* D(6)+t);
(7) 计算索引值,记为eqlD(h,v),检查这一预处理向量是否出现过,若出现过,记为pvv(h,p)(7〈=h〈=8,p〈=v〉,则设eqlD(h,v)= eqlD(h,p),否则设eqlD(h,v)=CC,同时CC加1;
(8) 保存CC的值为D(h),作为第h张表的等价类个数
算法3阶段2中的预处理向量表和索引表的计算
(1) 初始化:为阶段2的预处理向量表分配D(7)* D(8)个表项,每个表项为一个N比特二进制数;为阶段2的索引表分配D(7)* D(8)个表项,每个表项为一个2字节整数
(2) 对r从0~D(7)—1,进行步骤(3)~(5)
(3) 对s从0~D(8)—1,进行步骤(4)~(5)
(4) 取出阶段1中7,8两张索引表中符合条件的表项序号,记a,b为7,8两张表的表项序号变量,则条件是eqlD(7,a)=r,eqlD(8,b)=是。然后从预处理向量表中取出向量pvv(7,a)和pvv(8,b)
(5) 计算预处理向量,记为pvv(9,v),自左至右检查向量值的比特位,找出最先置1的位,比特位序号记为k,则pvv(9,v)=k
其中三个阶段的算法具体实现如下:
算法1:阶段0中的预处理向量表和索引表的计算:
(1) 初始化:为阶段0中的预处理向量表分配65535个表项,每个表项为一个N比特二进制数;为阶段0的索引表分配65535个表项,每个表项为一个2字节整数;将等价类记数器CC初始化为0;
(2) 对n从0~65535进行步骤(3)(4)
(3) 计算预处理向量,记为pvv(f,n)。设pvv(f,n)=0,然后对规则的第f段进行扫描,若其值m=n(或m为*即通配符或any),则将pvv(f,n)的第I(I为规则的序号)位比特值设为1。直至扫描结束。
(4) 计算索引值,记为eqlD(f,n)。检查这一预处理向量是否出现过,若出现过,记为pvv(f,p)(p〈=n〉,则设eqlD(f,n)= eqlD(f,p),否则设eqlD(f,n)=CC,同时CC加1;
(5) 保存CC的值为D(f),作为第f张表的等价类个数。
算法2 阶段1的第h(7~8)预处理向量表和索引表的计算
(1) 初始化:为阶段1的预处理向量表分配D(1)* D(2)* D(3)(或D(4)* D(5)* D(6))个表项,每个表项为一个N比特二进制数;为阶段1的索引表分配D(1)* D(2)* D(3)(或D(4)* D(5)* D(6))个表项,每个表项为一个2字节整数;将等价类记数器CC初始化为0;
(2) 对r从0~D(1)—1(或D(4)—1),进行步骤(3)~(7)
(3) 对s从0~D(2)—1(或D(5)—1),进行步骤(4)~(7)
(4) 对t从0~D(3)—1(或D(6)—1),进行步骤(5)~(7)
(5) 取出阶段0中6张索引表中的符合条件的表项序号,记a,b,c为第1,2,3(或4,5,6)张表的表项序号变数,则条件eqlD(1,a)=r(eqlD(4,a)=r)、eqlD(2,b)=s(或eqlD(5,b)=s)、eqlD(3,c)=t(或eqlD(6,c)=t)。然后从预处理向量表取出向量pvv(1,a)(或pvv(4,a))、pvv(2,b) (或pvv(5,b)),pvv(3,c) (或pvv(6,c));
(6) 计算预处理向量,记为pvv(h,v),则pvv(7,v)= pvv(1,a)& pvv(2,b) & pvv(3,c)(或pvv(8,v)= pvv(4,a)& pvv(5,b) & pvv(6,c)),其中v=r* D(2)* D(3)+s* D(3)+t(或v=r* D(5)* D(6)+s* D(6)+t);
(7) 计算索引值,记为eqlD(h,v),检查这一预处理向量是否出现过,若出现过,记为pvv(h,p)(7〈=h〈=8,p〈=v〉,则设eqlD(h,v)= eqlD(h,p),否则设eqlD(h,v)=CC,同时CC加1;
(8) 保存CC的值为D(h),作为第h张表的等价类个数
算法3阶段2中的预处理向量表和索引表的计算
(1) 初始化:为阶段2的预处理向量表分配D(7)* D(8)个表项,每个表项为一个N比特二进制数;为阶段2的索引表分配D(7)* D(8)个表项,每个表项为一个2字节整数
(2) 对r从0~D(7)—1,进行步骤(3)~(5)
(3) 对s从0~D(8)—1,进行步骤(4)~(5)
(4) 取出阶段1中7,8两张索引表中符合条件的表项序号,记a,b为7,8两张表的表项序号变量,则条件是eqlD(7,a)=r,eqlD(8,b)=是。然后从预处理向量表中取出向量pvv(7,a)和pvv(8,b)
(5) 计算预处理向量,记为pvv(9,v),自左至右检查向量值的比特位,找出最先置1的位,比特位序号记为k,则pvv(9,v)=k
#1
象是作业内的东东,而且也搞不懂,好复杂哩
#2
帮楼主顶!关注!
#3
没做过,大概也算麻烦的了!!
#4
学习中……
帮你顶
帮你顶
#5
这是一些链表的问题,自己看书,自己动手解决
#6
这是一些链表的问题,自己看书,自己动手解决
#7
#8
能不能帮我找一些类似的资料啊,以前学过一点C++,现在自学Visual C++,很难啊
#9
跟我们老师要了详细的算法,可是不知道如何下手
其中三个阶段的算法具体实现如下:
算法1:阶段0中的预处理向量表和索引表的计算:
(1) 初始化:为阶段0中的预处理向量表分配65535个表项,每个表项为一个N比特二进制数;为阶段0的索引表分配65535个表项,每个表项为一个2字节整数;将等价类记数器CC初始化为0;
(2) 对n从0~65535进行步骤(3)(4)
(3) 计算预处理向量,记为pvv(f,n)。设pvv(f,n)=0,然后对规则的第f段进行扫描,若其值m=n(或m为*即通配符或any),则将pvv(f,n)的第I(I为规则的序号)位比特值设为1。直至扫描结束。
(4) 计算索引值,记为eqlD(f,n)。检查这一预处理向量是否出现过,若出现过,记为pvv(f,p)(p〈=n〉,则设eqlD(f,n)= eqlD(f,p),否则设eqlD(f,n)=CC,同时CC加1;
(5) 保存CC的值为D(f),作为第f张表的等价类个数。
算法2 阶段1的第h(7~8)预处理向量表和索引表的计算
(1) 初始化:为阶段1的预处理向量表分配D(1)* D(2)* D(3)(或D(4)* D(5)* D(6))个表项,每个表项为一个N比特二进制数;为阶段1的索引表分配D(1)* D(2)* D(3)(或D(4)* D(5)* D(6))个表项,每个表项为一个2字节整数;将等价类记数器CC初始化为0;
(2) 对r从0~D(1)—1(或D(4)—1),进行步骤(3)~(7)
(3) 对s从0~D(2)—1(或D(5)—1),进行步骤(4)~(7)
(4) 对t从0~D(3)—1(或D(6)—1),进行步骤(5)~(7)
(5) 取出阶段0中6张索引表中的符合条件的表项序号,记a,b,c为第1,2,3(或4,5,6)张表的表项序号变数,则条件eqlD(1,a)=r(eqlD(4,a)=r)、eqlD(2,b)=s(或eqlD(5,b)=s)、eqlD(3,c)=t(或eqlD(6,c)=t)。然后从预处理向量表取出向量pvv(1,a)(或pvv(4,a))、pvv(2,b) (或pvv(5,b)),pvv(3,c) (或pvv(6,c));
(6) 计算预处理向量,记为pvv(h,v),则pvv(7,v)= pvv(1,a)& pvv(2,b) & pvv(3,c)(或pvv(8,v)= pvv(4,a)& pvv(5,b) & pvv(6,c)),其中v=r* D(2)* D(3)+s* D(3)+t(或v=r* D(5)* D(6)+s* D(6)+t);
(7) 计算索引值,记为eqlD(h,v),检查这一预处理向量是否出现过,若出现过,记为pvv(h,p)(7〈=h〈=8,p〈=v〉,则设eqlD(h,v)= eqlD(h,p),否则设eqlD(h,v)=CC,同时CC加1;
(8) 保存CC的值为D(h),作为第h张表的等价类个数
算法3阶段2中的预处理向量表和索引表的计算
(1) 初始化:为阶段2的预处理向量表分配D(7)* D(8)个表项,每个表项为一个N比特二进制数;为阶段2的索引表分配D(7)* D(8)个表项,每个表项为一个2字节整数
(2) 对r从0~D(7)—1,进行步骤(3)~(5)
(3) 对s从0~D(8)—1,进行步骤(4)~(5)
(4) 取出阶段1中7,8两张索引表中符合条件的表项序号,记a,b为7,8两张表的表项序号变量,则条件是eqlD(7,a)=r,eqlD(8,b)=是。然后从预处理向量表中取出向量pvv(7,a)和pvv(8,b)
(5) 计算预处理向量,记为pvv(9,v),自左至右检查向量值的比特位,找出最先置1的位,比特位序号记为k,则pvv(9,v)=k
其中三个阶段的算法具体实现如下:
算法1:阶段0中的预处理向量表和索引表的计算:
(1) 初始化:为阶段0中的预处理向量表分配65535个表项,每个表项为一个N比特二进制数;为阶段0的索引表分配65535个表项,每个表项为一个2字节整数;将等价类记数器CC初始化为0;
(2) 对n从0~65535进行步骤(3)(4)
(3) 计算预处理向量,记为pvv(f,n)。设pvv(f,n)=0,然后对规则的第f段进行扫描,若其值m=n(或m为*即通配符或any),则将pvv(f,n)的第I(I为规则的序号)位比特值设为1。直至扫描结束。
(4) 计算索引值,记为eqlD(f,n)。检查这一预处理向量是否出现过,若出现过,记为pvv(f,p)(p〈=n〉,则设eqlD(f,n)= eqlD(f,p),否则设eqlD(f,n)=CC,同时CC加1;
(5) 保存CC的值为D(f),作为第f张表的等价类个数。
算法2 阶段1的第h(7~8)预处理向量表和索引表的计算
(1) 初始化:为阶段1的预处理向量表分配D(1)* D(2)* D(3)(或D(4)* D(5)* D(6))个表项,每个表项为一个N比特二进制数;为阶段1的索引表分配D(1)* D(2)* D(3)(或D(4)* D(5)* D(6))个表项,每个表项为一个2字节整数;将等价类记数器CC初始化为0;
(2) 对r从0~D(1)—1(或D(4)—1),进行步骤(3)~(7)
(3) 对s从0~D(2)—1(或D(5)—1),进行步骤(4)~(7)
(4) 对t从0~D(3)—1(或D(6)—1),进行步骤(5)~(7)
(5) 取出阶段0中6张索引表中的符合条件的表项序号,记a,b,c为第1,2,3(或4,5,6)张表的表项序号变数,则条件eqlD(1,a)=r(eqlD(4,a)=r)、eqlD(2,b)=s(或eqlD(5,b)=s)、eqlD(3,c)=t(或eqlD(6,c)=t)。然后从预处理向量表取出向量pvv(1,a)(或pvv(4,a))、pvv(2,b) (或pvv(5,b)),pvv(3,c) (或pvv(6,c));
(6) 计算预处理向量,记为pvv(h,v),则pvv(7,v)= pvv(1,a)& pvv(2,b) & pvv(3,c)(或pvv(8,v)= pvv(4,a)& pvv(5,b) & pvv(6,c)),其中v=r* D(2)* D(3)+s* D(3)+t(或v=r* D(5)* D(6)+s* D(6)+t);
(7) 计算索引值,记为eqlD(h,v),检查这一预处理向量是否出现过,若出现过,记为pvv(h,p)(7〈=h〈=8,p〈=v〉,则设eqlD(h,v)= eqlD(h,p),否则设eqlD(h,v)=CC,同时CC加1;
(8) 保存CC的值为D(h),作为第h张表的等价类个数
算法3阶段2中的预处理向量表和索引表的计算
(1) 初始化:为阶段2的预处理向量表分配D(7)* D(8)个表项,每个表项为一个N比特二进制数;为阶段2的索引表分配D(7)* D(8)个表项,每个表项为一个2字节整数
(2) 对r从0~D(7)—1,进行步骤(3)~(5)
(3) 对s从0~D(8)—1,进行步骤(4)~(5)
(4) 取出阶段1中7,8两张索引表中符合条件的表项序号,记a,b为7,8两张表的表项序号变量,则条件是eqlD(7,a)=r,eqlD(8,b)=是。然后从预处理向量表中取出向量pvv(7,a)和pvv(8,b)
(5) 计算预处理向量,记为pvv(9,v),自左至右检查向量值的比特位,找出最先置1的位,比特位序号记为k,则pvv(9,v)=k