我正在为 Hadoop/MapReduce 框架重新设计一些经典算法。我想知道是否有任何既定的方法来表示 Big(O) 类型的表达式来测量时间复杂度?
例如,假设,n(=10 亿)个数字的简单平均计算是使用简单 for 循环的 O(n) + C 操作,或 O(log) 为了简单起见,我假设除法是一个常数时间操作. 如果我打破 MapReduce 的这种大规模可并行化算法,通过将数据划分到 k 个节点上,我的时间复杂度将简单地变为 O(n/k) + C + C'。在这里,C' 可以假设为作业计划时间开销。请注意,没有涉及洗牌,reducer 的工作几乎是微不足道的。
我对使用数据迭代循环的算法进行更完整的分析感兴趣,并涉及大量的洗牌和归约器操作。如果可能的话,我想合并 I/O 操作和数据的网络传输。