AprioriTid算法对Apriori算法做了调整,它的特点是在第一次遍历数据库D之后,就不再使用数据库来计算支持度,而是用集合Ck来完成。集合Ck每个成员的形式为(TID, {Xk}),其中每个Xk都是一个潜在的大型k项集,在标识符为TID的事务中。对于k=1,C1对应与数据库D,虽然在概念上每个项目i由项目集{l}代替。对于k>1,有算法产生Ck(步骤(10))。与事务t相应的Ck的成员是(t.TID,{c∈Ck|t中包含的c})。若某个事务不包含任何候选k项目集,那么Ck对于这个事务就没有条目(Entry)。这样,Ck中条目数量比数据库中的事务数量少,尤其对于大值的k而言。另外,对于大值的k,每个条目比相应的事务要小,这是因为几乎没有什么候选能包含在此事务中。但是,对于小值的k,每个条目比相应的事务要大,因为Ck中的一个条目包括了此事务中的所有候选k项目集。算法步骤如下:
(1) L1={large l-itemsets}
(2) C1=数据库D;
(3) For (k=2; Lk-1≠?; k++) do begin
(4) Ck = apriori-gen(Lk-1); //新的候选集
(5) Ck’= ?;
(6) for 所有条目t∈Ck-1’do begin
(7) //确定事务t。TID中包含的候选
Ct={ c∈Ck |(c-c[k]) ∈t.项目集的集合∧(c-c[k-1])∈t.项目集的集合};
(8) for 所有候选c∈Ct do
(9) c.count ++;
(10) if(Ct≠?) then Ck’+=<t.TID, Ct>;
(11) end
(12) Lk={c∈Ck |c.count≥min.supp}
(13) end
(14) 答案= ;