主题:小弟求助算法源代码
算法4.3:transactionExtends(index,event)
//输入:index 为保存序列片段位置信息的一维数组; (event)为要增加的事务。
//输出:tindex 保存经事务扩展后对应事件序列的支持事件序列片段位置信息。
1)初始化一维数组tindex为空;
2)如果index不为空,转4);
3)从索引表indexList中分别提取出event在序列编号为Id中的位置信息位图Map,如果Map中有不为0的位n,则分别将序列片段位置信息三元组(Id,n,n)加入到tindex中,返回tindex;
4)从index中取出第一个序列片段位置信息三元组至S;
5)从S中取得序列编号Id,开始位置start和最后位置end;
6)构造位图Map1,使Map1的第end+1位以前的位为0,其它位都为1;
7)从indexList中取得event在序列编号为Id中的位置信息位图Map2;
8)Map1和Map2做与运算,得到的结果为Map,如果Map不为0,设Map中不为0的位为n,则将序列片段位置信息三元组(Id,start,n)加入到tindex中;
9)取出下一个序列片段位置信息三元组至S,如果S不为空,转5),否则返回tindex;
4.3.3 支持度的计算
由行为模式挖掘支持度的定义知道,序列片段必须满足挖掘标准并且序列片段要紧支持事件序列。故先将不满足挖掘标准的序列片段位置信息删除,然后统计紧支持的序列片段个数即用户行为模式挖掘的支持度。相关算法如下
算法4.4:delete(index,size)
/*输入:index为保存序列片段位置信息的一维数组;挖掘标准 为:size+ maxError 序列片段的长度,为全局变量。 输出:index */
1)number=size;
2)从index中取出第一个序列片段位置信息至Infor;
3)从Infor中取到序列片段的开始位置start和结束位置end,如果number+maxError end-start+1,转4),否则将Infor从index中删除;
4)取出下一个序列片段位置信息至Infor,如果Infor不为空,转3),否则返回;
算法4.5:audict(index)
//输入:index为保存序列片段位置信息的一维数组。
//输出:number 支持度大小。
1)number=0,i=1;
2)取出index中的第i个序列片段位置信息的序列编号Id1,开始位置start1和结束位置end1;
3)j=1;
4)取出index中第j个序列片段位置信息的序列编号Id2,开始位置start2和结束位置end2;
5)如果Id1等于Id2且start1小于或等于start2且end1大于或等于end2,则转8);
6)j=j+1,如果j小于或等于index的大小,转4);
7)number++;
8)i=i+1,如果i小于或等于index的大小,转2);
9)返回number;
算法4.5的时间复杂度为: O(number(index)*number(index))。
//输入:index 为保存序列片段位置信息的一维数组; (event)为要增加的事务。
//输出:tindex 保存经事务扩展后对应事件序列的支持事件序列片段位置信息。
1)初始化一维数组tindex为空;
2)如果index不为空,转4);
3)从索引表indexList中分别提取出event在序列编号为Id中的位置信息位图Map,如果Map中有不为0的位n,则分别将序列片段位置信息三元组(Id,n,n)加入到tindex中,返回tindex;
4)从index中取出第一个序列片段位置信息三元组至S;
5)从S中取得序列编号Id,开始位置start和最后位置end;
6)构造位图Map1,使Map1的第end+1位以前的位为0,其它位都为1;
7)从indexList中取得event在序列编号为Id中的位置信息位图Map2;
8)Map1和Map2做与运算,得到的结果为Map,如果Map不为0,设Map中不为0的位为n,则将序列片段位置信息三元组(Id,start,n)加入到tindex中;
9)取出下一个序列片段位置信息三元组至S,如果S不为空,转5),否则返回tindex;
4.3.3 支持度的计算
由行为模式挖掘支持度的定义知道,序列片段必须满足挖掘标准并且序列片段要紧支持事件序列。故先将不满足挖掘标准的序列片段位置信息删除,然后统计紧支持的序列片段个数即用户行为模式挖掘的支持度。相关算法如下
算法4.4:delete(index,size)
/*输入:index为保存序列片段位置信息的一维数组;挖掘标准 为:size+ maxError 序列片段的长度,为全局变量。 输出:index */
1)number=size;
2)从index中取出第一个序列片段位置信息至Infor;
3)从Infor中取到序列片段的开始位置start和结束位置end,如果number+maxError end-start+1,转4),否则将Infor从index中删除;
4)取出下一个序列片段位置信息至Infor,如果Infor不为空,转3),否则返回;
算法4.5:audict(index)
//输入:index为保存序列片段位置信息的一维数组。
//输出:number 支持度大小。
1)number=0,i=1;
2)取出index中的第i个序列片段位置信息的序列编号Id1,开始位置start1和结束位置end1;
3)j=1;
4)取出index中第j个序列片段位置信息的序列编号Id2,开始位置start2和结束位置end2;
5)如果Id1等于Id2且start1小于或等于start2且end1大于或等于end2,则转8);
6)j=j+1,如果j小于或等于index的大小,转4);
7)number++;
8)i=i+1,如果i小于或等于index的大小,转2);
9)返回number;
算法4.5的时间复杂度为: O(number(index)*number(index))。