void subset(UMAP &transaction, const vector<PAIR> &pkhui_vec, VUMAP &hui, UTIL &min_u, const size_t &topk)
{
    TOPKLIST huilist;
	for(vector<PAIR>::const_iterator pit = pkhui_vec.begin(); pit != pkhui_vec.end(); ++pit)
	{
		if(pit->second < min_u)
			break;
		UTIL util = 0;
		for(vector<ID>::const_iterator it = pit->first.begin(); it != pit->first.end(); ++it)
		{
			if(transaction.find(*it) != transaction.end())
				util += transaction[*it];
			else
			{
				util = 0;
				break;
			}
		}
		if( util !=0)
			hui[pit->first] += util;
		if(hui[pit->first] >= min_u) // profiler顯示這行佔的比例最大
		{
			huilist.push(hui[pit->first]);
			raise_border_min_util(min_u, topk, huilist);
		}
	}
}