⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seq__cand__gen_8h-source.html

📁 这是一个用于数据挖掘的常用算法的模板库(数据挖掘的C++模板库for UNIX)
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<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 &lt; 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 &lt;&lt; "COUNT " &lt;&lt; pat_i &lt;&lt; " ** " &lt;&lt; pat_j &lt;&lt; " ** " &lt;&lt; cand_pats[i] &lt;&lt; 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&lt;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]-&gt;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-&gt;A is the pattern family.</span><a name="l00122"></a>00122             idx = patfam_index[pat_i-&gt;pat_id()];<a name="l00123"></a>00123           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i == 1) <span class="comment">// P-&gt;B is the pattern family.</span><a name="l00124"></a>00124             idx = patfam_index[pat_j-&gt;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 &lt;&lt; "ADD " &lt;&lt; cand_pats[i];</span><a name="l00129"></a>00129           <span class="keywordflow">if</span>(cand_pats[i]-&gt;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 &lt;&lt; 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&lt;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&lt;SEQ_PATTERN&gt;::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&lt;SEQ_PATTERN&gt;());</span><a name="l00154"></a>00154       <span class="comment">//cout &lt;&lt; "calling " &lt;&lt; depth+1 &lt;&lt; " -- " &lt;&lt; pat_fams[i].size() &lt;&lt; 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>&lt;<span class="keyword">class</span> PP, <span class="keyword">class</span> MP, <span class="keyword">class</span> PAT_ST, <span class="keyword">template</span>&lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">template</span> &lt;<span class="keyword">typename</span>&gt; <span class="keyword">class </span>&gt; <span class="keyword">class </span>CC, template &lt;typename&gt; class ALLOC &gt;<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-&gt;A join P-&gt;A = P-&gt;A-&gt;A (same patterns)</span><a name="l00174"></a>00174   <span class="comment">// P-&gt;A join P-&gt;B = P-&gt;A-&gt;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-&gt;clone();<a name="l00180"></a>00180     <span class="keyword">const</span> <span class="keyword">typename</span> SEQ_PATTERN::VERTEX_T&amp; new_v=pat_j-&gt;rmost_vertex();<a name="l00181"></a>00181     <span class="keywordtype">int</span> old_rmv = pat_i-&gt;rmost_vid();<a name="l00182"></a>00182     <span class="keywordtype">int</span> new_rmv = cand_pats[0]-&gt;add_vertex(new_v);<a name="l00183"></a>00183     cand_pats[0]-&gt;add_out_edge(old_rmv, new_rmv, DEF_E_LBL);<a name="l00184"></a>00184     cand_pats[0]-&gt;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-&gt;rmost_vertex() == pat_j-&gt;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-&gt;B join P-&gt;A = P-&gt;B-&gt;A (Additional pattern)</span><a name="l00194"></a>00194     cand_pats[1] = pat_j-&gt;clone();<a name="l00195"></a>00195     <span class="keyword">const</span> <span class="keyword">typename</span> SEQ_PATTERN::VERTEX_T&amp; new_v=pat_i-&gt;rmost_vertex();<a name="l00196"></a>00196     <span class="keywordtype">int</span> old_rmv = pat_j-&gt;rmost_vid();<a name="l00197"></a>00197     <span class="keywordtype">int</span> new_rmv = cand_pats[1]-&gt;add_vertex(new_v);<a name="l00198"></a>00198     cand_pats[1]-&gt;add_out_edge(old_rmv, new_rmv, DEF_E_LBL);<a name="l00199"></a>00199     cand_pats[1]-&gt;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&nbsp;<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 + -