Skip to content

Commit 2c09206

Browse files
committed
refactor: Simplify variable usage in karatsuba_multiply function for clarity
1 parent 95415b5 commit 2c09206

File tree

1 file changed

+12
-18
lines changed

1 file changed

+12
-18
lines changed

weilycoder/poly/karatsuba.hpp

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,13 @@ void karatsuba_multiply(InputIt a_begin, InputIt a_end, InputIt b_begin, InputIt
3636
size_t half_size = std::max(a_size, b_size) / 2;
3737

3838
// Split the polynomials
39-
auto a_low_begin = a_begin;
40-
auto a_low_end = (a_size > half_size) ? a_begin + half_size : a_end;
41-
auto a_high_begin = (a_size > half_size) ? a_begin + half_size : a_end;
42-
auto a_high_end = a_end;
43-
auto b_low_begin = b_begin;
44-
auto b_low_end = (b_size > half_size) ? b_begin + half_size : b_end;
45-
auto b_high_begin = (b_size > half_size) ? b_begin + half_size : b_end;
46-
auto b_high_end = b_end;
39+
auto a_mid = (a_size > half_size) ? a_begin + half_size : a_end;
40+
auto b_mid = (b_size > half_size) ? b_begin + half_size : b_end;
4741

48-
size_t a_low_size = std::distance(a_low_begin, a_low_end);
49-
size_t b_low_size = std::distance(b_low_begin, b_low_end);
50-
size_t a_high_size = std::distance(a_high_begin, a_high_end);
51-
size_t b_high_size = std::distance(b_high_begin, b_high_end);
42+
size_t a_low_size = std::distance(a_begin, a_mid);
43+
size_t b_low_size = std::distance(b_begin, b_mid);
44+
size_t a_high_size = std::distance(a_mid, a_end);
45+
size_t b_high_size = std::distance(b_mid, b_end);
5246
size_t a_max_size = std::max(a_low_size, a_high_size);
5347
size_t b_max_size = std::max(b_low_size, b_high_size);
5448
size_t part_size = a_max_size + b_max_size - 1;
@@ -58,21 +52,21 @@ void karatsuba_multiply(InputIt a_begin, InputIt a_end, InputIt b_begin, InputIt
5852
std::vector<T> z2(part_size);
5953

6054
// z0 = a_low * b_low
61-
karatsuba_multiply(a_low_begin, a_low_end, b_low_begin, b_low_end, z0.begin());
55+
karatsuba_multiply(a_begin, a_mid, b_begin, b_mid, z0.begin());
6256
// z2 = a_high * b_high
63-
karatsuba_multiply(a_high_begin, a_high_end, b_high_begin, b_high_end, z2.begin());
57+
karatsuba_multiply(a_mid, a_end, b_mid, b_end, z2.begin());
6458

6559
// z1 = (a_low + a_high) * (b_low + b_high) - z0 - z2
6660
std::vector<T> a_sum(std::max(a_low_size, a_high_size));
6761
for (size_t i = 0; i < a_low_size; ++i)
68-
a_sum[i] += a_low_begin[i];
62+
a_sum[i] += a_begin[i];
6963
for (size_t i = 0; i < a_high_size; ++i)
70-
a_sum[i] += a_high_begin[i];
64+
a_sum[i] += a_mid[i];
7165
std::vector<T> b_sum(std::max(b_low_size, b_high_size));
7266
for (size_t i = 0; i < b_low_size; ++i)
73-
b_sum[i] += b_low_begin[i];
67+
b_sum[i] += b_begin[i];
7468
for (size_t i = 0; i < b_high_size; ++i)
75-
b_sum[i] += b_high_begin[i];
69+
b_sum[i] += b_mid[i];
7670
karatsuba_multiply(a_sum.begin(), a_sum.end(), b_sum.begin(), b_sum.end(),
7771
z1.begin());
7872
for (size_t i = 0; i < part_size; ++i)

0 commit comments

Comments
 (0)