00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00028 #include<iostream>
00029 #include<sstream>
00030 #include<set>
00031 #include<string>
00032 #include<vector>
00033
00034 using namespace std;
00035
00036 #ifndef ITEMSET
00037 #define ITEMSET
00038
00039 typedef string ItemsetId;
00040
00041 class Itemset
00042 {
00043 friend class Apriori;
00044 friend class AprioriWithComplement;
00045
00046 private:
00047
00048 ItemsetId _id;
00049
00050
00051 vector<unsigned int> columns;
00052
00053
00054
00055 unsigned int _numColumns;
00056
00057
00058 set< unsigned int > _columnSet;
00059 set< unsigned int > _rowSet;
00060
00061
00062 set< unsigned int > _complementedRowSet;
00063
00064
00065
00066
00067 vector<string> columnStrings;
00068 vector<string> rowStrings;
00069
00070
00071 float _columnPValue;
00072
00073 float _rowPValue;
00074
00075 float _sizePValue;
00076
00077
00078 void transpose();
00079
00080 static unsigned int _currentId;
00081 static ItemsetId _makeId(unsigned int index)
00082 {
00083 stringstream sstr;
00084 sstr << "itemset_";
00085 sstr << index;
00086 return(sstr.str());
00087 }
00088
00089 static ItemsetId _getNewId()
00090 {
00091 _currentId++;
00092 return(_makeId(_currentId));
00093 }
00094
00095 void _computeColumnSet()
00096 {
00097 copy(columns.begin(), columns.end(), inserter(_columnSet, _columnSet.begin()));
00098 }
00099
00100
00101
00102
00103
00104
00105
00106 public:
00107 Itemset()
00108 : _id(), columns(),
00109 _numColumns(0),
00110 _columnSet(), _rowSet(), _complementedRowSet(),
00111 columnStrings(), rowStrings(),
00112 _columnPValue(1), _rowPValue(1), _sizePValue(1)
00113 {}
00114
00116 Itemset(const Itemset &rhs)
00117 {
00118 _id = rhs._id;
00119 columns = rhs.columns;
00120
00121 _numColumns = rhs._numColumns;
00122 _columnSet = rhs._columnSet;
00123 _rowSet = rhs._rowSet;
00124 _complementedRowSet = rhs._complementedRowSet;
00125 columnStrings = rhs.columnStrings;
00126 rowStrings = rhs.rowStrings;
00127 _columnPValue = rhs._columnPValue;
00128 _rowPValue = rhs._rowPValue;
00129 _sizePValue = rhs._sizePValue;
00130
00131 }
00132
00134 void addRow(unsigned int index)
00135 {
00136 _rowSet.insert(index);
00137 }
00138
00139
00140 void setId(ItemsetId id)
00141 {
00142 _id = id;
00143 }
00144 ItemsetId getId() const
00145 {
00146 return(_id);
00147 }
00148
00149 unsigned int size() const;
00150
00151 const Itemset & operator=(const Itemset &rhs)
00152 {
00153 if (this != &rhs)
00154 {
00155 _id = rhs._id;
00156 columns = rhs.columns;
00157
00158 _numColumns = rhs._numColumns;
00159 _columnSet = rhs._columnSet;
00160 _rowSet = rhs._rowSet;
00161 _complementedRowSet = rhs._complementedRowSet;
00162 columnStrings = rhs.columnStrings;
00163 rowStrings = rhs.rowStrings;
00164 _columnPValue = rhs._columnPValue;
00165 _rowPValue = rhs._rowPValue;
00166 _sizePValue = rhs._sizePValue;
00167 }
00168 return(*this);
00169 }
00170
00171
00172 bool operator<(const Itemset &a) const;
00173 bool operator<(const Itemset *a) const;
00174
00175 bool operator==(const Itemset &a) const;
00176 bool operator==(const Itemset *a) const;
00177
00178
00180 void clearColumns()
00181 {
00182 _numColumns = columns.size();
00183 columns.clear();
00184
00185 }
00186
00191 bool containsColumn(unsigned int index) const
00192 {
00193 return(_columnSet.end() != _columnSet.find(index));
00194 }
00195
00197 bool containsRow(unsigned int index) const
00198 {
00199 return(_rowSet.end() != _rowSet.find(index));
00200 }
00201
00209 bool containsRows(const Itemset &other) const;
00210
00218 bool containsRows(const set< unsigned int > &otherRows) const;
00219
00220
00222 vector<string> getColumns() const { return columnStrings; }
00223
00225 unsigned int getNumColumns() const
00226 {
00227 return(_numColumns);
00228 return(columns.size());
00229 }
00230
00232 unsigned int getNumRows() const
00233 {
00234 return(_rowSet.size());
00235
00236 }
00237
00239 unsigned int getNumComplementedRows() const
00240 {
00241 return(_complementedRowSet.size());
00242 }
00243
00245 vector<string> getRows() const { return rowStrings; }
00246
00248 void printColumns(ostream &ostr) const;
00249
00251 void printRows(ostream &ostr) const;
00252
00260 void print(ostream &ostr, unsigned int itemsetnum) const;
00261
00267 void printGraph(ostream &ostr, unsigned int itemsetNum) const;
00268
00270 void setColumnPvalue(float pval)
00271 {
00272 _columnPValue = pval;
00273 }
00275 float getColumnPvalue() const
00276 {
00277 return(_columnPValue);
00278 }
00279
00281 void setRowPvalue(float pval)
00282 {
00283 _rowPValue = pval;
00284 }
00286 float getRowPvalue() const
00287 {
00288 return(_rowPValue);
00289 }
00290
00292 void setSizePvalue(float pval)
00293 {
00294 _sizePValue = pval;
00295 }
00297 float getSizePvalue() const
00298 {
00299 return(_sizePValue);
00300 }
00301
00302
00303
00304 };
00305
00306 #endif