Example #1
0
File: a.cpp Project: filaPro/my
int find_best_pos(const std::string &sa, const std::string &sb) {
    char cc[4] = {'A', 'G', 'T', 'C'};
    std::vector<int> va, vb, res, ans;
    ans.resize(sa.length() - sb.length() + 1, 0);
    int sh = sa.length() - 1 + sb.length();
    for (int c_it = 0; c_it < 4; ++c_it) {
        strings_to_vectors(sa, sb, va, vb, cc[c_it]);
        /* std::cerr << "va: ";
        for (int i = 0; i < va.size(); ++i)
            std::cerr << va[i] << " ";
        std::cerr << std::endl;
        std::cerr << "vb: ";
        for (int i = 0; i < vb.size(); ++i)
            std::cerr << vb[i] << " ";
        std::cerr << std::endl; */

        multiply_vec(va, vb, res);
        for (int i = sh; i < sh + sa.length() - sb.length() + 1; ++i) {
            ans[ans.size() - 1 - (i - sh)] += res[i];
        }

        /* std::cerr << "re: ";
        for (int i = 0; i < res.size(); ++i)
            std::cerr << res[i] << " ";
        std::cerr << std::endl; */

        // std::cerr << std::endl;
    }
    int max = -1, _ans = 0;
    for (int i = 0; i < ans.size(); ++i) {
        // std::cerr << ans[i] << " ";
        if (ans[i] > max) {
            max = ans[i];
            _ans = i;
        }
    }
    // std::cerr << std::endl;
    return _ans + 1;
}
Example #2
0
//solves the CG algorithm 
int CGSolver(std::vector<double> &val,
             std::vector<int>    &row_ptr,
             std::vector<int>    &col_idx,
             std::vector<double> &b,
             std::vector<double> &x,
             double              tol,
             std::string 		 soln_prefix)
{
	//initializes variables


	std::vector<double> r;
	std::vector<double> Ax = multiply_vec(val, col_idx, row_ptr, x); //make multiply vec
	double l2norm0;
	r=subtract_vec(b,Ax);
	l2norm0 = l2normer(r);// finds norm of l 
	std::vector<double> p=r;
	int niter = 1;


	// write the initial guess
    std::stringstream s;
    s << std::setfill('0') << std::setw(3) << 0;
    //--compile_0
    //--Originally, this was left `std::string filename = soln_` where soln_ undefined
    //--and the line missing a closing semi-colon. Also, `ix` not defined below...
    std::string filename = soln_prefix;
    //ix + s.str() + ".txt"; // This line was left-in (not commented upon submission) but it doesn't perform any assignment or operation!
    WriteSoln(x, filename);
    //--END

	while (niter<row_ptr.size()){
		niter = niter +1;
		//multiply p from first 3 inpouts
		std::vector<double> Ap = multiply_vec(val, col_idx, row_ptr,p); 

		//get dot product 
		double r_initial = dot_product(r,r); 
		double alpha = r_initial/dot_product(p,Ap);
		//multiply vector by coeffifient alpha, also single for loop
		x= add_vec(x, multiply_coeff(alpha,p)); 

		// add vector adds two vectors . will be similar to dot product but will add instead
		r = add_vec(r,multiply_coeff(-alpha,Ap));
		double l2normr=l2normer(r); 
		//returns the number of iterations 
		if (l2normr/l2norm0 < tol){

			std::stringstream s;
            s << std::setfill('0') << std::setw(3) << niter;
            std::string filename = soln_prefix + s.str() + ".txt";
            WriteSoln(x, filename);

			return int(niter);
		}
		double beta = dot_product(r,r)/r_initial;

		p=add_vec(r, multiply_coeff(beta,p));

		if (niter % 10==0) {

			std::stringstream s;
            s << std::setfill('0') << std::setw(3) << niter;
            std::string filename = soln_prefix + s.str() + ".txt";
            WriteSoln(x, filename);
		}


	}
	// otherwise the algorithm diverges
	return -1;
}