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

如何使用Perl实现邻接矩阵adjacency matrix的n次幂计算

邻接矩阵n次幂Perl实现方案

核心逻辑

邻接矩阵的n次幂基于矩阵乘法规则迭代计算:矩阵A与矩阵B的乘积矩阵C中,元素C[i][j]等于A的第i行和B的第j列所有对应位置元素乘积的和。要计算邻接矩阵的n次幂,只需将原矩阵自乘n-1次,此处采用快速幂算法优化计算效率,幂次越高性能优势越明显。

补充功能代码

在你现有matrix_read_file函数的基础上,新增如下两个功能函数即可:

# 矩阵乘法:输入两个同阶矩阵的引用,返回乘积矩阵引用
sub matrix_multiply {
    my ($mat_a, $mat_b) = @_;
    my $size = scalar @$mat_a;
    my @result;
    
    # 初始化结果矩阵为全0
    for my $i (0..$size-1) {
        $result[$i] = [ (0) x $size ];
    }
    
    # 三重循环计算乘积,跳过0元素优化邻接矩阵计算速度
    for my $i (0..$size-1) {
        for my $k (0..$size-1) {
            next if $mat_a->[$i][$k] == 0;
            for my $j (0..$size-1) {
                $result[$i][$j] += $mat_a->[$i][$k] * $mat_b->[$k][$j];
            }
        }
    }
    return \@result;
}

# 矩阵幂计算:输入原矩阵引用、幂次n,返回n次幂计算结果矩阵引用
sub matrix_power {
    my ($mat, $power) = @_;
    my $size = scalar @$mat;
    
    # 初始化结果为单位矩阵
    my @result;
    for my $i (0..$size-1) {
        $result[$i] = [ (0) x $size ];
        $result[$i][$i] = 1;
    }
    
    my $current_mat = $mat;
    my $remaining_power = $power;
    # 快速幂迭代计算
    while ($remaining_power > 0) {
        if ($remaining_power % 2 == 1) {
            $result = matrix_multiply(\@result, $current_mat);
        }
        $current_mat = matrix_multiply($current_mat, $current_mat);
        $remaining_power = int($remaining_power / 2);
    }
    return \@result;
}

调用测试示例

# 读取矩阵文件,替换为你的实际文件路径
my $adj_matrix = matrix_read_file('adjacency_matrix.txt');
# 指定要计算的幂次
my $target_power = 2;
# 计算结果
my $power_result = matrix_power($adj_matrix, $target_power);

# 打印结果验证
print "邻接矩阵${target_power}次幂计算结果:\n";
for my $row (@$power_result) {
    print join(' ', @$row) . "\n";
}

运行上述代码后,你给出的示例矩阵计算2次幂的输出会和你提供的预期结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:27:04