⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 context.cpp

📁 ROSETTA C++库是一个C++类库和例程集合
💻 CPP
字号:
// ontext.cpp: implementation of the Context class.
//
//////////////////////////////////////////////////////////////////////

#include <stdafx.h> // Added 980901 by Aleksander 踙rn.
#include "../copyright.h" // Added 000323 by Aleksander 豩rn.

#include "Context.h"
#include <kernel/basic/message.h>
#include <kernel/system/assert.h>
#include "HitsMessage.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Context::Context(const Vector(const Bits*) &bits, Parameters &p)
: sets(bits), parameters(p), nelems(0)
{

	// calculate mapping etos
	if (!sets.empty()) {
		nelems = sets[0]->GetSize();
		elements_used = Bits(nelems, false);
	}

	nsets = sets.size();	
	
	int i;
	for(i = 0; i < nelems; i++)
		etos.push_back(Bits(nsets,false));
	
	for(i = 0; i < sets.size(); i++){
		const Bits * b = sets[i];
		setsize.push_back(b->Count(true));
		for(int j = 0; j < b->GetSize(); j++){
			if(b->GetState(j)){
				elements_used.SetState(j, true);
				etos[j].SetState(i, true);
			}
		}
	}

	elems_used = elements_used.Count(true);

	// calculate real index
	real_index.reserve(elems_used);
	for(i = 0; i < nelems; i++){
		if(elements_used.GetState(i))
			real_index.push_back(i);
	}

	for(i = nelems - 1; i >= 0; i--)
		if(!elements_used.GetState(i)){
			etos.erase(etos.begin() + i);
		}
	
	// initialize default cost
	for(i = p.costs.size(); i < nelems; i++)
			p.costs.push_back(1.0);

	// initialize default set_weights
	for(i = p.set_weights.size();i < nsets; i++)
			p.set_weights.push_back(1.0);

	// calculate sum of sets_weights
	sum_set_weights = 0;
	for(i = 0; i < nsets; i++)
		sum_set_weights += p.set_weights[i];

  // calculate keepers requirement
	keep_limit = p.hit_fraction * sum_set_weights;
}

Context::~Context()
{
}

double Context::covers(EABitset * b)
{
	Bits su(nsets, false);
	double count = 0;
	int i;
	for(i = 0; i < b->size(); i++){
		if(b->get(i)){
			//Vector(int) * v  = &etos[i];
			Bits * v = &etos[i];
			assert(v != NULL);			
			su |= *v;

			if(su == true) // Really big optimization by A

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -