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

TrieNEE.hpp

Go to the documentation of this file.
00001 #ifndef TrieNEE_HPP
00002 #define TrieNEE_HPP
00003 
00004 #include "common.hpp"
00005 #include "apriori/bodon/InnerNodeSpecific.hpp"
00006 #include <vector>
00007 //#include <iterator>   //for test
00008 
00009 
00010 namespace Bodon
00011 {
00016    template <class TRIE>
00017    class TrieNEE : public TRIE
00018    {
00019       public:
00020          std::vector<item_t> neelist;    
00021          TrieNEE():TRIE(){}
00022          TrieNEE(counter_t counter): TRIE(counter){}
00023 
00025          const TrieNEE<TRIE>* isIncluded( 
00026             const std::vector<item_t>& an_itemset, 
00027             std::vector<item_t>::const_iterator item_it ) const;
00028 
00029          bool neeFind(const item_t item) const
00030          {
00031             std::vector<item_t>::const_iterator it(neelist.begin());
00032             while(it != neelist.end() && *it < item)
00033                ++it;
00034             if(it != neelist.end() && *it == item)
00035                return true;
00036             else
00037                return false;
00038          }
00039          void neePushBackSorted(const std::vector<item_t>& new_neelist)
00040          {
00041             neelist.reserve(neelist.size() + new_neelist.size());
00042             neelist.insert(neelist.end(), new_neelist.begin(),new_neelist.end());
00043 
00044          }
00045          void neeAddSorted(const std::vector<item_t>& new_neelist)
00046          {
00047             neePushBackSorted(new_neelist);
00048             std::inplace_merge(
00049                neelist.begin(), neelist.end() - new_neelist.size(), neelist.end());
00050          }
00051          void neeInsertItem(const item_t new_item)
00052          {
00053             std::vector<item_t>::iterator it(neelist.begin());
00054             while(it != neelist.end() && *it < new_item)
00055                ++it;
00056             neelist.insert(it, new_item);
00057          }
00058    };
00059    
00060 
00069    template <class TRIE> const TrieNEE<TRIE>* 
00070    TrieNEE<TRIE>::isIncluded( 
00071       const std::vector<item_t>& an_itemset, 
00072       std::vector<item_t>::const_iterator item_it ) const
00073    {
00074       if( item_it == an_itemset.end() ) 
00075          return this;
00076       else
00077       {
00078          TrieNEE<TRIE>* subtrie(static_cast<TrieNEE<TRIE>*>(
00079                                              TRIE::edgelist.find(*item_it)));
00080          if(subtrie)
00081             return subtrie->isIncluded( an_itemset, ++item_it );
00082          else 
00083          {
00084             if(neeFind(*item_it))
00085                return isIncluded( an_itemset, ++item_it );
00086             else 
00087                return NULL;                     
00088          }
00089       }
00090    }
00091 }
00092 
00093 #endif

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