Esempio n. 1
0
File: zseg.cpp Progetto: thinxer/tau
/*使用双数组trie树查表为动态规划程序搜使用的数据初始化*/
void put_values(){
    //清零
    values[0][0]=0;values[0][1]=0;
    values[0][2]=0;values[0][3]=0;
    /*每一个字的unigram,与它邻接的共3个字的标注有关,每个字有4种标注,
    所以需要赋予12个不同的特征值*/
    for(int i=0;i<len;i++){
        int* p=find_u(sequence[i]);
        if(p==NULL){
            if(i+1<len){
                values[i+1][0]=0;values[i+1][1]=0;
                values[i+1][2]=0;values[i+1][3]=0;
            }
            continue;
        }
        if(i>0){
            values[i-1][0]+=*(p++);values[i-1][1]+=*(p++);
            values[i-1][2]+=*(p++);values[i-1][3]+=*(p++);
        }else p+=4;
        values[i][0]+=*(p++);values[i][1]+=*(p++);
        values[i][2]+=*(p++);values[i][3]+=*(p++);
        if(i+1<len){
            values[i+1][0]=*(p++);values[i+1][1]=*(p++);
            values[i+1][2]=*(p++);values[i+1][3]=*(p++);
        }
    }
    /*每一个字的bigram,与它邻接的共4个字的标注有关,每个字有4种标注,
    所以需要赋予16个不同的特征值*/
    for(int i=0;i<len-1;i++){
        //用双数组trie树找到该bigram对应的16个特征的特征值指针
        int* p=find_b(sequence[i],sequence[i+1]);
        if(p==NULL)continue;
        if(i>0){
            values[i-1][0]+=*(p++);values[i-1][1]+=*(p++);
            values[i-1][2]+=*(p++);values[i-1][3]+=*(p++);
        }else p+=4;
        values[i][0]+=*(p++);values[i][1]+=*(p++);
        values[i][2]+=*(p++);values[i][3]+=*(p++);
        values[i+1][0]+=*(p++);values[i+1][1]+=*(p++);
        values[i+1][2]+=*(p++);values[i+1][3]+=*(p++);
        if(i+2<len){
            values[i+2][0]+=*(p++);values[i+2][1]+=*(p++);
            values[i+2][2]+=*(p++);values[i+2][3]+=*(p++);
        }
    }
};
Esempio n. 2
0
File: dijkstra.c Progetto: kjrz/porr
int *dijkstra_algorithm(float **graph) {
  int i, u, v, alt;                      // utility variables
  int Q[GRAPHSIZE] = {0};                // empty Q

  float dist[GRAPHSIZE];
  for (i = 0; i < GRAPHSIZE; i++)
    dist[i] = INFINITY;
	
  int visited [GRAPHSIZE] = {0};         // mark all nodes as unvisited
  int previous[GRAPHSIZE] = {0};         // previous node in optimal path 
                                         // from source

  dist[0] = 0;                           // distance from source to itself is zero
  Q   [0] = 1;                           // start off with the source node

  while (not_empty(Q)) {
    u = find_u(Q, dist, visited);        // see function desc
    if (u == TARGET)                     // terminate once target is reached
      break;

    Q[u]       = 0;                      // remove this node from Q
    visited[u] = 1;                      // mark it as visited

    for (v = 0; v < GRAPHSIZE; v++) {
      if (!graph[u][v] == INFINITY)      // neighbours only
	continue;

      alt = dist[u] + graph[u][v];       // accumulate shortest distance 
                                         // from source
      if (alt < dist[v]) {
	dist[v] = alt;                   // keep the shortest distance
                                         // from source to v
	previous[v]  = u;

	if (!visited[v])	         // add unvisited v to Q
          Q[v] = 1;                      // to be processed
      }
    }
  }
	
  return read_path(previous);
}
Esempio n. 3
0
/*
 * gen_priv_key()
 */
