三项评分线性定价
题意
已知 部手机,每部手机有三项评分
和对应的价格
。价格与评分之间满足线性关系:
$$
根据这 组已知数据拟合出四个系数
,然后对
部新手机预测价格,四舍五入到整数后输出。
思路
这是一道经典的多元线性回归问题,使用最小二乘法求解。
构造设计矩阵 (每行为
)和价格向量
,参数向量
由正规方程给出:
$$
实际实现中直接调用 numpy.linalg.lstsq 即可,它内部使用 SVD 分解求解,数值稳定性优于直接求逆。
拟合出 后,对每部待预测手机计算
,四舍五入输出。
代码
import sys
import numpy as np
def main():
data = sys.stdin.read().split()
idx = 0
K = int(data[idx]); idx += 1
X = []
Y = []
for _ in range(K):
x1 = int(data[idx]); idx += 1
x2 = int(data[idx]); idx += 1
x3 = int(data[idx]); idx += 1
price = int(data[idx]); idx += 1
X.append([1, x1, x2, x3])
Y.append(price)
X = np.array(X, dtype=np.float64)
Y = np.array(Y, dtype=np.float64)
# 正规方程求解: beta = (X^T X)^{-1} X^T Y
beta = np.linalg.lstsq(X, Y, rcond=None)[0]
N = int(data[idx]); idx += 1
results = []
for _ in range(N):
x1 = int(data[idx]); idx += 1
x2 = int(data[idx]); idx += 1
x3 = int(data[idx]); idx += 1
pred = beta[0] + beta[1] * x1 + beta[2] * x2 + beta[3] * x3
results.append(str(round(pred)))
print(' '.join(results))
main()
复杂度
- 时间复杂度:
,其中
为特征维度。构造
需
,求解需
,预测需
。由于
为常数,实际为
。
- 空间复杂度:
,存储设计矩阵和结果。

京公网安备 11010502036488号