C++ Library Extensions 2022.12.09
To help learn modern C++ programming
stupid_experiment.cpp
Go to the documentation of this file.
1#include <tpf_ncrnpr.hpp>
2#include <tpf_output.hpp>
4#include <future>
5#include <atomic>
6
7using big_int_t = long long;
8
10{
11 if(k == 1)
12 return n;
13 else if(n == k)
14 return 1;
15 else
16 {
17 return single_thread_ncr_recursion(n-1, k-1) +
19 }
20}
21
22constexpr int factor = 2;
24 factor * std::thread::hardware_concurrency();
25
26std::atomic<int> thread_count{0};
27
29{
30 if(k == 1)
31 return n;
32 else if(n == k)
33 return 1;
34 else
35 {
37 {
39 auto ncr_n_1_k_1 = std::async(single_thread_ncr_recursion, n-1, k-1);
40 auto ncr_n_1_k = single_thread_ncr_recursion(n-1, k);
41 auto rlt = ncr_n_1_k + ncr_n_1_k_1.get();
42
43 --thread_count;
44
45 return rlt;
46 }
47 else
48 {
49 return single_thread_ncr_recursion(n-1, k-1)
51 }
52 }
53}
54
56{
57 big_int_t n = 40;
58 big_int_t k = 10;
59
61
62 std::cout << "tpf::ncrnpr::ncr loop: "
63 << tpf::ncrnpr::ncr(n, k)
64 << ", elapsed: " << sw.elapsed_time<tpf::chrono_random::second_t>() << std::endl;
65
66 std::cout << "single_thread_recursion: "
68 << ", elapsed: " << sw.elapsed_time<tpf::chrono_random::second_t>() << std::endl;
69}
70
72{
73 big_int_t n = 40;
74 big_int_t k = 12;
75
77
78 std::cout << "multiple_thread_ncr_recursion: "
80 << ", elapsed: " << sw.elapsed_time<tpf::chrono_random::second_t>() << std::endl;
81
82 std::cout << "single_thread_recursion : "
84 << ", elapsed: " << sw.elapsed_time<tpf::chrono_random::second_t>() << std::endl;
85}
86
87int main()
88{
89 // examples_for_combination();
91}
auto & cout
auto & endl
std::string elapsed_time(bool bReset=true, TimeUnit dummy_time=TimeUnit{}) const
std::ratio< 1 > second_t
enable_if_all_in_list_t< types::type_list_t< Type1, Type2 >, integral_list_t, ReturnType > ncr(Type1 nn, Type2 rr)
Definition: tpf_ncrnpr.hpp:390
void examples_for_single_vs_multithread_recursion()
big_int_t multiple_thread_ncr_recursion(big_int_t n, big_int_t k)
int max_thread_count
big_int_t single_thread_ncr_recursion(big_int_t n, big_int_t k)
int main()
long long big_int_t
void examples_for_combination()
constexpr int factor
std::atomic< int > thread_count
Stream output operators << are implemented.