void gen_priv_key(const unsigned int seed) {
  uint1024 a,one;
  int i;

  if (verbose>1)  puts("  Generating items");
  srandom(seed);

  uint_to_1024(priv_sum,0);
  
  for (i=0; i<ITEMS; i++) {
    uint_to_1024(private_key[i],0);
    while (cmp1024(private_key[i],priv_sum)<=0) {
      shl1024(private_key[i],4);
      uint_to_1024(a,(uint) (16.0*random()/RAND_MAX));
      add1024(private_key[i],a);
    }
    add1024(priv_sum,private_key[i]);

  }
  
  if (verbose>1) puts("  Counting 'm'"); 
  find_m();
  
  if (verbose>1) puts("  Counting 'v'");
  find_v();
  
  if (verbose>1) puts("  Counting 'u'");
  find_u();

  if (verbose>1) puts("  Checking u*v=1 (mod m)");
  cpy1024(a, u);
  mul1024modN(a,v,m);
  uint_to_1024(one,1);
  if (cmp1024(one,a)) {
	  puts("!! WARNING !! u*v != 1 (mod m) !! WARNING !!");
	  puts("This key will provide only one-way trip !");
	  if (verbose>1) 
		  puts("E.g. it's usable only for encryption, not decryption !");
  }
}
Esempio n. 4
0
// ********* MAIN ************
int main()
{
	struct initializations init = initials();

	truncate_file();

	// spacetime
	Metric metric(init.m, init.a, init.q);
	cout << endl << metric.name << ":" << endl
		<< "m = " << metric.m << endl
		<< "a = " << metric.a << endl
		<< "q = " << metric.q << endl
		<< endl;

	// emfield
	EMField emfield(metric);

	// particle
	init.u[init.change] = find_u(metric, &init, init.x, init.u);
	Particle initparticle(0, init.teilchen_masse, init.teilchen_ladung,
		init.x, init.u, metric);

	// spectrum
	myfloat emin = 2.0;
	myfloat emax = 13.0;
	myfloat start_u0 = initparticle.u[0];
	vector<myfloat> freqmult(10000);
	for (unsigned i = 0; i < freqmult.size(); i++){
		// E = u0 * freqmult
		myfloat energy = i * (emax - emin) / freqmult.size() + emin;
		freqmult[i] = energy / start_u0;
	}
	Spectrum spec(freqmult, &metric);

	ofstream specfile("globalspec.dat");
	specfile << scientific;


	// per-ray data
	int nrays;
	for (nrays = init.nrays - 1; nrays >= 0; nrays--) {
		cout << "===========================================" << endl
			<< "Ray index: " << nrays << endl
			<< endl;
		// particle
		Particle particle(0, init.teilchen_masse, init.teilchen_ladung,
				init.x, init.u, metric);
		init.change = 1;
		init.umin = init.umin_inc;
		init.umax = init.umax_inc;
		particle.u[0] = start_u0;
		particle.u[3] = init.u[3] + nrays * init.u3_inc;
		particle.u[init.change] = find_u(metric, &init, particle.x,
				particle.u);

		cout << endl;
		for (unsigned mu = 0; mu < metric.dim; mu++) {
			cout << "x" << mu << " = " << particle.x[mu] << '\t';
			cout << "u" << mu << " = " << particle.u[mu] << endl;
		}
		cout << endl;

		stringstream nrays_str;
		nrays_str << nrays;
		string plotfilename;
		plotfilename = "globalplot.dat/plot";
		plotfilename += nrays_str.str();
		plotfilename += ".dat";

		// Iterate
		absorb = 0;
		go_ray(init, spec, metric, particle, emfield, plotfilename);

		cout << endl;
		for (unsigned mu = 0; mu < metric.dim; mu++) {
			cout << "x" << mu << " = " << particle.x[mu] << '\t';
			cout << "u" << mu << " = " << particle.u[mu] << endl;
		}
		cout << endl;

		if (absorb && (absorb != absorb_max)){
			cerr << "Error detected" << endl;
			exit(1);
		}

		cout << endl;
	}


	for (unsigned i = 0; i < spec.cnts.size(); i++){
		specfile << freqmult[i] * start_u0 << '\t'
			<< spec.cnts[i] << endl;
	}
	specfile.close();


	return 0;
}