📄 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.5 --><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>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 <iostream></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, <span class="keyword">const</span> <span class="keywordtype">char</span>* output_file_name ):ofstream(output_file_name), basket_file(basket_file)00018 {00019 }00020 <a name="l00025"></a><a class="code" href="classInput__Output__Manager.html#a1">00025</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 )00026 {00027 <span class="keywordflow">if</span>( <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.eof() ) <span class="keywordflow">return</span> 0;00028 <span class="keywordtype">char</span> c;00029 <a class="code" href="common_8hpp.html#a0">itemtype</a> pos;00030 00031 basket.clear();00032 <span class="keywordflow">do</span>00033 {00034 <span class="keywordtype">int</span> item = 0;00035 pos = 0;00036 <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.get(c);00037 <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>))00038 {00039 pos++;00040 item *= 10;00041 item += int(c)-int(<span class="charliteral">'0'</span>);00042 <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.get(c);00043 }00044 <span class="keywordflow">if</span>( pos ) basket.insert( (<a class="code" href="common_8hpp.html#a0">itemtype</a>) item );00045 }00046 <span class="keywordflow">while</span>( c != <span class="charliteral">'\n'</span> && !<a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.eof() );00047 <span class="keywordflow">return</span> 1;00048 }00049 <a name="l00057"></a><a class="code" href="classInput__Output__Manager.html#a2">00057</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classInput__Output__Manager.html#a2">Input_Output_Manager::find_frequent_items</a>( ifstream& mis_file,00058 set<pair<itemtype, unsigned long> >& support_of_items, 00059 vector<double>& mis_abs)00060 {00062 <a class="code" href="common_8hpp.html#a0">itemtype</a> item;00063 <span class="keywordtype">double</span> mis_value;00064 00065 set<pair<double,itemtype> > temp_set;00066 00068 vector<double> mis_values_original;00069 <span class="keywordflow">while</span>(!mis_file.eof())00070 {00071 mis_file>>item;00072 mis_file.ignore();00073 mis_file>>mis_value;00074 <span class="keywordflow">if</span>(mis_file.fail()) <span class="keywordflow">break</span>;00075 <span class="keywordflow">if</span>(item + 1> mis_values_original.size())00076 mis_values_original.resize(item + 1);00077 mis_values_original[item] = mis_value;00078 temp_set.insert(pair<double,itemtype>(mis_value,item));00079 }00080 00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> basket_number = 0;00083 set<itemtype> basket;00084 vector<unsigned long> temp_counter_vector;00085 set<itemtype>::iterator it_basket;00086 <span class="keywordflow">while</span>( <a class="code" href="classInput__Output__Manager.html#a1">read_in_a_line</a>( basket ) )00087 { 00088 <span class="keywordflow">if</span>( !basket.empty() )00089 {00090 basket_number++;00091 <span class="keywordflow">for</span>( it_basket = basket.begin(); it_basket != basket.end(); it_basket++ )00092 {00093 <span class="keywordflow">if</span>( *it_basket + 1 > temp_counter_vector.size() )00094 temp_counter_vector.resize( *it_basket + 1, 0 );00095 temp_counter_vector[*it_basket]++;00096 }00097 }00098 }00099 00101 set<pair<double,itemtype> >::iterator it_s = temp_set.begin();00102 <span class="keywordflow">while</span>( temp_counter_vector[(*it_s).second] < (*it_s).first * (basket_number - 0.5) 00103 && it_s != temp_set.end() ) it_s++;00106 <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>.clear();00107 <span class="keywordtype">double</span> mis_abs_min = (*it_s).first * (basket_number - 0.5),00108 temp_mis_abs;00109 <span class="keywordflow">while</span>( it_s != temp_set.end() )00110 {00111 <span class="keywordflow">if</span> (temp_counter_vector[(*it_s).second] > mis_abs_min )00112 {00113 temp_mis_abs = (*it_s).first * (basket_number - 0.5);00114 <span class="keywordflow">if</span>( temp_counter_vector[(*it_s).second] > temp_mis_abs )00115 support_of_items.insert( pair<itemtype, unsigned long>(00116 <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>.size(), temp_counter_vector[(*it_s).second] ));00117 <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>.push_back((*it_s).second);00118 mis_abs.push_back(temp_mis_abs);00119 }00120 it_s++;00121 }00122 00123 vector<itemtype>(<a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>).swap(<a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>);00124 vector<double>(mis_abs).swap(mis_abs);00125 set< pair<itemtype, unsigned long> >(support_of_items).swap(support_of_items);00126 00127 <a class="code" href="classInput__Output__Manager.html#r1">new_code</a>.reserve( temp_counter_vector.size() + 1 );00128 <a class="code" href="classInput__Output__Manager.html#r1">new_code</a>.resize( temp_counter_vector.size() + 1, 0 );00129 00130 <span class="keywordflow">for</span>( <a class="code" href="common_8hpp.html#a0">itemtype</a> edgeIndex = 0; edgeIndex < <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>.size(); edgeIndex++ )00131 <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;00132 <span class="keywordflow">return</span> basket_number;00133 }<a name="l00138"></a><a class="code" href="classInput__Output__Manager.html#a3">00138</a> <span class="keywordtype">void</span> <a class="code" href="classInput__Output__Manager.html#a3">Input_Output_Manager::basket_recode</a>( <span class="keyword">const</span> set<itemtype>& original_basket, vector<itemtype>& new_basket )00139 {00140 new_basket.clear();00141 <span class="keywordflow">for</span>( set<itemtype>::iterator it_basket = original_basket.begin(); it_basket != original_basket.end()00142 ; it_basket++ )00143 <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 );00144 sort( new_basket.begin(), new_basket.end() ); 00145 }00146 <a name="l00147"></a><a class="code" href="classInput__Output__Manager.html#a4">00147</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)00148 {00149 <span class="keywordflow">for</span>( set<itemtype>::const_iterator it_item = basket.begin(); it_item != basket.end(); it_item++)00150 {00151 operator<<( <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>[*it_item] );00152 put(<span class="charliteral">' '</span>);00153 }00154 }00155 <a name="l00156"></a><a class="code" href="classInput__Output__Manager.html#a5">00156</a> <span class="keywordtype">void</span> <a class="code" href="classInput__Output__Manager.html#a5">Input_Output_Manager::write_out_basket_and_counter</a>(<span class="keyword">const</span> set<itemtype>& itemset, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> counter)00157 {00158 <span class="keywordflow">for</span>( set<itemtype>::const_iterator it_item = itemset.begin(); it_item != itemset.end(); it_item++)00159 {00160 operator<<( <a class="code" href="classInput__Output__Manager.html#r2">new_code_inverse</a>[*it_item] );00161 put(<span class="charliteral">' '</span>);00162 }00163 put(<span class="charliteral">'('</span>);00164 operator<<(counter);00165 write(<span class="stringliteral">")\n"</span>,2);00166 }00167 <a name="l00168"></a><a class="code" href="classInput__Output__Manager.html#a6">00168</a> <span class="keywordtype">void</span> <a class="code" href="classInput__Output__Manager.html#a6">Input_Output_Manager::rewind</a>()00169 {00170 <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.clear();00171 <a class="code" href="classInput__Output__Manager.html#r0">basket_file</a>.seekg(0, ios::beg);00172 }00173 <a name="l00174"></a><a class="code" href="classInput__Output__Manager.html#a7">00174</a> <a class="code" href="classInput__Output__Manager.html#a7">Input_Output_Manager::~Input_Output_Manager</a>()00175 {00176 close();00177 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Jun 20 23:41:08 2004 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.5 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -