📄 seq__cand__gen_8h-source.html
字号:
<a name="l00102"></a>00102 cs.count(pat_i, pat_j, cand_pats, min_sup, num_cands);<a name="l00103"></a>00103 <a name="l00104"></a>00104 <span class="comment">//for (int i=0; i < num_cands; i++){</span><a name="l00105"></a>00105 <span class="comment">// if (cand_pats[i]){</span><a name="l00106"></a>00106 <span class="comment">// cout << "COUNT " << pat_i << " ** " << pat_j << " ** " << cand_pats[i] << endl;</span><a name="l00107"></a>00107 <span class="comment">//} </span><a name="l00108"></a>00108 <span class="comment">//}</span><a name="l00109"></a>00109 <a name="l00110"></a>00110 <span class="comment">// Discard infrequent patterns.</span><a name="l00111"></a>00111 <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i<num_cands; i++) {<a name="l00112"></a>00112 <span class="keywordflow">if</span>(!cand_pats[i])<a name="l00113"></a>00113 <span class="keywordflow">continue</span>;<a name="l00114"></a>00114 <a name="l00115"></a>00115 <span class="keywordflow">if</span>(!cand_pats[i]->is_valid(min_sup)) {<a name="l00116"></a>00116 <span class="keyword">delete</span> cand_pats[i];<a name="l00117"></a>00117 cand_pats[i]=0;<a name="l00118"></a>00118 } <a name="l00119"></a>00119 <span class="keywordflow">else</span> {<a name="l00120"></a>00120 <span class="keywordtype">int</span> idx=0;<a name="l00121"></a>00121 <span class="keywordflow">if</span>(i == 0) <span class="comment">// P->A is the pattern family.</span><a name="l00122"></a>00122 idx = patfam_index[pat_i->pat_id()];<a name="l00123"></a>00123 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i == 1) <span class="comment">// P->B is the pattern family.</span><a name="l00124"></a>00124 idx = patfam_index[pat_j->pat_id()];<a name="l00125"></a>00125 <a name="l00126"></a>00126 pat_fams[idx].push_back(cand_pats[i]);<a name="l00127"></a>00127 <a name="l00128"></a>00128 <span class="comment">//cout << "ADD " << cand_pats[i];</span><a name="l00129"></a>00129 <span class="keywordflow">if</span>(cand_pats[i]->is_freq(min_sup)) {<a name="l00130"></a>00130 <span class="comment">// freq_pats.push_back(cand_pats[i]);</span><a name="l00131"></a>00131 <span class="keywordflow">if</span>(print){<a name="l00132"></a>00132 cout << cand_pats[i];<a name="l00133"></a>00133 }<a name="l00134"></a>00134 freq_pats_count++;<a name="l00135"></a>00135 }<a name="l00136"></a>00136 }<a name="l00137"></a>00137 }<a name="l00138"></a>00138 <a name="l00139"></a>00139 <span class="keyword">delete</span>[] cand_pats;<a name="l00140"></a>00140 <a name="l00141"></a>00141 }<span class="comment">//end for it_j</span><a name="l00142"></a>00142 <a name="l00143"></a>00143 <span class="comment">// Delete the VAT for it_i. Its never going to be used.</span><a name="l00144"></a>00144 cs.delete_vat(*it_i);<a name="l00145"></a>00145 <a name="l00146"></a>00146 } <span class="comment">//end for it_i</span><a name="l00147"></a>00147 <a name="l00148"></a>00148 <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i<sz; i++) {<a name="l00149"></a>00149 <span class="comment">//recursive call</span><a name="l00150"></a>00150 <span class="keywordflow">if</span>(!pat_fams[i].empty()) {<a name="l00151"></a>00151 <span class="comment">// sort patterns</span><a name="l00152"></a>00152 <span class="comment">//typename pat_fam<SEQ_PATTERN>::iterator b=pat_fams[i].begin(), e=pat_fams[i].end();</span><a name="l00153"></a>00153 <span class="comment">//sort(b, e, less_than<SEQ_PATTERN>());</span><a name="l00154"></a>00154 <span class="comment">//cout << "calling " << depth+1 << " -- " << pat_fams[i].size() << endl;</span><a name="l00155"></a>00155 cand_gen(pat_fams[i], pat_fams[i], min_sup, freq_pats, cs, depth+1);<a name="l00156"></a>00156 }<a name="l00157"></a>00157 }<a name="l00158"></a>00158 <a name="l00159"></a>00159 } <span class="comment">//end cand_gen()</span><a name="l00160"></a>00160 <a name="l00161"></a>00161 <span class="keyword">template</span><<span class="keyword">class</span> PP, <span class="keyword">class</span> MP, <span class="keyword">class</span> PAT_ST, <span class="keyword">template</span><<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>> <span class="keyword">class </span>CC, template <typename> class ALLOC ><a name="l00162"></a>00162 SEQ_PATTERN** join(<span class="keyword">const</span> SEQ_PATTERN* pat_i, SEQ_PATTERN* pat_j, <a name="l00163"></a>00163 <span class="keywordtype">bool</span> skip0=<span class="keyword">false</span>, <span class="keywordtype">bool</span> skip1 =<span class="keyword">false</span>) {<a name="l00164"></a>00164 <a name="l00165"></a>00165 <span class="comment">// NOTE: </span><a name="l00166"></a>00166 <span class="comment">// Right now we are just doing the sequence atom JOIN sequence atom.</span><a name="l00167"></a>00167 <span class="comment">// Even in this case we are omitting the join that leads to an event atom.</span><a name="l00168"></a>00168 <a name="l00169"></a>00169 <span class="keyword">const</span> <span class="keyword">typename</span> SEQ_PATTERN::EDGE_T DEF_E_LBL=0; <span class="comment">// Default for edge label.</span><a name="l00170"></a>00170 SEQ_PATTERN** cand_pats=<span class="keyword">new</span> SEQ_PATTERN*[2];<a name="l00171"></a>00171 <a name="l00172"></a>00172 <span class="comment">// If both patterns are the same then the join results in a single new candidate pattern.</span><a name="l00173"></a>00173 <span class="comment">// P->A join P->A = P->A->A (same patterns)</span><a name="l00174"></a>00174 <span class="comment">// P->A join P->B = P->A->B (different patterns)</span><a name="l00175"></a>00175 <span class="keywordflow">if</span> (skip0){<a name="l00176"></a>00176 cand_pats[0] = 0;<a name="l00177"></a>00177 }<a name="l00178"></a>00178 <span class="keywordflow">else</span>{<a name="l00179"></a>00179 cand_pats[0] = pat_i->clone();<a name="l00180"></a>00180 <span class="keyword">const</span> <span class="keyword">typename</span> SEQ_PATTERN::VERTEX_T& new_v=pat_j->rmost_vertex();<a name="l00181"></a>00181 <span class="keywordtype">int</span> old_rmv = pat_i->rmost_vid();<a name="l00182"></a>00182 <span class="keywordtype">int</span> new_rmv = cand_pats[0]->add_vertex(new_v);<a name="l00183"></a>00183 cand_pats[0]->add_out_edge(old_rmv, new_rmv, DEF_E_LBL);<a name="l00184"></a>00184 cand_pats[0]->add_in_edge(new_rmv, old_rmv, DEF_E_LBL);<a name="l00185"></a>00185 }<a name="l00186"></a>00186 <a name="l00187"></a>00187 <span class="comment">// If both patterns are the same then the second candidate is not generated.</span><a name="l00188"></a>00188 <span class="keywordflow">if</span>(skip1 || pat_i->rmost_vertex() == pat_j->rmost_vertex()) {<a name="l00189"></a>00189 cand_pats[1] = 0;<a name="l00190"></a>00190 }<a name="l00191"></a>00191 <span class="keywordflow">else</span> {<a name="l00192"></a>00192 <span class="comment">// If the two patterns are different, join results in an additional candidate.</span><a name="l00193"></a>00193 <span class="comment">// P->B join P->A = P->B->A (Additional pattern)</span><a name="l00194"></a>00194 cand_pats[1] = pat_j->clone();<a name="l00195"></a>00195 <span class="keyword">const</span> <span class="keyword">typename</span> SEQ_PATTERN::VERTEX_T& new_v=pat_i->rmost_vertex();<a name="l00196"></a>00196 <span class="keywordtype">int</span> old_rmv = pat_j->rmost_vid();<a name="l00197"></a>00197 <span class="keywordtype">int</span> new_rmv = cand_pats[1]->add_vertex(new_v);<a name="l00198"></a>00198 cand_pats[1]->add_out_edge(old_rmv, new_rmv, DEF_E_LBL);<a name="l00199"></a>00199 cand_pats[1]->add_in_edge(new_rmv, old_rmv, DEF_E_LBL);<a name="l00200"></a>00200 }<a name="l00201"></a>00201 <a name="l00202"></a>00202 <span class="keywordflow">return</span> cand_pats;<a name="l00203"></a>00203 }<a name="l00204"></a>00204 <a name="l00205"></a>00205 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed Jul 26 14:01:08 2006 for DMTL by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -