Exemplo n.º 1
0
int main()
{	int i, wordsleft = 10000, l, m, u;
	char *phrase, *p;
	word[0] = inputchars;
	while (scanf("%s", word[nword]) != EOF) {
		word[nword+1] = word[nword] + strlen(word[nword]) + 1;
		nword++;
	}
	for (i = 0; i < k; i++)
		word[nword][i] = 0;
	for (i = 0; i < k; i++)
		printf("%s\n", word[i]);
	qsort(word, nword, sizeof(word[0]), sortcmp);
	phrase = inputchars;
	for ( ; wordsleft > 0; wordsleft--) {
		l = -1;
		u = nword;
		while (l+1 != u) {
			m = (l + u) / 2;
			if (wordncmp(word[m], phrase) < 0)
				l = m;
			else
				u = m;
		}
		for (i = 0; wordncmp(phrase, word[u+i]) == 0; i++)
			if (rand() % (i+1) == 0)
				p = word[u+i];
		phrase = skip(p, 1);
		if (strlen(skip(phrase, k-1)) == 0)
			break;
		printf("%s\n", skip(phrase, k-1));
	}
	return 0;
}
Exemplo n.º 2
0
/* called by system qsort */
int sortcmp(const void * p, const void * q)
{
  char ** p1 = (char**) p;
  char ** q1 = (char**) q;
  nbCall[2]++;
  return wordncmp(*p1, *q1);
}
Exemplo n.º 3
0
int main(int argc, char* argv[])
{int i, wordsleft, l, m, u;
  char *phrase, *p;
  
  k = atoi(argv[1]);
  wordsleft = atoi(argv[2]);
  
  srand((unsigned) time(0));  /*comment this out when debugging*/ 
  
  word[0] = inputchars;
  while (scanf("%s", word[nword]) != EOF) {
    if(nword <= 50) printf("%s:", word[nword]);

    word[nword+1] = word[nword] + strlen(word[nword]) + 1;
    nword++;
  }
  for (i = 0; i < k; i++)
    word[nword][i] = 0;
  for (i = 0; i < k; i++)
    printf("%s\n", word[i]);
  qsort(word, nword, sizeof(word[0]), sortcmp);
  phrase = inputchars;
  for ( ; wordsleft > 0; wordsleft--) {
    l = -1;
    u = nword;
    while (l+1 != u) {
      m = (l + u) / 2;
      if (wordncmp(word[m], phrase) < 0)
	l = m;
      else
	u = m;
    }
    for (i = 0; wordncmp(phrase, word[u+i]) == 0; i++)
      if (rand() % (i+1) == 0)
	p = word[u+i];
    phrase = skip(p, 1);
    if (strlen(skip(phrase, k-1)) == 0)
      break;
    writeword(skip(phrase, k-1));
  }
  return 0;
}
Exemplo n.º 4
0
int main(void) {
        srand(time(0));

        word[0] = inputchars;
        while (scanf("%s", word[nword]) != EOF) {
                word[nword+1] = word[nword] + strlen(word[nword]) + 1;
                ++nword;
        }

        int i;
        for (i = 0; i < k; ++i)
                word[nword][i] = 0;
        int aux = rand() % nword;
        for (i = 0; i < k; ++i)
                printf("%s ", word[aux+i]);
        qsort(word, nword, sizeof(word[0]), sortcmp);

        char *p, *phrase = word[aux];
        int wordsleft, l, u, m;
        for (wordsleft = 300; wordsleft > 0; --wordsleft) {
                l = -1;
                u = nword;
                while (l+1 != u) {
                        m = (l+u)/2;
                        if (wordncmp(word[m], phrase) < 0)
                                l = m;
                        else
                                u = m;
                }
                for (i = 0; wordncmp(phrase, word[u+i]) == 0; ++i)
                        if (rand() % (i+1) == 0)
                                p = word[u+i];
                phrase = skip(p, 1);
                if (strlen(skip(phrase, k-1)) == 0)
                        break;
                printf("%s ", skip(phrase, k-1));
        }

        return 0;
}
Exemplo n.º 5
0
int sortcmp(char **p, char **q)
{	return wordncmp(*p, *q);
}
Exemplo n.º 6
0
int sortcmp(const void *a, const void *b) {
        return wordncmp(*(char**)a, *(char**)b);
}
Exemplo n.º 7
0
int main(int argc, char* argv[])
{
bool start = true;
// k € [10; 200] step +10
// m € [10.000; 100.000.000] step *10
// n € 10 fichiers
/*for(int nb = 0; nb < 20; ++nb)
{*/
  int i, wordsleft, lo, mid, up;
  char *phrase, *p;
  nbITot = 0;

  for(i = 0; i < 3; i++)
    nbCall[i] = 0;


  k = atoi(argv[1]);
  m = atoi(argv[2]);
  fprintf(stderr, " [%i ", k);
  fprintf(stderr, " %i] ", m);
if(atoi(argv[3]) == 0)
{
  fprintf(stdout, "\"k\";");
  fprintf(stdout, "\"m\";");
  fprintf(stdout, "\"n\";");
  fprintf(stdout, "\"count1\";");
  fprintf(stdout, "\"count2\";");
  fprintf(stdout, "\"count3\";");
  fprintf(stdout, "\"time\"\n");
}
  startingTime = clock();
  unsigned __int64 startTT;
  unsigned __int64 endTT;
QueryPerformanceCounter((LARGE_INTEGER *)&startTT);
  wordsleft = m;
  
  unsigned __int64 ttt;
QueryPerformanceCounter((LARGE_INTEGER *)&ttt);
  srand(ttt);
  //srand((unsigned)time(0));

  word[0] = inputchars;
  while (scanf("%s", word[nword]) != EOF)
  {
    /* if(nword <= 50) printf("%s:", word[nword]); */
    word[nword+1] = word[nword] + strlen(word[nword]) + 1;
    nword++;
  }
  for (i = 0; i < k; i++)
    word[nword][i] = 0;/*
  for (i = 0; i < k; i++)
    printf("%s\n", word[i]);*/
  qsort(word, nword, sizeof(word[0]), sortcmp);
/*
if(start)
{
  start = false;

  fprintf(stderr, "k : %i\n", k);
  fprintf(stderr, "m : %i\n", m);
  fprintf(stderr, "nword : %i\n", nword);
}*/

  phrase = inputchars;
  for ( ; wordsleft > 0; wordsleft--) // * m
  {
    lo = -1;
    up = nword;
    while (lo+1 != up)
    {
      mid = (lo + up) / 2;
      nbCall[0]++;
      if (wordncmp(word[mid], phrase) < 0)
        lo = mid;
      else
        up = mid;
    }

// count3 = (nword / (2 + k) + 1) * m
    nbCall[1]++;
    for (i = 0; wordncmp(phrase, word[up+i]) == 0; i++)
    {
      if (rand() % (i+1) == 0)
        p = word[up+i];
      nbCall[1]++;
    }
    nbITot += i;

    phrase = skip(p, 1);
    if (strlen(skip(phrase, k-1)) == 0)
      break;

    //writeword(skip(phrase, k-1));
  }

//  printf("\n");

QueryPerformanceCounter((LARGE_INTEGER *)&endTT);
  endTime = clock();

  fprintf(stdout, "%i;", k);
  fprintf(stdout, "%i;", m);
  fprintf(stdout, "%i;", nword);
  fprintf(stdout, "%lu;", nbCall[2]);
  fprintf(stdout, "%lu;", nbCall[0]);
  fprintf(stdout, "%lu;", nbCall[1]);
  fprintf(stdout, "%i\n", endTT - startTT);
//  fprintf(stderr, "i tot : %i\n", nbITot);
//}

  exit(EXIT_SUCCESS);
}