/* $Id: mergeskipmerger.h 4887 2009-12-16 22:01:55Z abehm $ Copyright (C) 2010 by The Regents of the University of California Redistribution of this file is permitted under the terms of the BSD license. Author: Jiaheng Lu Date: 05/14/2007 */ #ifndef _mergeskipmerger_h_ #define _mergeskipmerger_h_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "listmerger.h" #include "utilities.h" #include "heap.h" #include "showutil.h" /* MergeSkip algorithm. Exploit the threshold and use binary search to skip elements. */ template > class MergeSkipMerger : public ListsMerger, InvList> { public: void merge_Impl(const vector &arrays, const unsigned threshold, vector &results); string getName() { return "MergeSkipMerger"; } }; template void MergeSkipMerger:: merge_Impl(const vector &arrays, const unsigned threshold, vector &results) { const unsigned MAXUnsigned = ~0; unsigned numberOfInvertedList = arrays.size(); if (threshold>numberOfInvertedList) return; // no answer unsigned pointersIndex [numberOfInvertedList]; for(unsigned k=0;k= threshold) // we got the result { results.push_back(minData); //cout<< "We get a result, rule ID is " << minData <<", count is " << containerSize <