You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化矩阵中最高频元素查找函数的性能?

优化矩阵高频元素统计的性能方案

你的代码核心性能瓶颈在于重复调用flatten_m.count(i):每遇到一个元素就遍历整个扁平化列表统计次数,比如元素0出现4次,就会被重复统计4次,整体时间复杂度达到O(n²)(n为矩阵总元素数),矩阵越大性能越差。

优化方案:用collections.Counter做一次频次统计

Counter是Python标准库中专门用于频次统计的工具,底层基于哈希表实现,只需遍历一次元素就能完成所有统计,时间复杂度降到O(n),同时避免重复计算。

修改后的代码如下:

from itertools import chain
from collections import Counter

def max_repeat_elem(matrix):
    # 处理空矩阵或全空行的情况
    if not matrix or not any(row for row in matrix):
        return None

    # 直接用迭代器传入Counter,无需转成列表节省内存
    flatten_iter = chain.from_iterable(matrix)
    elem_counts = Counter(flatten_iter)
    
    # 构建「频次-元素列表」的映射
    freq_to_elems = {}
    for elem, count in elem_counts.items():
        if count not in freq_to_elems:
            freq_to_elems[count] = []
        freq_to_elems[count].append(elem)
    
    # 取最高频次对应的元素列表
    max_freq = max(freq_to_elems.keys())
    return freq_to_elems[max_freq]

优化点说明

  1. 避免重复统计:Counter一次性遍历所有元素完成统计,每个元素只被计算一次,彻底消除原代码中重复调用count()的冗余操作。
  2. 节省内存:直接将chain返回的迭代器传入Counter,无需先转成列表,减少内存占用。
  3. 简化逻辑:因为每个元素只处理一次,不需要再判断元素是否已存在于频次列表中,代码更简洁。

测试验证

用你提供的测试矩阵:

matrix = [[0, 5, 1, 1, 0],
         [0, 2, 2, 2, 0],
         [1, 2, 4, 3, 1]]

调用函数返回[0, 1, 2],和预期结果一致。

内容的提问来源于stack exchange,提问作者Bsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:46:05