Updated descriptions

This commit is contained in:
Edward Donner
2024-12-24 17:59:48 +00:00
parent f5a66d264a
commit cb0b8a8d45
7 changed files with 96 additions and 70 deletions

View File

@@ -4,15 +4,12 @@
#include <limits>
#include <iomanip>
using namespace std;
using namespace chrono;
class LCG {
private:
uint64_t value;
static const uint64_t a = 1664525;
static const uint64_t c = 1013904223;
static const uint64_t m = 1ULL << 32;
const uint64_t a = 1664525;
const uint64_t c = 1013904223;
const uint64_t m = 1ULL << 32;
public:
LCG(uint64_t seed) : value(seed) {}
@@ -25,21 +22,17 @@ public:
int64_t max_subarray_sum(int n, uint64_t seed, int min_val, int max_val) {
LCG lcg(seed);
vector<int64_t> random_numbers(n);
std::vector<int> random_numbers(n);
for (int i = 0; i < n; ++i) {
random_numbers[i] = lcg.next() % (max_val - min_val + 1) + min_val;
random_numbers[i] = static_cast<int>(lcg.next() % (max_val - min_val + 1) + min_val);
}
int64_t max_sum = numeric_limits<int64_t>::min();
int64_t max_sum = std::numeric_limits<int64_t>::min();
int64_t current_sum = 0;
int64_t min_sum = 0;
for (int i = 0; i < n; ++i) {
current_sum += random_numbers[i];
max_sum = max(max_sum, current_sum - min_sum);
min_sum = min(min_sum, current_sum);
current_sum = std::max(static_cast<int64_t>(random_numbers[i]), current_sum + random_numbers[i]);
max_sum = std::max(max_sum, current_sum);
}
return max_sum;
}
@@ -54,19 +47,19 @@ int64_t total_max_subarray_sum(int n, uint64_t initial_seed, int min_val, int ma
}
int main() {
const int n = 10000;
const uint64_t initial_seed = 42;
const int min_val = -10;
const int max_val = 10;
int n = 10000;
uint64_t initial_seed = 42;
int min_val = -10;
int max_val = 10;
auto start_time = high_resolution_clock::now();
auto start_time = std::chrono::high_resolution_clock::now();
int64_t result = total_max_subarray_sum(n, initial_seed, min_val, max_val);
auto end_time = high_resolution_clock::now();
auto end_time = std::chrono::high_resolution_clock::now();
auto duration = duration_cast<microseconds>(end_time - start_time);
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
cout << "Total Maximum Subarray Sum (20 runs): " << result << endl;
cout << "Execution Time: " << fixed << setprecision(6) << duration.count() / 1e6 << " seconds" << endl;
std::cout << "Total Maximum Subarray Sum (20 runs): " << result << std::endl;
std::cout << "Execution Time: " << std::fixed << std::setprecision(6) << duration.count() / 1e6 << " seconds" << std::endl;
return 0;
}