51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

指数计算中常用加权平均(如加权算术平均),请设计一个高效算法计算加权平均,并分析时间复杂度和空间复杂度,说明如何优化(如分治、并行计算)。

中证数据[经济金融岗]难度:中等

答案

1) 【一句话结论】:采用分治策略递归分解数据,通过合并子问题的加权平均结果计算整体加权平均,时间复杂度优化至O(n log n),空间复杂度O(log n),且支持并行计算加速。

2) 【原理/概念讲解】:加权算术平均的核心公式为 ( \frac{\sum (x_i \cdot w_i)}{\sum w_i} )((x_i) 为数值,(w_i) 为权重)。直接遍历计算需O(n)时间,但大规模数据可通过分治优化:将数据拆分为左右子数组,分别递归计算子问题的加权平均,再合并结果。类比:计算一大袋水果的加权平均(按重量),可将袋子分成两半,分别称重计算每半的“重量-数值比”,再合并(加权平均是两半的加权平均的加权平均,即加权平均的加权平均)。分治的核心是减少重复计算,将大问题拆解为独立子问题,递归求解后合并。

3) 【对比与适用场景】:

方法定义特性时间复杂度空间复杂度适用场景
直接遍历逐个元素计算 (x_i \cdot w_i) 累加后除以权重和简单,无额外分解O(n)O(1)数据量小,无并行需求
分治算法递归拆分数组,分别计算子加权平均,合并结果递归分解,减少计算量O(n log n)O(log n)(递归栈)大规模数据,需优化计算
并行计算多线程/多进程分别计算子加权平均,再合并并行处理,加速计算O(n)(理想并行)O(1)(线程间通信)高性能计算环境,多核CPU

4) 【示例】(伪代码):

def weighted_average(a, w):
    if len(a) == 1:
        return a[0] * w[0] / sum(w)
    mid = len(a) // 2
    left_avg = weighted_average(a[:mid], w[:mid])
    right_avg = weighted_average(a[mid:], w[mid:])
    left_sum = sum(w[:mid])
    right_sum = sum(w[mid:])
    return (left_avg * left_sum + right_avg * right_sum) / (left_sum + right_sum)

# 示例:a=[10,20,30], w=[1,2,3]
# 左子数组[10,20], w=[1,2] → 加权平均=(10*1+20*2)/(1+2)=50/3≈16.67;右子数组[30], w=[3] → 30*3/3=30;合并:(16.67*3+30*3)/(3+3)=140/6≈23.33

5) 【面试口播版答案】:
面试官您好,加权平均的计算公式是各数值乘以权重求和后除以权重总和。直接遍历计算需要O(n)时间,对于大规模数据(比如百万级),我们可以用分治算法优化。具体来说,将数据分成左右两部分,分别递归计算子问题的加权平均,然后合并结果。比如,假设数组长度为n,递归分解后,每个子问题的计算时间是O(n/2),递归深度为log n,总时间复杂度是O(n log n)。空间复杂度是O(log n)因为递归栈。此外,分治算法天然支持并行计算,比如将左右子数组分配给不同线程处理,最后合并结果,这样在多核CPU上能显著加速。总结来说,分治结合并行是高效计算加权平均的方案,时间复杂度O(n log n),空间O(log n),适用于大数据量场景。

6) 【追问清单】:

  • 问:并行计算时如何处理数据划分不均?答:采用动态负载均衡,根据子数组大小分配任务,或预先计算子数组大小再分配。
  • 问:权重和为0(所有权重为0)时算法如何处理?答:先检查权重和是否为0,若为0则返回0或抛出异常,避免除以0。
  • 问:分治合并步骤是否正确?答:合并时需用子问题的权重和作为权重,计算加权平均的加权平均,即 ((左加权平均×左权重和 + 右加权平均×右权重和)/(左权重和+右权重和)),这是正确的加权平均合并方式。
  • 问:空间复杂度是否可优化到O(1)?答:可用迭代代替递归,通过栈实现,但递归更简洁,空间仍为O(log n),迭代可优化至O(1)。
  • 问:分治与动态规划的区别?答:分治分解独立子问题,动态规划子问题有重叠,加权平均子问题无重叠,故分治更合适。

7) 【常见坑/雷区】:

  • 忽略权重和为0,导致除以0错误。
  • 合并时错误计算为算术平均(直接相加数值而非加权求和)。
  • 时间复杂度分析误判为O(n²)。
  • 并行计算未考虑线程同步或数据竞争。
  • 空间复杂度遗漏递归栈,误认为O(1)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1