Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm MapReduce矩阵乘法复杂性_Algorithm_Mapreduce_Complexity Theory_Matrix Multiplication - Fatal编程技术网

Algorithm MapReduce矩阵乘法复杂性

Algorithm MapReduce矩阵乘法复杂性,algorithm,mapreduce,complexity-theory,matrix-multiplication,Algorithm,Mapreduce,Complexity Theory,Matrix Multiplication,假设我们有一个大文件,其中包含两个矩阵(A和B)单元的描述: 我们要计算这个矩阵的乘积:C=A x B 根据定义:C_i_j=sum(A_i_k*B_k_j) 这里有一个两步MapReduce算法,用于计算这个乘积(我将提供一个伪代码): 第一步: function Map (input is a single row of the file from above): i = row[0] j = row[1] value = row[2] matrix =

假设我们有一个大文件,其中包含两个矩阵(A和B)单元的描述:

我们要计算这个矩阵的乘积:
C=A x B

根据定义:
C_i_j=sum(A_i_k*B_k_j)

这里有一个两步MapReduce算法,用于计算这个乘积(我将提供一个伪代码):

第一步:

function Map (input is a single row of the file from above):

    i = row[0]
    j = row[1]
    value  = row[2]
    matrix = row[3]

    if(matrix == 'A')
        emit(i, {j, value, 'A'})
    else
        emit(j, {i, value, 'B'})
function Map (input is a single row of the file, which produced in first step):
    i = row[0]
    j = row[1]
    value = row[2]
    emit({i, j}, value)
此映射函数的复杂性为
O(1)

这个Reduce函数的复杂度是
O(N^2)

在第一步之后,我们将获得类似以下文件的内容(其中包含
O(N^3)
行):

所以,我们所要做的就是,从包含相同值
i
j
的行中求和值

第二步:

function Map (input is a single row of the file from above):

    i = row[0]
    j = row[1]
    value  = row[2]
    matrix = row[3]

    if(matrix == 'A')
        emit(i, {j, value, 'A'})
    else
        emit(j, {i, value, 'B'})
function Map (input is a single row of the file, which produced in first step):
    i = row[0]
    j = row[1]
    value = row[2]
    emit({i, j}, value)


第二步之后,我们将获得文件,其中包含矩阵
C
的单元格

所以问题是:

function Map (input is a single row of the file from above):

    i = row[0]
    j = row[1]
    value  = row[2]
    matrix = row[3]

    if(matrix == 'A')
        emit(i, {j, value, 'A'})
    else
        emit(j, {i, value, 'B'})
function Map (input is a single row of the file, which produced in first step):
    i = row[0]
    j = row[1]
    value = row[2]
    emit({i, j}, value)
考虑到MapReduce集群中存在多个实例,哪种方法是估计所提供算法复杂性的最正确方法

我想到的第一个问题是:
假设MapReduce集群中的实例数为
K
。 而且,由于第一步后产生的文件行数是
O(N^3)
,因此总体复杂性可以估计为
O((N^3)/K)

但是这个估计没有考虑很多细节:比如MapReduce集群实例之间的网络带宽,在不同距离之间分发数据的能力,以及在本地执行大部分计算等


因此,我想知道哪种方法是评估提供的MapReduce算法效率的最佳方法,使用Big-O表示法来评估MapReduce算法的效率是否有意义?

正如您所说,Big-O评估计算复杂性,并且没有考虑网络问题(带宽、拥塞、延迟…)

如果您想计算实例之间的通信效率,在这种情况下,您需要其他网络指标

然而,我想告诉你一些事情,如果你的文件不够大,你将看不到执行速度方面的改进。这是因为MapReduce只有在大数据的情况下才能有效工作。此外,您的代码有两个步骤,即两个作业。从一个作业到另一个作业,MapReduce需要时间上载文件并重新启动作业。这会稍微影响性能

我认为您可以从速度和时间两个方面高效地计算数据,因为MapReduce方法在大数据方面肯定更快。如果我们将其与顺序算法进行比较,就会发现这一点

此外,效率可以与容错性有关。这是因为MapReduce将自行处理故障。因此,程序员无需处理实例故障或网络故障