コード例 #1
0
ファイル: NSV.cpp プロジェクト: akjoshi/hdt-it
	void NSV::create_last_level(LCP *lcp, TextIndex *csa) {
		uint *lcp_r;
		uint lcp_value, nsv_aux, j;

		/*store the results for the last level*/
		uint num_elements =  R[r-1]->rank1(n-1);

		b_A = bits(num_elements);
		A = new uint[(num_elements*b_A + W -1)/W];
		for(size_t i=0; i<((num_elements*b_A + W -1)/W); i++)
			A[i]=0;

		lcp_r = new uint[num_elements];
		for(uint i=0; i<num_elements; i++) {
			lcp_r[i] = lcp->get_LCP(R[r-1]->select1(i+1), csa);
		}

		for(uint i=0; i<num_elements; i++) {
			lcp_value = lcp_r[i];
			for(j=i+1; j<num_elements; j++) {
				nsv_aux = lcp_r[j];
				if(lcp_value > nsv_aux) {
					set_field_64(A, b_A, i, j);
					break;
				}
			}					 /*close for j*/
			if(j==num_elements)
				set_field_64(A, b_A, i, j);
		}						 /*close for i*/
		delete [] lcp_r;
	}
コード例 #2
0
ファイル: PSV.cpp プロジェクト: JanWielemaker/hdt-cpp
	void PSV::create_last_level(LCP *lcp, TextIndex *csa) {
		size_t *lcp_r;
		uint lcp_value, psv_aux;
		int j, ini=0;

		/*store the results for the last level*/
		uint num_elements =  R[r-1]->rank1(n);
		b_A = bits(num_elements);
		A = new uint[(num_elements*b_A + W -1)/W];
		for(size_t i=0; i<((num_elements*b_A + W -1)/W); i++)
			A[i]=0;
		lcp_r = new size_t[num_elements];

		if(R[r-1]->access(0))
			ini = 1;

		for(uint i=ini; i<num_elements; i++) {
			lcp_r[i] = lcp->get_LCP(R[r-1]->select1(i+1)-1, csa);
		}

		for(int i=num_elements-1; i>0; i--) {
			lcp_value = lcp_r[i];
			for(j=i-1; j>0; j--) {
				psv_aux = lcp_r[j];
				if(lcp_value > psv_aux) {
					set_field_64(A, b_A, i, j);
					break;
				}
			}					 /*close for j*/
			if(j==0) {
				if(ini)
					set_field_64(A, b_A, i, 0);
				else {
					psv_aux = lcp_r[j];
					if(lcp_value > psv_aux)
						set_field_64(A, b_A, i, j);
					else
						set_field_64(A, b_A, i, 0);
				}
			}
		}						 /*close for i*/
		set_field_64(A, b_A, 0, 0);
		delete [] lcp_r;
	}
コード例 #3
0
ファイル: LCP_naive.cpp プロジェクト: JanWielemaker/hdt-cpp
	LCP_naive::LCP_naive(TextIndex *csa, char *text, size_t n) {
		length =n;
		size_t prev, act, val;
		b = bits(length-1);
		long long nb = 1;
		nb = (nb*b*n+W-1)/W;
		if(nb > MAXINT) {
			cout << "Memory limit excess (in LCP)" << endl;
			exit(1);
		}
		lcp_array = new uint[(size_t)nb];
		for(size_t i=0; i<(size_t)nb; i++)
			lcp_array[i]=0;
		set_field_64(lcp_array, b, 0, 0);
		val = csa->getSA(0);
		prev = n - val;
		for(size_t i=1; i < length; i++) {
			val = csa->getSA(i);
			act = n - val;
			set_field_64(lcp_array, b, i, lcp_length(text, n-prev, val, min(prev,act)));
			prev = act;
		}
	}