🧮 Simple Multiplication Algorithm vs Karatsuba Algorithm
This project implements and compares two multiplication algorithms:
- Simple Multiplication Algorithm - A traditional approach with O(n²) complexity
- Karatsuba Algorithm - A faster divide-and-conquer approach
- Java Development Kit (JDK) 8 or higher
- Basic understanding of algorithm complexity
- Familiarity with Java programming
🔢 Simple Multiplication Algorithm
The simple multiplication algorithm is implemented with the following steps and their time complexities:
-
Generating Random Numbers 🎲
- Time Complexity: O(n)
- Generates random numbers with n digits
- Constant time operation for each digit
-
Storing Digits in Arrays 📦
- Time Complexity: O(n)
- Iterates once over n digits
- Stores each digit in separate arrays
-
Performing Multiplication ✖️
- Time Complexity: O(n²)
- Nested loops for digit-by-digit multiplication
- Most significant part of the algorithm
-
Handling Carries and Partial Products ➕
- Time Complexity: O(n²)
- Manages carries and accumulates partial products
- Nested within multiplication loops
-
Result Output 📝
- Time Complexity: O(n)
- Linear iteration over result digits
- Formats and displays the final product
Overall Time Complexity: O(n²) ⏱️
A faster multiplication algorithm that reduces the number of multiplication operations through recursive decomposition.
-
Base Case ⚡
- If n = 1, uses simple multiplication
- Direct multiplication for single-digit numbers
-
Recursive Decomposition 🔄
- Splits numbers into halves (a, b) and (c, d)
- Performs three recursive multiplications:
-
Final Computation 🎯
- Combines results using the formula:
- ac * 10ⁿ + ((a+b)(c+d) - ac - bd) * 10ⁿ/² + bd
- Reduces multiplication operations
- More efficient for large numbers
- Recursive approach with three subproblems
🛠️ Implementation Details
- Both algorithms are implemented in Java
- Includes performance counters for operation tracking
- Supports random number generation for testing
- Validates results through assertions
.
├── SimpleMultiplication.java # Simple multiplication implementation
├── Karatsuba.java # Karatsuba algorithm implementation
├── Graph of Karatsuba Algorithm.xlsx # Performance graphs
└── Graph for Simple Multiplication.xlsx # Performance graphs
-
Compile the Java files:
javac SimpleMultiplication.java
javac Karatsuba.java
-
Run the algorithms:
java SimpleMultiplication
java Karatsuba
-
Configure parameters:
- Modify numberOfDigits in both files to change input size
- Adjust MAX_VALUE to change number of test iterations
| Algorithm |
Time Complexity |
Best For |
Space Complexity |
| Simple |
O(n²) |
Small numbers |
O(n) |
| Karatsuba |
O(n^1.585) |
Large numbers |
O(n) |
- Both algorithms are tested with random numbers
- Results are compared with expected values
- Includes assertion checks for accuracy
- Supports configurable number of digits and test iterations
The project includes Excel files with performance graphs:
- Graph of Karatsuba Algorithm.xlsx
- Graph for Simple Multiplication.xlsx
These graphs visualize:
- Operation count vs. input size
- Time complexity comparison
- Performance differences between algorithms
Feel free to:
- Report issues
- Suggest improvements
- Submit pull requests
This project is open source and available for educational purposes.