Exemple #1
0
int MarkovPhraseCreation::CreateCharPhrases(){
	try
	{
		if (n == 1)
			PrintChildCharPhrases(feed); // Special case n = 1. Unigram phrases has no state awareness.
		else
		{
			// Iterate through the most common starts

			__int64 progress = 0;

			multimap<int, string>::reverse_iterator nextstartstate;
			for (nextstartstate = startngrams.rbegin(); nextstartstate != startngrams.rend(); ++nextstartstate)
			{
				string startfeed = (feed.length() >= n) ? feed : nextstartstate->second;
				int feedwords = count(startfeed.begin(), startfeed.end(), SPACE[0]);
				startfeed.erase(remove(startfeed.begin(), startfeed.end(), BREAK[0]), startfeed.end());
				startfeed.erase(remove(startfeed.begin(), startfeed.end(), SPACE[0]), startfeed.end());

				PrintChildCharPhrases(startfeed, nextstartstate->second.substr(nextstartstate->second.length() - (n - 1)), 1+feedwords);
				
				progress++;
				time_t progresstime = time(NULL);
				clog << "Done with phrases starting with \"" << startfeed << "\". About " << progress*100/startngrams.size() << "% done at " <<  ctime(&progresstime);
			}
		}
	}
	catch (const exception& e) {
		cerr << e.what() << endl;
		return 1;
	}
	return 0;
}
void
markFeats()
{
  multimap<float, FeatureTree*, less<float> >::reverse_iterator
    fRankIter = featRank.rbegin();
  int i = 0 ;
  bool justCut = false;
  for( ; fRankIter != featRank.rend() ; fRankIter++)
    {
      float fRank = (*fRankIter).first;
      FeatureTree* ft = (*fRankIter).second;
      /* if(i++%500 == 2) cerr << i << " " << fRank << " " << *ft << endl;*/
      //if(ft->featureInt == 4)
      //cerr << i << " " << fRank << " " << *ft << endl;

      if(totSelectedStates < totDesiredFeatures)
	{
	  markFeat(ft, fRank);
	}
      else if(!justCut)
	{
	  justCut = true;
	  cerr << "Just cut off at " << i << " " << fRank << endl;
	}
    }
}
Exemple #3
0
int MarkovPhraseCreation::CreateWordPhrases()
{
	try
	{
		if (n == 1)
			PrintChildWordPhrases(feed); // Special case n = 1. Unigram phrases has no state awareness.
		else
		{
			// Iterate through the most common starts
			__int64 progress = 0;

			multimap<int, string>::reverse_iterator nextstartstate;
			for (nextstartstate = startngrams.rbegin(); nextstartstate != startngrams.rend(); ++nextstartstate)
			{
				string startphrase = feed;
				startphrase.append(nextstartstate->second);
				string startstate = nextstartstate->second;

				// Prepare the start phrase by removing BREAKs and whitespaces
				startphrase.erase(remove(startphrase.begin(), startphrase.end(), BREAK[0]), startphrase.end());
				startphrase.erase(remove(startphrase.begin(), startphrase.end(), ' '), startphrase.end());

				// And the start state by using the n-1 last words
				int statebreakpos = nextstartstate->second.size() - 1;
				for (int i = 0; i < n - 1; i++)
					statebreakpos = nextstartstate->second.substr(0, statebreakpos).find_last_of(' ');

				startstate = nextstartstate->second.substr(statebreakpos + 1);

				// Start the recursive chain to print all phrases based on this start
				PrintChildWordPhrases(startphrase, startstate, n-1);

				progress++;
				time_t progresstime = time(NULL);
				clog << "Done with phrases starting with \"" << startphrase << "\". About " << progress * 100 / startngrams.size() << "% done at " << ctime(&progresstime);

			}
		}
	}
	catch (const exception& e) {
		cerr << e.what() << endl;
		return 1;
	}
	return 0;
}
Exemple #4
0
void print_times(const multimap<size_t, string>& timing)
{
    // set the column widths
    int name_width = 0;
    int time_width = 0;
    for (const pair<size_t, string>& p : timing)
    {
        name_width = max(name_width, static_cast<int>(p.second.size()));
        stringstream ss;
        ss.imbue(locale(""));
        ss << p.first;
        time_width = max(time_width, static_cast<int>(ss.str().size()));
    }
    for (auto it = timing.rbegin(); it != timing.rend(); it++)
    {
        cout << setw(name_width + 2) << left << it->second << " " << setw(time_width + 2) << right
             << it->first << "us\n";
    }
}
Exemple #5
0
int main(){
  memset(dist,-1,sizeof(dist));
  cin>>n>>m>>k;
  int i,j;
  int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
  for(i=0;i<n;i++)
    scanf("%s",maps[i]);

  for(i=0;i<n;i++)
    for(j=0;j<m;j++)
      if(maps[i][j]=='.'){
        ox=j,oy=i;
        i=n,j=m;
      }
  dist[oy][ox]=0;
  que.push(P(ox,oy));
  while(!que.empty()){
    P tmp=que.front();
    dists.insert(make_pair(dist[tmp.Y][tmp.X],tmp));
    for(i=0;i<4;i++){
      tmp.X=que.front().X+dx[i];
      tmp.Y=que.front().Y+dy[i];
      if(tmp.X<0 || m<=tmp.X || tmp.Y<0 || n<=tmp.Y
         || dist[tmp.Y][tmp.X]!=-1 || maps[tmp.Y][tmp.X]=='#')
        continue;
      dist[tmp.Y][tmp.X]=dist[que.front().Y][que.front().X]+1;
      que.push(P(tmp.X,tmp.Y));
    }
    que.pop();
  }/*
  for(i=0;i<n;i++){
    for(j=0;j<m;j++){
      printf("%3d",dist[i][j]);
    }cout<<endl;
  }cout<<"[["<<k<<"]]"<<endl;*/
  for(it=dists.rbegin(),i=0;it!=dists.rend()&&i<k;it++,i++){
//    printf("(%d,%d)",it->Y.X,it->Y.Y);
    maps[it->Y.Y][it->Y.X]='X';
  }
  for(i=0;i<n;i++)
    printf("%s\n",maps[i]);
  return 0;
}