36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
from typing import Any, Dict, List
|
|
from common.base_problem import BaseProblem
|
|
from problems.max_subarray.generator import generate_max_subarray_case
|
|
from problems.max_subarray.solvers import solve_brute_force, solve_divide_conquer, solve_kadane
|
|
from common.timer_utils import time_execution
|
|
|
|
class MaxSubarrayProblem(BaseProblem):
|
|
def generate_case(self, size: int = 100, min_val: int = -100, max_val: int = 100) -> Dict[str, Any]:
|
|
arr = generate_max_subarray_case(size, min_val, max_val)
|
|
return {"array": arr}
|
|
|
|
def solve(self, input_data: Dict[str, Any], algorithm: str) -> Dict[str, Any]:
|
|
arr = input_data.get("array", [])
|
|
result = None
|
|
duration = 0.0
|
|
|
|
if algorithm == "brute_force":
|
|
result, duration = time_execution(solve_brute_force)(arr)
|
|
elif algorithm == "divide_conquer":
|
|
result, duration = time_execution(solve_divide_conquer)(arr)
|
|
elif algorithm == "kadane":
|
|
result, duration = time_execution(solve_kadane)(arr)
|
|
else:
|
|
raise ValueError(f"Unknown algorithm: {algorithm}")
|
|
|
|
return {
|
|
"algorithm": algorithm,
|
|
"result": result,
|
|
"time_seconds": duration
|
|
}
|
|
|
|
def verify(self, input_data: Any, result: Any) -> bool:
|
|
# Use Kadane as the source of truth
|
|
truth, _ = time_execution(solve_kadane)(input_data.get("array", []))
|
|
return result == truth
|