Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

FrequentFilter.cpp

Go to the documentation of this file.
00001 #ifndef FrequentFilter_CPP
00002 #define FrequentFilter_CPP
00003 
00008 #include "common.hpp"  
00009 #include <vector>
00010 
00011 
00017 template <class IT_R>
00018 class FrequentFilter
00019 {
00020    public:
00021       FrequentFilter<IT_R>(IT_R& it_r):it_r(it_r){}
00022 
00028       void findFrequentItems(
00029          std::vector< std::pair<counter_t, item_t> >& freq_items_with_counters,
00030          counter_t& nr_of_transactions, counter_t& min_supp, 
00031          bool relative=false, double relminsupp=0.0);
00032    private:
00033       IT_R& it_r;
00034 
00035 
00036 };
00045 template <class IT_R> void FrequentFilter<IT_R>::findFrequentItems(
00046    std::vector< std::pair<counter_t, item_t> >& freq_items_with_counters,
00047    counter_t& nr_of_transactions, counter_t& min_supp, 
00048    bool relative, double relminsupp)
00049 {
00050    freq_items_with_counters.clear();
00051    nr_of_transactions = 0;
00052    it_r.rewind();
00053 
00054    std::vector<item_t> transaction;
00055    std::vector< counter_t > temp_counter_vector;
00056 
00058    std::vector<item_t>::iterator it_transaction;
00059    while( it_r.nextTransactionBIS( transaction ) )
00060    {      
00061       if( !transaction.empty() )
00062       {
00063          nr_of_transactions++;
00064          for( it_transaction = transaction.begin(); 
00065               it_transaction != transaction.end(); ++it_transaction )
00066          {
00067             if( *it_transaction + 1  > temp_counter_vector.size() )
00068                temp_counter_vector.resize( *it_transaction + 1, 0 );
00069             ++temp_counter_vector[*it_transaction];
00070          }
00071       }
00072    }
00073    it_r.setLargestItem( temp_counter_vector.size() - 1 );
00074       
00075    if(relative)
00076       min_supp = static_cast<unsigned int>(relminsupp * nr_of_transactions);
00078    for( std::vector< counter_t >::size_type index = 0; 
00079         index < temp_counter_vector.size(); ++index )
00080       if(temp_counter_vector[index] >= min_supp)
00081       {
00082          std::pair<counter_t, item_t> temp_pair(temp_counter_vector[index],index);
00083          freq_items_with_counters.push_back(temp_pair);
00084       }
00085 }
00086 
00087 #endif

Generated on Sun Sep 17 17:50:38 2006 for FIM environment by  doxygen 1.4.4