25-cxsj-final/backend/problems/max_subarray/problem.py

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