?? input__output__manager_8cpp-source.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>APRIORI algorithm: Input_Output_Manager.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.9.1 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div><h1>Input_Output_Manager.cpp</h1><a href="Input__Output__Manager_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/***************************************************************************</span>00002 <span class="comment"> Input_Output_Manager.cpp - description</span>00003 <span class="comment"> -------------------</span>00004 <span class="comment"> begin : cs march 10 2004</span>00005 <span class="comment"> copyright : (C) 2004 by Ferenc Bodon</span>00006 <span class="comment"> email : bodon@cs.bme.hu</span>00007 <span class="comment"> ***************************************************************************/</span>00008 00009 00014 <span class="preprocessor">#include "<a class="code" href="Input__Output__Manager_8hpp.html">Input_Output_Manager.hpp</a>"</span>00015 <span class="preprocessor">#include <algorithm></span>00016 <a name="l00017"></a><a class="code" href="classInput__Output__Manager.html#a0">00017</a> <a class="code" href="classInput__Output__Manager.html#a0">Input_Output_Manager::Input_Output_Manager</a>( ifstream& basket_file, 00018 <span class="keyword">const</span> <span class="keywordtype">char</span>* output_file_name ):00019 ofstream(output_file_name), basket_file(basket_file)00020 {00021 }00022 <a name="l00027"></a><a class="code" href="classInput__Output__Manager.html#a1">00027</a> <span class="keywordtype">int</span> <a class="code" href="classInput__Output__Manager.html#a1">Input_Output_Manager::read_in_a_line</a>( set<itemtype>& basket )00028 {00029 <span class="keywordflow">if</span>( <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.eof() ) <span class="keywordflow">return</span> 0;00030 <span class="keywordtype">char</span> c;00031 <a class="code" href="common_8hpp.html#a0">itemtype</a> pos;00032 00033 basket.clear();00034 <span class="keywordflow">do</span>00035 {00036 <span class="keywordtype">int</span> item = 0;00037 pos = 0;00038 <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.get(c);00039 <span class="keywordflow">while</span>(<a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.good() && (c >= <span class="charliteral">'0'</span>) && (c <= <span class="charliteral">'9'</span>))00040 {00041 item *= 10;00042 item += int(c)-int(<span class="charliteral">'0'</span>);00043 <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.get(c);00044 pos++;00045 }00046 <span class="keywordflow">if</span>( pos ) basket.insert( (<a class="code" href="common_8hpp.html#a0">itemtype</a>) item );00047 }00048 <span class="keywordflow">while</span>( !<a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.eof() && c != <span class="charliteral">'\n'</span> );00049 <span class="keywordflow">return</span> 1;00050 }00051 <a name="l00059"></a><a class="code" href="classInput__Output__Manager.html#a2">00059</a> <a class="code" href="common_8hpp.html#a1">countertype</a> <a class="code" href="classInput__Output__Manager.html#a2">Input_Output_Manager::find_frequent_items</a>( 00060 <span class="keyword">const</span> <span class="keywordtype">double</span> min_supp, vector<countertype>& support_of_items )00061 {00062 <a class="code" href="common_8hpp.html#a1">countertype</a> basket_number = 0;00063 set<itemtype> basket;00064 vector< countertype > temp_counter_vector;00065 00067 set<itemtype>::iterator it_basket;00068 <span class="keywordflow">while</span>( <a class="code" href="classInput__Output__Manager.html#a1">read_in_a_line</a>( basket ) )00069 { 00070 <span class="keywordflow">if</span>( !basket.empty() )00071 {00072 basket_number++;00073 <span class="keywordflow">for</span>( it_basket = basket.begin(); it_basket != basket.end(); 00074 it_basket++ )00075 {00076 <span class="keywordflow">if</span>( *it_basket + 1 > temp_counter_vector.size() )00077 temp_counter_vector.resize( *it_basket + 1, 0 );00078 temp_counter_vector[*it_basket]++;00079 }00080 }00081 }00082 00084 <span class="keywordtype">double</span> min_occurrence = min_supp * (basket_number - 0.5);00085 vector<countertype>::size_type edgeIndex;00086 00087 set< pair<countertype, itemtype> > temp_set;00088 <span class="keywordflow">for</span>( edgeIndex = 0; edgeIndex < temp_counter_vector.size(); 00089 edgeIndex++ )00090 <span class="keywordflow">if</span>( temp_counter_vector[edgeIndex] > min_occurrence )00091 temp_set.insert(00092 pair<countertype, itemtype>(temp_counter_vector[edgeIndex],00093 edgeIndex));00094 00095 <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>.clear();00096 support_of_items.clear();00097 <span class="keywordflow">for</span>(set< pair<countertype, itemtype> >::iterator it = temp_set.begin();00098 it != temp_set.end(); it++)00099 {00100 <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>.push_back((*it).second);00101 support_of_items.push_back((*it).first);00102 }00103 <span class="comment">// reverse( new_code_inverse.begin(),new_code_inverse.end() );</span>00104 <span class="comment">// reverse( support_of_items.begin(), support_of_items.end() );</span>00105 vector<itemtype>(new_code_inverse).swap(<a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>);00106 vector<countertype>(support_of_items).swap(support_of_items);00107 00108 <a class="code" href="classInput__Output__Manager.html#r1">new_code</a>.reserve( temp_counter_vector.size() + 1 );00109 <a class="code" href="classInput__Output__Manager.html#r1">new_code</a>.resize( temp_counter_vector.size() + 1, 0 );00110 <span class="keywordflow">for</span>( edgeIndex = 0; edgeIndex < <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>.size(); edgeIndex++ )00111 <a class="code" href="classInput__Output__Manager.html#r1">new_code</a>[<a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>[edgeIndex]] = edgeIndex+1;00112 <span class="keywordflow">return</span> basket_number;00113 }<a name="l00118"></a><a class="code" href="classInput__Output__Manager.html#a3">00118</a> <span class="keywordtype">void</span> <a class="code" href="classInput__Output__Manager.html#a3">Input_Output_Manager::basket_recode</a>( 00119 <span class="keyword">const</span> set<itemtype>& original_basket, vector<itemtype>& new_basket )00120 {00121 new_basket.clear();00122 <span class="keywordflow">for</span>( set<itemtype>::const_iterator it_basket = original_basket.begin(); 00123 it_basket != original_basket.end(); it_basket++ )00124 <span class="keywordflow">if</span>( <a class="code" href="classInput__Output__Manager.html#r1">new_code</a>[*it_basket] ) new_basket.push_back( <a class="code" href="classInput__Output__Manager.html#r1">new_code</a>[*it_basket]-1 );00125 sort( new_basket.begin(), new_basket.end() ); 00126 }00127 <a name="l00128"></a><a class="code" href="classInput__Output__Manager.html#a4">00128</a> <span class="keywordtype">void</span> <a class="code" href="classInput__Output__Manager.html#a4">Input_Output_Manager::write_out_basket</a>(<span class="keyword">const</span> set<itemtype>& basket)00129 {00130 <span class="keywordflow">for</span>( set<itemtype>::const_iterator it_item = basket.begin(); 00131 it_item != basket.end(); it_item++)00132 {00133 operator<<( <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>[*it_item] );00134 put(<span class="charliteral">' '</span>);00135 }00136 }00137 <a name="l00138"></a><a class="code" href="classInput__Output__Manager.html#a5">00138</a> <span class="keywordtype">void</span> <a class="code" href="classInput__Output__Manager.html#a5">Input_Output_Manager::write_out_basket_and_counter</a>(00139 <span class="keyword">const</span> set<itemtype>& itemset, <span class="keyword">const</span> countertype counter)00140 {00141 <span class="keywordflow">for</span>( set<itemtype>::const_iterator it_item = itemset.begin(); 00142 it_item != itemset.end(); it_item++)00143 {00144 operator<<( <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>[*it_item] );00145 put(<span class="charliteral">' '</span>);00146 }00147 put(<span class="charliteral">'('</span>);00148 operator<<(counter);00149 write(<span class="stringliteral">")\n"</span>,2);00150 }00151 <a name="l00152"></a><a class="code" href="classInput__Output__Manager.html#a6">00152</a> <span class="keywordtype">void</span> <a class="code" href="classInput__Output__Manager.html#a6">Input_Output_Manager::rewind</a>()00153 {00154 <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.clear();00155 <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.seekg(0, ios::beg);00156 }00157 <a name="l00158"></a><a class="code" href="classInput__Output__Manager.html#a7">00158</a> <a class="code" href="classInput__Output__Manager.html#a7">Input_Output_Manager::~Input_Output_Manager</a>()00159 {00160 close();00161 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Mar 11 14:48:06 2005 for APRIORI algorithm by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address></body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -