int main(int argc, char* argv[]) { srand(time(NULL)); assert(argc>3); std::ifstream in_str(argv[1]); if (!in_str) throw 1; float alpha = atof(argv[2]); s_t l = atoi(argv[3]); double pstar=0; std::clock_t start_ps = std::clock(); for (s_t i =ceil(alpha*l);i<=l;i++) { pstar+=nChoosek(l,i)*pow(alpha,i)*pow(1-alpha,l-i); } std::cout<<pstar<<'\n'; std::cout<<"Computing p* took "<<(std::clock()-start_ps)/(double)CLOCKS_PER_SEC<<"seconds\n"; std::clock_t start_reading = std::clock(); MyNum num; std::vector<MyNum> numbers; while (num.read(in_str)) { numbers.push_back(num); } std::cout<<"Reading in numbers took "<<(std::clock()-start_reading)/(double)CLOCKS_PER_SEC<<"seconds\n"; std::clock_t start_running = std::clock(); unsigned int m = 100000; unsigned int worked=0; for (int i=0;i<m;i++) { worked+=testSubsequence(numbers,l,alpha); } double p = worked*1.0/m; std::cout<<p<<'\n'; if (p>pstar) std::cout<<"YES\n"; else std::cout<<"NO\n"; std::cout<<"Running algorithm took "<<(std::clock()-start_running)/(double)CLOCKS_PER_SEC<<"seconds\n"; return 0; }
void testNChooseK() { TAP_TEST(nChoosek(1, 10) == 0, TEST_N_CHOOSE_K, ""); TAP_TEST(nChoosek(1, 1) == 1, TEST_N_CHOOSE_K, ""); TAP_TEST(nChoosek(5, 2) == 10, TEST_N_CHOOSE_K, ""); TAP_TEST(nChoosek(8, 4) == 70, TEST_N_CHOOSE_K, ""); }