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; }
/* 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); }
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; }
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; }
int sortcmp(char **p, char **q) { return wordncmp(*p, *q); }
int sortcmp(const void *a, const void *b) { return wordncmp(*(char**)a, *(char**)b); }
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); }